[app] Fix no app selected check (#715)
This commit is contained in:
parent
ededadd38b
commit
7e23bcbda0
|
|
@ -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()) {
|
if (!refreshing && fragment.binding.masterSwitch.isChecked() && checkedList.isEmpty()) {
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||||
builder.setMessage(!recommendedList.isEmpty() ? R.string.no_scope_selected_has_recommended : R.string.no_scope_selected);
|
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) -> {
|
builder.setNegativeButton(!recommendedList.isEmpty() ? android.R.string.cancel : android.R.string.ok, (dialog, which) -> {
|
||||||
moduleUtil.setModuleEnabled(module.packageName, false);
|
moduleUtil.setModuleEnabled(module.packageName, false);
|
||||||
Toast.makeText(activity, activity.getString(R.string.module_disabled_no_selection, module.getAppName()), Toast.LENGTH_LONG).show();
|
Toast.makeText(activity, activity.getString(R.string.module_disabled_no_selection, module.getAppName()), Toast.LENGTH_LONG).show();
|
||||||
activity.finish();
|
fragment.getNavController().navigateUp();
|
||||||
});
|
});
|
||||||
builder.show();
|
builder.show();
|
||||||
return false;
|
|
||||||
} else {
|
} else {
|
||||||
return true;
|
fragment.getNavController().navigateUp();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import androidx.activity.OnBackPressedCallback;
|
||||||
import androidx.activity.result.ActivityResultLauncher;
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
import androidx.activity.result.contract.ActivityResultContracts;
|
import androidx.activity.result.contract.ActivityResultContracts;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
@ -85,7 +86,7 @@ public class AppListFragment extends BaseFragment {
|
||||||
|
|
||||||
searchListener = scopeAdapter.getSearchListener();
|
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();
|
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
|
@Override
|
||||||
|
|
@ -163,6 +171,13 @@ public class AppListFragment extends BaseFragment {
|
||||||
scopeAdapter.refresh(false);
|
scopeAdapter.refresh(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
|
||||||
|
binding = null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||||
if (scopeAdapter.onOptionsItemSelected(item)) {
|
if (scopeAdapter.onOptionsItemSelected(item)) {
|
||||||
|
|
|
||||||
|
|
@ -51,11 +51,15 @@ public class BaseFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setupToolbar(Toolbar toolbar, int title, int menu) {
|
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) {
|
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.setNavigationIcon(R.drawable.ic_baseline_arrow_back_24);
|
||||||
toolbar.setTitle(title);
|
toolbar.setTitle(title);
|
||||||
if (menu != -1) {
|
if (menu != -1) {
|
||||||
|
|
|
||||||
|
|
@ -167,6 +167,7 @@ public class HomeFragment extends BaseFragment {
|
||||||
@Override
|
@Override
|
||||||
public void onDestroyView() {
|
public void onDestroyView() {
|
||||||
super.onDestroyView();
|
super.onDestroyView();
|
||||||
|
|
||||||
binding = null;
|
binding = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -208,6 +208,13 @@ public class LogsFragment extends BaseFragment {
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
|
||||||
|
binding = null;
|
||||||
|
}
|
||||||
|
|
||||||
private void reloadErrorLog() {
|
private void reloadErrorLog() {
|
||||||
ParcelFileDescriptor parcelFileDescriptor = ConfigManager.getLogs(verbose);
|
ParcelFileDescriptor parcelFileDescriptor = ConfigManager.getLogs(verbose);
|
||||||
if (parcelFileDescriptor != null) {
|
if (parcelFileDescriptor != null) {
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,7 @@ import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.google.android.material.tabs.TabLayoutMediator;
|
import com.google.android.material.tabs.TabLayoutMediator;
|
||||||
|
|
||||||
import org.lsposed.lspd.models.UserInfo;
|
import org.lsposed.lspd.models.UserInfo;
|
||||||
|
import org.lsposed.manager.App;
|
||||||
import org.lsposed.manager.ConfigManager;
|
import org.lsposed.manager.ConfigManager;
|
||||||
import org.lsposed.manager.R;
|
import org.lsposed.manager.R;
|
||||||
import org.lsposed.manager.adapters.AppHelper;
|
import org.lsposed.manager.adapters.AppHelper;
|
||||||
|
|
@ -93,28 +94,29 @@ import rikka.widget.borderview.BorderRecyclerView;
|
||||||
|
|
||||||
public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleListener {
|
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 FragmentPagerBinding binding;
|
||||||
protected SearchView searchView;
|
protected SearchView searchView;
|
||||||
private SearchView.OnQueryTextListener mSearchListener;
|
private SearchView.OnQueryTextListener searchListener;
|
||||||
private final PagerAdapter pagerAdapter = new PagerAdapter();
|
private final PagerAdapter pagerAdapter = new PagerAdapter();
|
||||||
private final ArrayList<ModuleAdapter> adapters = new ArrayList<>();
|
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;
|
private ModuleUtil.InstalledModule selectedModule;
|
||||||
|
|
||||||
|
static {
|
||||||
|
HandlerThread workThread = new HandlerThread("ModulesActivity WorkHandler");
|
||||||
|
workThread.start();
|
||||||
|
workHandler = new Handler(workThread.getLooper());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(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);
|
moduleUtil.addListener(this);
|
||||||
mSearchListener = new SearchView.OnQueryTextListener() {
|
searchListener = new SearchView.OnQueryTextListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onQueryTextSubmit(String query) {
|
public boolean onQueryTextSubmit(String query) {
|
||||||
adapters.forEach(adapter -> adapter.getFilter().filter(query));
|
adapters.forEach(adapter -> adapter.getFilter().filter(query));
|
||||||
|
|
@ -187,7 +189,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
|
||||||
@Override
|
@Override
|
||||||
public void onPrepareOptionsMenu(Menu menu) {
|
public void onPrepareOptionsMenu(Menu menu) {
|
||||||
searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
|
searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
|
||||||
searchView.setOnQueryTextListener(mSearchListener);
|
searchView.setOnQueryTextListener(searchListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -198,27 +200,25 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
|
||||||
if (users.size() != adapters.size()) {
|
if (users.size() != adapters.size()) {
|
||||||
adapters.clear();
|
adapters.clear();
|
||||||
if (users.size() != 1) {
|
if (users.size() != 1) {
|
||||||
|
ArrayList<String> titles = new ArrayList<>();
|
||||||
for (var user : users) {
|
for (var user : users) {
|
||||||
var adapter = new ModuleAdapter(user);
|
var adapter = new ModuleAdapter(user);
|
||||||
adapter.setHasStableIds(true);
|
adapter.setHasStableIds(true);
|
||||||
adapters.add(adapter);
|
adapters.add(adapter);
|
||||||
titles.add(user.name);
|
titles.add(user.name);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
var adapter = new ModuleAdapter(null);
|
|
||||||
adapter.setHasStableIds(true);
|
|
||||||
adapters.add(adapter);
|
|
||||||
}
|
|
||||||
pagerAdapter.notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
if (users.size() != 1) {
|
|
||||||
binding.viewPager.setUserInputEnabled(true);
|
binding.viewPager.setUserInputEnabled(true);
|
||||||
new TabLayoutMediator(binding.tabLayout, binding.viewPager, (tab, position) -> tab.setText(titles.get(position))).attach();
|
new TabLayoutMediator(binding.tabLayout, binding.viewPager, (tab, position) -> tab.setText(titles.get(position))).attach();
|
||||||
binding.tabLayout.setVisibility(View.VISIBLE);
|
binding.tabLayout.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
|
var adapter = new ModuleAdapter(null);
|
||||||
|
adapter.setHasStableIds(true);
|
||||||
|
adapters.add(adapter);
|
||||||
binding.viewPager.setUserInputEnabled(false);
|
binding.viewPager.setUserInputEnabled(false);
|
||||||
binding.tabLayout.setVisibility(View.GONE);
|
binding.tabLayout.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
pagerAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
adapters.forEach(ModuleAdapter::refresh);
|
adapters.forEach(ModuleAdapter::refresh);
|
||||||
}
|
}
|
||||||
|
|
@ -320,6 +320,14 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
|
||||||
return super.onContextItemSelected(item);
|
return super.onContextItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
|
||||||
|
binding = null;
|
||||||
|
adapters.clear();
|
||||||
|
}
|
||||||
|
|
||||||
private class PagerAdapter extends RecyclerView.Adapter<PagerAdapter.ViewHolder> {
|
private class PagerAdapter extends RecyclerView.Adapter<PagerAdapter.ViewHolder> {
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|
|
||||||
|
|
@ -177,6 +177,13 @@ public class RepoFragment extends BaseFragment implements RepoLoader.Listener {
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
|
||||||
|
binding = null;
|
||||||
|
}
|
||||||
|
|
||||||
private class RepoAdapter extends RecyclerView.Adapter<RepoAdapter.ViewHolder> implements Filterable {
|
private class RepoAdapter extends RecyclerView.Adapter<RepoAdapter.ViewHolder> implements Filterable {
|
||||||
private List<OnlineModule> fullList, showList;
|
private List<OnlineModule> fullList, showList;
|
||||||
private final LabelComparator labelComparator = new LabelComparator();
|
private final LabelComparator labelComparator = new LabelComparator();
|
||||||
|
|
|
||||||
|
|
@ -176,6 +176,13 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.Listene
|
||||||
RepoLoader.getInstance().removeListener(this);
|
RepoLoader.getInstance().removeListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
|
||||||
|
binding = null;
|
||||||
|
}
|
||||||
|
|
||||||
private class InformationAdapter extends RecyclerView.Adapter<InformationAdapter.ViewHolder> {
|
private class InformationAdapter extends RecyclerView.Adapter<InformationAdapter.ViewHolder> {
|
||||||
private final OnlineModule module;
|
private final OnlineModule module;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,12 @@ public class SettingsFragment extends BaseFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
|
||||||
|
binding = null;
|
||||||
|
}
|
||||||
|
|
||||||
public static class PreferenceFragment extends PreferenceFragmentCompat {
|
public static class PreferenceFragment extends PreferenceFragmentCompat {
|
||||||
ActivityResultLauncher<String> backupLauncher = registerForActivityResult(new ActivityResultContracts.CreateDocument(),
|
ActivityResultLauncher<String> backupLauncher = registerForActivityResult(new ActivityResultContracts.CreateDocument(),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue