[app] Fix no app selected check (#715)

This commit is contained in:
tehcneko 2021-06-01 11:02:18 +08:00 committed by GitHub
parent ededadd38b
commit 7e23bcbda0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 81 additions and 27 deletions

View File

@ -619,7 +619,7 @@ public class ScopeAdapter extends RecyclerView.Adapter<ScopeAdapter.ViewHolder>
};
}
public boolean onBackPressed() {
public void onBackPressed() {
if (!refreshing && fragment.binding.masterSwitch.isChecked() && checkedList.isEmpty()) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setMessage(!recommendedList.isEmpty() ? R.string.no_scope_selected_has_recommended : R.string.no_scope_selected);
@ -634,12 +634,11 @@ public class ScopeAdapter extends RecyclerView.Adapter<ScopeAdapter.ViewHolder>
builder.setNegativeButton(!recommendedList.isEmpty() ? android.R.string.cancel : android.R.string.ok, (dialog, which) -> {
moduleUtil.setModuleEnabled(module.packageName, false);
Toast.makeText(activity, activity.getString(R.string.module_disabled_no_selection, module.getAppName()), Toast.LENGTH_LONG).show();
activity.finish();
fragment.getNavController().navigateUp();
});
builder.show();
return false;
} else {
return true;
fragment.getNavController().navigateUp();
}
}

View File

@ -28,6 +28,7 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import androidx.activity.OnBackPressedCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
@ -85,7 +86,7 @@ public class AppListFragment extends BaseFragment {
searchListener = scopeAdapter.getSearchListener();
setupToolbar(binding.toolbar, title, R.menu.menu_app_list);
setupToolbar(binding.toolbar, title, R.menu.menu_app_list, view -> requireActivity().getOnBackPressedDispatcher().onBackPressed());
return binding.getRoot();
}
@ -155,6 +156,13 @@ public class AppListFragment extends BaseFragment {
});
}
});
requireActivity().getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
scopeAdapter.onBackPressed();
}
});
}
@Override
@ -163,6 +171,13 @@ public class AppListFragment extends BaseFragment {
scopeAdapter.refresh(false);
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (scopeAdapter.onOptionsItemSelected(item)) {

View File

@ -51,11 +51,15 @@ public class BaseFragment extends Fragment {
}
public void setupToolbar(Toolbar toolbar, int title, int menu) {
setupToolbar(toolbar, getString(title), menu);
setupToolbar(toolbar, getString(title), menu, null);
}
public void setupToolbar(Toolbar toolbar, String title, int menu) {
toolbar.setNavigationOnClickListener(v -> navigateUp());
setupToolbar(toolbar, title, menu, null);
}
public void setupToolbar(Toolbar toolbar, String title, int menu, View.OnClickListener navigationOnClickListener) {
toolbar.setNavigationOnClickListener(navigationOnClickListener == null ? (v -> navigateUp()) : navigationOnClickListener);
toolbar.setNavigationIcon(R.drawable.ic_baseline_arrow_back_24);
toolbar.setTitle(title);
if (menu != -1) {

View File

@ -167,6 +167,7 @@ public class HomeFragment extends BaseFragment {
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}

View File

@ -208,6 +208,13 @@ public class LogsFragment extends BaseFragment {
return super.onOptionsItemSelected(item);
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
private void reloadErrorLog() {
ParcelFileDescriptor parcelFileDescriptor = ConfigManager.getLogs(verbose);
if (parcelFileDescriptor != null) {

View File

@ -66,6 +66,7 @@ import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.tabs.TabLayoutMediator;
import org.lsposed.lspd.models.UserInfo;
import org.lsposed.manager.App;
import org.lsposed.manager.ConfigManager;
import org.lsposed.manager.R;
import org.lsposed.manager.adapters.AppHelper;
@ -93,28 +94,29 @@ import rikka.widget.borderview.BorderRecyclerView;
public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleListener {
private static final Handler workHandler;
private static final PackageManager pm = App.getInstance().getPackageManager();
private static final ModuleUtil moduleUtil = ModuleUtil.getInstance();
protected FragmentPagerBinding binding;
protected SearchView searchView;
private SearchView.OnQueryTextListener mSearchListener;
private SearchView.OnQueryTextListener searchListener;
private final PagerAdapter pagerAdapter = new PagerAdapter();
private final ArrayList<ModuleAdapter> adapters = new ArrayList<>();
private final ArrayList<String> titles = new ArrayList<>();
private Handler workHandler;
private PackageManager pm;
private ModuleUtil moduleUtil;
private ModuleUtil.InstalledModule selectedModule;
static {
HandlerThread workThread = new HandlerThread("ModulesActivity WorkHandler");
workThread.start();
workHandler = new Handler(workThread.getLooper());
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
HandlerThread workThread = new HandlerThread("ModulesActivity WorkHandler");
workThread.start();
workHandler = new Handler(workThread.getLooper());
moduleUtil = ModuleUtil.getInstance();
pm = requireContext().getPackageManager();
moduleUtil.addListener(this);
mSearchListener = new SearchView.OnQueryTextListener() {
searchListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
adapters.forEach(adapter -> adapter.getFilter().filter(query));
@ -187,7 +189,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
@Override
public void onPrepareOptionsMenu(Menu menu) {
searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setOnQueryTextListener(mSearchListener);
searchView.setOnQueryTextListener(searchListener);
}
@Override
@ -198,27 +200,25 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
if (users.size() != adapters.size()) {
adapters.clear();
if (users.size() != 1) {
ArrayList<String> titles = new ArrayList<>();
for (var user : users) {
var adapter = new ModuleAdapter(user);
adapter.setHasStableIds(true);
adapters.add(adapter);
titles.add(user.name);
}
binding.viewPager.setUserInputEnabled(true);
new TabLayoutMediator(binding.tabLayout, binding.viewPager, (tab, position) -> tab.setText(titles.get(position))).attach();
binding.tabLayout.setVisibility(View.VISIBLE);
} else {
var adapter = new ModuleAdapter(null);
adapter.setHasStableIds(true);
adapters.add(adapter);
binding.viewPager.setUserInputEnabled(false);
binding.tabLayout.setVisibility(View.GONE);
}
pagerAdapter.notifyDataSetChanged();
}
if (users.size() != 1) {
binding.viewPager.setUserInputEnabled(true);
new TabLayoutMediator(binding.tabLayout, binding.viewPager, (tab, position) -> tab.setText(titles.get(position))).attach();
binding.tabLayout.setVisibility(View.VISIBLE);
} else {
binding.viewPager.setUserInputEnabled(false);
binding.tabLayout.setVisibility(View.GONE);
}
}
adapters.forEach(ModuleAdapter::refresh);
}
@ -320,6 +320,14 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
return super.onContextItemSelected(item);
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
adapters.clear();
}
private class PagerAdapter extends RecyclerView.Adapter<PagerAdapter.ViewHolder> {
@NonNull

View File

@ -177,6 +177,13 @@ public class RepoFragment extends BaseFragment implements RepoLoader.Listener {
return super.onOptionsItemSelected(item);
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
private class RepoAdapter extends RecyclerView.Adapter<RepoAdapter.ViewHolder> implements Filterable {
private List<OnlineModule> fullList, showList;
private final LabelComparator labelComparator = new LabelComparator();

View File

@ -176,6 +176,13 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.Listene
RepoLoader.getInstance().removeListener(this);
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
private class InformationAdapter extends RecyclerView.Adapter<InformationAdapter.ViewHolder> {
private final OnlineModule module;

View File

@ -85,6 +85,12 @@ public class SettingsFragment extends BaseFragment {
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
public static class PreferenceFragment extends PreferenceFragmentCompat {
ActivityResultLauncher<String> backupLauncher = registerForActivityResult(new ActivityResultContracts.CreateDocument(),