diff --git a/app/src/main/java/org/lsposed/manager/App.java b/app/src/main/java/org/lsposed/manager/App.java index 6df4b446..7180c3a4 100644 --- a/app/src/main/java/org/lsposed/manager/App.java +++ b/app/src/main/java/org/lsposed/manager/App.java @@ -226,10 +226,7 @@ public class App extends Application { var intent = (Intent) inIntent.getParcelableExtra(Intent.EXTRA_INTENT); Log.d(TAG, "onReceive: " + intent); switch (intent.getAction()) { - case Intent.ACTION_PACKAGE_ADDED: - case Intent.ACTION_PACKAGE_CHANGED: - case Intent.ACTION_PACKAGE_FULLY_REMOVED: - case Intent.ACTION_UID_REMOVED: { + case Intent.ACTION_PACKAGE_ADDED, Intent.ACTION_PACKAGE_CHANGED, Intent.ACTION_PACKAGE_FULLY_REMOVED, Intent.ACTION_UID_REMOVED -> { var userId = intent.getIntExtra(Intent.EXTRA_USER, 0); var packageName = intent.getStringExtra("android.intent.extra.PACKAGES"); var packageRemovedForAllUsers = intent.getBooleanExtra(EXTRA_REMOVED_FOR_ALL_USERS, false); @@ -240,14 +237,8 @@ public class App extends Application { else App.getExecutorService().submit(() -> AppHelper.getAppList(true)); } - break; - } - case ACTION_USER_ADDED: - case ACTION_USER_REMOVED: - case ACTION_USER_INFO_CHANGED: { - App.getExecutorService().submit(() -> ModuleUtil.getInstance().reloadInstalledModules()); - break; } + case ACTION_USER_ADDED, ACTION_USER_REMOVED, ACTION_USER_INFO_CHANGED -> App.getExecutorService().submit(() -> ModuleUtil.getInstance().reloadInstalledModules()); } } }, intentFilter, Context.RECEIVER_NOT_EXPORTED); diff --git a/app/src/main/java/org/lsposed/manager/adapters/ScopeAdapter.java b/app/src/main/java/org/lsposed/manager/adapters/ScopeAdapter.java index 25af2d31..594844f6 100644 --- a/app/src/main/java/org/lsposed/manager/adapters/ScopeAdapter.java +++ b/app/src/main/java/org/lsposed/manager/adapters/ScopeAdapter.java @@ -594,7 +594,7 @@ public class ScopeAdapter extends EmptyStateRecyclerView.EmptyStateAdapter { moduleUtil.setModuleEnabled(module.packageName, false); Toast.makeText(activity, activity.getString(R.string.module_disabled_no_selection, module.getAppName()), Toast.LENGTH_LONG).show(); - fragment.getNavController().navigateUp(); + fragment.navigateUp(); }); builder.show(); } else { - fragment.getNavController().navigateUp(); + fragment.navigateUp(); } } diff --git a/app/src/main/java/org/lsposed/manager/repo/RepoLoader.java b/app/src/main/java/org/lsposed/manager/repo/RepoLoader.java index edbbf174..d414f0a0 100644 --- a/app/src/main/java/org/lsposed/manager/repo/RepoLoader.java +++ b/app/src/main/java/org/lsposed/manager/repo/RepoLoader.java @@ -99,19 +99,20 @@ public class RepoLoader { synchronized public void loadRemoteData() { repoLoaded = false; try { - var response = App.getOkHttpClient().newCall(new Request.Builder().url(repoUrl + "modules.json").build()).execute(); + try (var response = App.getOkHttpClient().newCall(new Request.Builder().url(repoUrl + "modules.json").build()).execute()) { - if (response.isSuccessful()) { - ResponseBody body = response.body(); - if (body != null) { - try { - String bodyString = body.string(); - Files.write(repoFile, bodyString.getBytes(StandardCharsets.UTF_8)); - loadLocalData(false); - } catch (Throwable t) { - Log.e(App.TAG, Log.getStackTraceString(t)); - for (RepoListener listener : listeners) { - listener.onThrowable(t); + if (response.isSuccessful()) { + ResponseBody body = response.body(); + if (body != null) { + try { + String bodyString = body.string(); + Files.write(repoFile, bodyString.getBytes(StandardCharsets.UTF_8)); + loadLocalData(false); + } catch (Throwable t) { + Log.e(App.TAG, Log.getStackTraceString(t)); + for (RepoListener listener : listeners) { + listener.onThrowable(t); + } } } } diff --git a/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java b/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java index 2cd94a0b..20f19fdd 100644 --- a/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java +++ b/app/src/main/java/org/lsposed/manager/ui/activity/MainActivity.java @@ -50,6 +50,7 @@ import org.lsposed.manager.util.ShortcutUtil; import org.lsposed.manager.util.UpdateUtil; import java.util.HashSet; +import java.util.Objects; import rikka.core.util.ResourceUtils; @@ -122,27 +123,22 @@ public class MainActivity extends BaseActivity implements RepoLoader.RepoListene } else if (ConfigManager.isBinderAlive()) { if (!TextUtils.isEmpty(intent.getDataString())) { switch (intent.getDataString()) { - case "modules": - nav.setSelectedItemId(R.id.modules_nav); - break; - case "logs": - nav.setSelectedItemId(R.id.logs_fragment); - break; - case "repo": + case "modules" -> nav.setSelectedItemId(R.id.modules_nav); + case "logs" -> nav.setSelectedItemId(R.id.logs_fragment); + case "repo" -> { if (ConfigManager.isMagiskInstalled()) { nav.setSelectedItemId(R.id.repo_nav); } - break; - case "settings": - nav.setSelectedItemId(R.id.settings_fragment); - break; - default: + } + case "settings" -> nav.setSelectedItemId(R.id.settings_fragment); + default -> { var data = intent.getData(); - if (data != null && data.getScheme().equals("module")) { + if (data != null && Objects.equals(data.getScheme(), "module")) { navController.navigate( new Uri.Builder().scheme("lsposed").authority("module").appendQueryParameter("modulePackageName", data.getHost()).appendQueryParameter("moduleUserId", String.valueOf(data.getPort())).build(), new NavOptions.Builder().setEnterAnim(R.anim.fragment_enter).setExitAnim(R.anim.fragment_exit).setPopEnterAnim(R.anim.fragment_enter_pop).setPopExitAnim(R.anim.fragment_exit_pop).setLaunchSingleTop(true).setPopUpTo(navController.getGraph().getStartDestinationId(), false, true).build()); } + } } } } diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/BaseFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/BaseFragment.java index 7fe530db..305349e6 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/BaseFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/BaseFragment.java @@ -19,8 +19,6 @@ package org.lsposed.manager.ui.fragment; -import android.os.Handler; -import android.os.Looper; import android.view.View; import android.widget.Toast; @@ -33,7 +31,6 @@ import androidx.navigation.NavController; import androidx.navigation.NavDirections; import androidx.navigation.fragment.NavHostFragment; -import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; @@ -45,7 +42,6 @@ import java.util.concurrent.Future; import java.util.concurrent.FutureTask; public abstract class BaseFragment extends Fragment { - private final Handler uiHandler = new Handler(Looper.getMainLooper()); public void navigateUp() { getNavController().navigateUp(); @@ -93,8 +89,7 @@ public abstract class BaseFragment extends Fragment { if (tipsView != null) tipsView.setTooltipText(title); if (menu != -1) { toolbar.inflateMenu(menu); - if (this instanceof MenuProvider) { - var self = (MenuProvider) this; + if (this instanceof MenuProvider self) { toolbar.setOnMenuItemClickListener(self::onMenuItemSelected); self.onPrepareMenu(toolbar.getMenu()); } @@ -110,7 +105,7 @@ public abstract class BaseFragment extends Fragment { } public void runOnUiThread(Runnable runnable) { - uiHandler.post(runnable); + App.getMainHandler().post(runnable); } public Future runOnUiThread(Callable callable) { @@ -132,19 +127,15 @@ public abstract class BaseFragment extends Fragment { } public void showHint(CharSequence str, boolean lengthShort, CharSequence actionStr, View.OnClickListener action) { - if (isResumed()) { - var container = requireActivity().findViewById(R.id.container); - if (container != null) { - var snackbar = Snackbar.make(container, str, lengthShort ? Snackbar.LENGTH_SHORT : Snackbar.LENGTH_LONG); - if (container.findViewById(R.id.nav) instanceof BottomNavigationView) - snackbar.setAnchorView(R.id.nav); - var fab = container.findViewById(R.id.fab); - if (fab instanceof FloatingActionButton && ((FloatingActionButton) fab).isOrWillBeShown()) - snackbar.setAnchorView(fab); - if (actionStr != null && action != null) snackbar.setAction(actionStr, action); - snackbar.show(); - return; - } + var container = getView(); + if (isResumed() && container != null) { + var snackbar = Snackbar.make(container, str, lengthShort ? Snackbar.LENGTH_SHORT : Snackbar.LENGTH_LONG); + var fab = container.findViewById(R.id.fab); + if (fab instanceof FloatingActionButton && ((FloatingActionButton) fab).isOrWillBeShown()) + snackbar.setAnchorView(fab); + if (actionStr != null && action != null) snackbar.setAction(actionStr, action); + snackbar.show(); + return; } runOnUiThread(() -> { try { diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java index b2fadf0b..d9c8a85a 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/ModulesFragment.java @@ -194,18 +194,20 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi @Override public void onPrepareMenu(Menu menu) { searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); - searchView.setOnQueryTextListener(searchListener); - searchView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { - @Override - public void onViewAttachedToWindow(View arg0) { - binding.appBar.setExpanded(false, true); - } + if (searchView != null) { + searchView.setOnQueryTextListener(searchListener); + searchView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { + @Override + public void onViewAttachedToWindow(@NonNull View arg0) { + binding.appBar.setExpanded(false, true); + } - @Override - public void onViewDetachedFromWindow(View v) { - } - }); - searchView.findViewById(androidx.appcompat.R.id.search_edit_frame).setLayoutDirection(View.LAYOUT_DIRECTION_INHERIT); + @Override + public void onViewDetachedFromWindow(@NonNull View v) { + } + }); + searchView.findViewById(androidx.appcompat.R.id.search_edit_frame).setLayoutDirection(View.LAYOUT_DIRECTION_INHERIT); + } } @Override @@ -367,12 +369,12 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi private final View.OnAttachStateChangeListener searchViewLocker = new View.OnAttachStateChangeListener() { @Override - public void onViewAttachedToWindow(View v) { + public void onViewAttachedToWindow(@NonNull View v) { binding.recyclerView.setNestedScrollingEnabled(false); } @Override - public void onViewDetachedFromWindow(View v) { + public void onViewDetachedFromWindow(@NonNull View v) { binding.recyclerView.setNestedScrollingEnabled(true); } }; @@ -399,8 +401,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi void attachListeners() { var parent = getParentFragment(); - if (parent instanceof ModulesFragment) { - var moduleFragment = (ModulesFragment) parent; + if (parent instanceof ModulesFragment moduleFragment) { binding.recyclerView.getBorderViewDelegate().setBorderVisibilityChangedListener((top, oldTop, bottom, oldBottom) -> moduleFragment.binding.appBar.setLifted(!top)); moduleFragment.binding.appBar.setLifted(!binding.recyclerView.getBorderViewDelegate().isShowingTopBorder()); moduleFragment.searchView.addOnAttachStateChangeListener(searchViewLocker); @@ -419,8 +420,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi void detachListeners() { binding.recyclerView.getBorderViewDelegate().setBorderVisibilityChangedListener(null); var parent = getParentFragment(); - if (parent instanceof ModulesFragment) { - var moduleFragment = (ModulesFragment) parent; + if (parent instanceof ModulesFragment moduleFragment) { moduleFragment.searchView.removeOnAttachStateChangeListener(searchViewLocker); binding.recyclerView.setNestedScrollingEnabled(true); } @@ -517,7 +517,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi @NonNull @Override public ModuleAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ModuleAdapter.ViewHolder(ItemModuleBinding.inflate(getLayoutInflater(), parent, false)); + return new ViewHolder(ItemModuleBinding.inflate(getLayoutInflater(), parent, false)); } public boolean isPick() { @@ -746,7 +746,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi return isLoaded && moduleUtil.isModulesLoaded(); } - class ViewHolder extends RecyclerView.ViewHolder { + static class ViewHolder extends RecyclerView.ViewHolder { ConstraintLayout root; ImageView appIcon; TextView appName; diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/RepoFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/RepoFragment.java index 001de694..d1a65b32 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/RepoFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/RepoFragment.java @@ -177,20 +177,22 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene @Override public void onPrepareMenu(Menu menu) { searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); - searchView.setOnQueryTextListener(mSearchListener); - searchView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { - @Override - public void onViewAttachedToWindow(View arg0) { - binding.appBar.setExpanded(false, true); - binding.recyclerView.setNestedScrollingEnabled(false); - } + if (searchView != null) { + searchView.setOnQueryTextListener(mSearchListener); + searchView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { + @Override + public void onViewAttachedToWindow(@NonNull View arg0) { + binding.appBar.setExpanded(false, true); + binding.recyclerView.setNestedScrollingEnabled(false); + } - @Override - public void onViewDetachedFromWindow(View v) { - binding.recyclerView.setNestedScrollingEnabled(true); - } - }); - searchView.findViewById(androidx.appcompat.R.id.search_edit_frame).setLayoutDirection(View.LAYOUT_DIRECTION_INHERIT); + @Override + public void onViewDetachedFromWindow(@NonNull View v) { + binding.recyclerView.setNestedScrollingEnabled(true); + } + }); + searchView.findViewById(androidx.appcompat.R.id.search_edit_frame).setLayoutDirection(View.LAYOUT_DIRECTION_INHERIT); + } int sort = App.getPreferences().getInt("repo_sort", 0); if (sort == 0) { menu.findItem(R.id.item_sort_by_name).setChecked(true); @@ -281,7 +283,7 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene @NonNull @Override public RepoAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new RepoAdapter.ViewHolder(ItemOnlinemoduleBinding.inflate(getLayoutInflater(), parent, false)); + return new ViewHolder(ItemOnlinemoduleBinding.inflate(getLayoutInflater(), parent, false)); } RepoLoader.ModuleVersion getUpgradableVer(OnlineModule module) { @@ -416,7 +418,7 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene return isLoaded && repoLoader.isRepoLoaded(); } - class ViewHolder extends RecyclerView.ViewHolder { + static class ViewHolder extends RecyclerView.ViewHolder { ConstraintLayout root; TextView appName; TextView appPackageName; diff --git a/app/src/main/res/color/switchbar_text_dark.xml b/app/src/main/res/color/switchbar_text_dark.xml deleted file mode 100644 index d77c6d1d..00000000 --- a/app/src/main/res/color/switchbar_text_dark.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - diff --git a/app/src/main/res/color/switchbar_text_light.xml b/app/src/main/res/color/switchbar_text_light.xml deleted file mode 100644 index 9d082998..00000000 --- a/app/src/main/res/color/switchbar_text_light.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_outline_add_to_home_screen_24.xml b/app/src/main/res/drawable/ic_outline_add_to_home_screen_24.xml deleted file mode 100644 index 35f8e3dc..00000000 --- a/app/src/main/res/drawable/ic_outline_add_to_home_screen_24.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_outline_science_24.xml b/app/src/main/res/drawable/ic_outline_science_24.xml deleted file mode 100644 index 76d22649..00000000 --- a/app/src/main/res/drawable/ic_outline_science_24.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml deleted file mode 100644 index 4ab2c565..00000000 --- a/app/src/main/res/drawable/ic_refresh.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_round_send_24.xml b/app/src/main/res/drawable/ic_round_send_24.xml deleted file mode 100644 index fe861f36..00000000 --- a/app/src/main/res/drawable/ic_round_send_24.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - diff --git a/app/src/main/res/menu/menu_repo_item.xml b/app/src/main/res/menu/menu_repo_item.xml index fb0379dc..32e81b8c 100644 --- a/app/src/main/res/menu/menu_repo_item.xml +++ b/app/src/main/res/menu/menu_repo_item.xml @@ -18,11 +18,10 @@ ~ Copyright (C) 2021 LSPosed Contributors --> - + - \ No newline at end of file + android:showAsAction="ifRoom" /> + diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 5ba484c5..6c449922 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -18,14 +18,8 @@ --> - @color/material_grey_700 - @color/material_grey_600 - @color/abc_primary_text_material_light - @color/abc_secondary_text_material_light - @color/abc_primary_text_material_dark - @color/abc_secondary_text_material_dark #F06292 #E1F5FE diff --git a/app/src/main/res/values-v28/dimens.xml b/app/src/main/res/values-v28/dimens.xml index 429e5b8a..ecf7876d 100644 --- a/app/src/main/res/values-v28/dimens.xml +++ b/app/src/main/res/values-v28/dimens.xml @@ -19,5 +19,4 @@ 12dp - 8dp diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 08ef88ae..bb4fe756 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -19,14 +19,9 @@ --> - @color/material_grey_500 - @color/material_grey_300 - @color/abc_primary_text_material_dark - @color/abc_secondary_text_material_dark @color/abc_primary_text_material_light - @color/abc_secondary_text_material_light #FFFFFF #F48FB1 diff --git a/app/src/main/res/values/colors_google.xml b/app/src/main/res/values/colors_google.xml deleted file mode 100644 index 964f6bb5..00000000 --- a/app/src/main/res/values/colors_google.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - #1A73E8 - #8AB4F8 - diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 3cb0e458..25297efd 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -23,5 +23,4 @@ 48dp 6dp - 2dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a4f2c2c8..7bdaec9f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -19,7 +19,6 @@ - Info Overview Modules @@ -32,7 +31,6 @@ About Report issue Repository - Loading… All modules up to date Published at %s Updated at %s @@ -57,7 +55,6 @@ Modules may invalidate occasionally.]]> Need to update Please install the latest version of LSPosed - LSPosed is not currently installed or active. API version Framework version Manager version @@ -99,7 +96,6 @@ Scroll to top Loading… Scroll to bottom - Cannot read log: \n Reload Failed to clear the log Word Wrap @@ -222,7 +218,6 @@ Collaborators Assets Open in browser - Refresh Show older versions No more release Failed to load module repo: %s diff --git a/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java b/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java index f9ca2fd5..d80a868d 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java @@ -227,7 +227,7 @@ public class ConfigManager { var pkg = new PackageParser().parsePackage(apkFile, 0, false); module.applicationInfo = pkg.applicationInfo; } catch (PackageParser.PackageParserException e) { - Log.w(TAG, "failed to parse parse " + module.apkPath, e); + Log.w(TAG, "failed to parse " + module.apkPath, e); } module.service = new LSPInjectedModuleService(module); modules.add(module);