From d11c0f78a8dc3b0fd5acbccdbdb1cefac3c587c4 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Sat, 22 Jan 2022 22:40:30 +0800 Subject: [PATCH] More MD3 designs (#1548) Co-authored-by: RikkaW --- app/build.gradle.kts | 5 +- .../manager/ui/activity/MainActivity.java | 143 ++++- .../ui/activity/base/BaseActivity.java | 12 +- .../manager/ui/dialog/FlashDialogBuilder.java | 6 +- .../manager/ui/dialog/InfoDialogBuilder.java | 111 ---- .../ui/dialog/WarningDialogBuilder.java | 76 --- .../manager/ui/fragment/BaseFragment.java | 4 + .../manager/ui/fragment/HomeFragment.java | 270 ++++----- .../manager/ui/fragment/LogsFragment.java | 10 +- .../manager/ui/fragment/ModulesFragment.java | 1 + .../manager/ui/fragment/RepoFragment.java | 1 + .../manager/ui/fragment/SettingsFragment.java | 3 +- .../org/lsposed/manager/util/ThemeUtil.java | 6 +- .../res/drawable-nodpi/shortcut_ic_repo.xml | 4 +- .../res/drawable/ic_assignment_checkable.xml | 5 + .../drawable/ic_baseline_assignment_24.xml | 11 + .../res/drawable/ic_baseline_extension_24.xml | 10 + .../res/drawable/ic_baseline_get_app_24.xml | 10 + .../main/res/drawable/ic_baseline_home_24.xml | 10 + .../res/drawable/ic_baseline_settings_24.xml | 10 + app/src/main/res/drawable/ic_extension.xml | 29 - .../res/drawable/ic_extension_checkable.xml | 5 + app/src/main/res/drawable/ic_get_app.xml | 29 - .../res/drawable/ic_get_app_checkable.xml | 5 + .../main/res/drawable/ic_home_checkable.xml | 5 + .../res/drawable/ic_outline_assignment_24.xml | 11 + .../res/drawable/ic_outline_extension_24.xml | 10 + .../res/drawable/ic_outline_get_app_24.xml | 10 + .../main/res/drawable/ic_outline_home_24.xml | 10 + .../res/drawable/ic_outline_settings_24.xml | 10 + app/src/main/res/drawable/ic_settings.xml | 30 - .../res/drawable/ic_settings_checkable.xml | 5 + .../main/res/drawable/shortcut_ic_modules.xml | 2 +- .../main/res/layout-sw600dp/activity_main.xml | 38 +- .../main/res/layout/activity_crash_report.xml | 4 +- app/src/main/res/layout/activity_main.xml | 79 ++- app/src/main/res/layout/dialog_about.xml | 6 +- app/src/main/res/layout/dialog_info.xml | 122 ---- app/src/main/res/layout/dialog_item.xml | 4 +- app/src/main/res/layout/fragment_app_list.xml | 20 +- .../res/layout/fragment_compile_dialog.xml | 2 +- app/src/main/res/layout/fragment_home.xml | 395 +++++++------ app/src/main/res/layout/fragment_pager.xml | 10 +- app/src/main/res/layout/fragment_repo.xml | 8 +- app/src/main/res/layout/fragment_settings.xml | 8 +- app/src/main/res/layout/item_log_textview.xml | 1 + app/src/main/res/layout/item_module.xml | 6 +- app/src/main/res/layout/item_onlinemodule.xml | 4 +- .../main/res/layout/item_repo_loadmore.xml | 2 +- app/src/main/res/layout/item_repo_readme.xml | 10 +- .../res/layout/item_repo_recyclerview.xml | 2 +- app/src/main/res/layout/item_repo_release.xml | 2 +- .../layout/item_repo_title_description.xml | 2 +- .../res/layout/preference_recyclerview.xml | 2 +- ...alog_warning.xml => scrollable_dialog.xml} | 2 +- .../res/layout/swiperefresh_recyclerview.xml | 2 +- .../main/res/menu-sw600dp/navigation_menu.xml | 48 ++ .../src/main/res/menu/menu_home.xml | 18 +- app/src/main/res/menu/navigation_menu.xml | 49 ++ app/src/main/res/navigation/nav_graph.xml | 67 +-- app/src/main/res/values-night/colors.xml | 2 - .../main/res/values-night/colors_custom.xml | 532 ++++++++++++++++- app/src/main/res/values-sw600dp/integer.xml | 5 + app/src/main/res/values/arrays.xml | 4 - app/src/main/res/values/colors.xml | 4 - app/src/main/res/values/colors_custom.xml | 552 +++++++++++++++++- app/src/main/res/values/integer.xml | 6 + app/src/main/res/values/strings.xml | 4 +- .../res/values/strings_untranslatable.xml | 1 + app/src/main/res/values/themes.xml | 21 - app/src/main/res/values/themes_custom.xml | 521 ++++++++++++++++- app/src/main/res/values/themes_override.xml | 11 +- app/src/main/res/xml-v29/prefs.xml | 2 +- app/src/main/res/xml/prefs.xml | 2 +- .../lspd/service/LSPManagerService.java | 3 +- daemon/src/main/res/values/colors.xml | 24 - 76 files changed, 2396 insertions(+), 1080 deletions(-) delete mode 100644 app/src/main/java/org/lsposed/manager/ui/dialog/InfoDialogBuilder.java delete mode 100644 app/src/main/java/org/lsposed/manager/ui/dialog/WarningDialogBuilder.java create mode 100644 app/src/main/res/drawable/ic_assignment_checkable.xml create mode 100644 app/src/main/res/drawable/ic_baseline_assignment_24.xml create mode 100644 app/src/main/res/drawable/ic_baseline_extension_24.xml create mode 100644 app/src/main/res/drawable/ic_baseline_get_app_24.xml create mode 100644 app/src/main/res/drawable/ic_baseline_home_24.xml create mode 100644 app/src/main/res/drawable/ic_baseline_settings_24.xml delete mode 100644 app/src/main/res/drawable/ic_extension.xml create mode 100644 app/src/main/res/drawable/ic_extension_checkable.xml delete mode 100644 app/src/main/res/drawable/ic_get_app.xml create mode 100644 app/src/main/res/drawable/ic_get_app_checkable.xml create mode 100644 app/src/main/res/drawable/ic_home_checkable.xml create mode 100644 app/src/main/res/drawable/ic_outline_assignment_24.xml create mode 100644 app/src/main/res/drawable/ic_outline_extension_24.xml create mode 100644 app/src/main/res/drawable/ic_outline_get_app_24.xml create mode 100644 app/src/main/res/drawable/ic_outline_home_24.xml create mode 100644 app/src/main/res/drawable/ic_outline_settings_24.xml delete mode 100644 app/src/main/res/drawable/ic_settings.xml create mode 100644 app/src/main/res/drawable/ic_settings_checkable.xml delete mode 100644 app/src/main/res/layout/dialog_info.xml rename app/src/main/res/layout/{dialog_warning.xml => scrollable_dialog.xml} (96%) create mode 100644 app/src/main/res/menu-sw600dp/navigation_menu.xml rename daemon/src/main/res/values-night/colors.xml => app/src/main/res/menu/menu_home.xml (57%) create mode 100644 app/src/main/res/menu/navigation_menu.xml create mode 100644 app/src/main/res/values-sw600dp/integer.xml create mode 100644 app/src/main/res/values/integer.xml delete mode 100644 daemon/src/main/res/values/colors.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 21bf51e7..ed5a116d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -167,17 +167,16 @@ dependencies { annotationProcessor("com.github.bumptech.glide:compiler:$glideVersion") implementation("androidx.activity:activity:1.4.0") implementation("androidx.browser:browser:1.4.0") - implementation("androidx.constraintlayout:constraintlayout:2.1.2") + implementation("androidx.constraintlayout:constraintlayout:2.1.3") implementation("androidx.core:core:1.7.0") implementation("androidx.fragment:fragment:1.4.0") implementation("androidx.navigation:navigation-fragment:$navVersion") implementation("androidx.navigation:navigation-ui:$navVersion") implementation("androidx.preference:preference:1.1.1") implementation("androidx.recyclerview:recyclerview:1.2.1") - implementation("androidx.slidingpanelayout:slidingpanelayout:1.2.0-rc01") implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01") implementation("com.github.bumptech.glide:glide:$glideVersion") - implementation("com.google.android.material:material:1.6.0-alpha01") + implementation("com.google.android.material:material:1.6.0-alpha02") implementation("com.google.code.gson:gson:2.8.9") implementation(platform("com.squareup.okhttp3:okhttp-bom:4.9.3")) implementation("com.squareup.okhttp3:okhttp") 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 0444204a..aec9b286 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 @@ -26,24 +26,37 @@ import android.os.Bundle; import android.text.TextUtils; import android.view.KeyEvent; import android.view.MotionEvent; -import android.view.View; import androidx.annotation.NonNull; import androidx.core.os.BuildCompat; import androidx.navigation.NavController; import androidx.navigation.Navigation; import androidx.navigation.fragment.NavHostFragment; +import androidx.navigation.ui.NavigationUI; + +import com.google.android.material.navigation.NavigationBarView; import org.lsposed.manager.App; import org.lsposed.manager.ConfigManager; import org.lsposed.manager.NavGraphDirections; import org.lsposed.manager.R; import org.lsposed.manager.databinding.ActivityMainBinding; +import org.lsposed.manager.repo.RepoLoader; import org.lsposed.manager.ui.activity.base.BaseActivity; +import org.lsposed.manager.util.ModuleUtil; +import org.lsposed.manager.util.UpdateUtil; -public class MainActivity extends BaseActivity { +import java.util.HashSet; + +import rikka.core.util.ResourceUtils; + +public class MainActivity extends BaseActivity implements RepoLoader.RepoListener, ModuleUtil.ModuleListener { private static final String KEY_PREFIX = MainActivity.class.getName() + '.'; private static final String EXTRA_SAVED_INSTANCE_STATE = KEY_PREFIX + "SAVED_INSTANCE_STATE"; + + private static final RepoLoader repoLoader = RepoLoader.getInstance(); + private static final ModuleUtil moduleUtil = ModuleUtil.getInstance(); + private boolean restarting; private ActivityMainBinding binding; @@ -65,9 +78,25 @@ public class MainActivity extends BaseActivity { } super.onCreate(savedInstanceState); + binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); + repoLoader.addListener(this); + moduleUtil.addListener(this); + + onModulesReloaded(); + + NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment); + if (navHostFragment == null) { + return; + } + + NavController navController = navHostFragment.getNavController(); + var nav = (NavigationBarView) binding.nav; + NavigationUI.setupWithNavController(nav, navController); + nav.findViewById(R.id.modules_fragment); + handleIntent(getIntent()); } @@ -86,29 +115,20 @@ public class MainActivity extends BaseActivity { return; } NavController navController = navHostFragment.getNavController(); - if (binding.homeFragment != null) { - navController.addOnDestinationChangedListener((controller, destination, arguments) -> { - if (destination.getId() == R.id.main_fragment) { - binding.navHostFragment.setVisibility(View.GONE); - } else { - binding.navHostFragment.setVisibility(View.VISIBLE); - } - }); - } if (intent.getAction() != null && intent.getAction().equals("android.intent.action.APPLICATION_PREFERENCES")) { - navController.navigate(R.id.action_settings_fragment); + navController.navigate(R.id.settings_fragment); } else if (ConfigManager.isBinderAlive()) { if (!TextUtils.isEmpty(intent.getDataString())) { switch (intent.getDataString()) { case "modules": - navController.navigate(R.id.action_modules_fragment); + navController.navigate(R.id.modules_fragment); break; case "logs": - navController.navigate(R.id.action_logs_fragment); + navController.navigate(R.id.logs_fragment); break; case "repo": if (ConfigManager.isMagiskInstalled()) { - navController.navigate(R.id.action_repo_fragment); + navController.navigate(R.id.repo_fragment); } break; default: @@ -174,4 +194,97 @@ public class MainActivity extends BaseActivity { public boolean dispatchGenericMotionEvent(@NonNull MotionEvent event) { return restarting || super.dispatchGenericMotionEvent(event); } + + + @Override + public void onRepoLoaded() { + final int[] count = new int[]{0}; + HashSet processedModules = new HashSet<>(); + var modules = moduleUtil.getModules(); + if (modules == null) return; + modules.forEach((k, v) -> { + if (!processedModules.contains(k.first)) { + var ver = repoLoader.getModuleLatestVersion(k.first); + if (ver != null && ver.upgradable(v.versionCode, v.versionName)) { + ++count[0]; + } + processedModules.add(k.first); + } + } + ); + runOnUiThread(() -> { + if (count[0] > 0 && binding != null) { + var nav = (NavigationBarView) binding.nav; + var badge = nav.getOrCreateBadge(R.id.repo_fragment); + badge.setVisible(true); + badge.setNumber(count[0]); + } else { + onThrowable(null); + } + }); + } + + @Override + public void onThrowable(Throwable t) { + runOnUiThread(() -> { + if (binding != null) { + var nav = (NavigationBarView) binding.nav; + var badge = nav.getOrCreateBadge(R.id.repo_fragment); + badge.setVisible(false); + } + }); + } + + @Override + public void onModulesReloaded() { + onRepoLoaded(); + setModulesSummary(moduleUtil.getEnabledModulesCount()); + } + + @Override + public void onResume() { + super.onResume(); + if (ConfigManager.isBinderAlive()) { + setModulesSummary(moduleUtil.getEnabledModulesCount()); + } else setModulesSummary(0); + if (binding != null) { + var nav = (NavigationBarView) binding.nav; + if (UpdateUtil.needUpdate()) { + var badge = nav.getOrCreateBadge(R.id.main_fragment); + badge.setVisible(true); + } + + if (!ConfigManager.isBinderAlive()) { + nav.getMenu().removeItem(R.id.logs_fragment); + nav.getMenu().removeItem(R.id.modules_fragment); + if (!ConfigManager.isMagiskInstalled()) { + nav.getMenu().removeItem(R.id.repo_fragment); + } + } + } + } + + private void setModulesSummary(int moduleCount) { + runOnUiThread(() -> { + if (binding != null) { + var nav = (NavigationBarView) binding.nav; + var badge = nav.getOrCreateBadge(R.id.modules_fragment); + badge.setBackgroundColor(ResourceUtils.resolveColor(getTheme(), com.google.android.material.R.attr.colorPrimary)); + badge.setBadgeTextColor(ResourceUtils.resolveColor(getTheme(), com.google.android.material.R.attr.colorOnPrimary)); + if (moduleCount > 0) { + badge.setVisible(true); + badge.setNumber(moduleCount); + } else { + badge.setVisible(false); + } + } + }); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + repoLoader.removeListener(this); + moduleUtil.removeListener(this); + } } diff --git a/app/src/main/java/org/lsposed/manager/ui/activity/base/BaseActivity.java b/app/src/main/java/org/lsposed/manager/ui/activity/base/BaseActivity.java index dd1de274..65dcf734 100644 --- a/app/src/main/java/org/lsposed/manager/ui/activity/base/BaseActivity.java +++ b/app/src/main/java/org/lsposed/manager/ui/activity/base/BaseActivity.java @@ -43,7 +43,6 @@ import org.lsposed.manager.util.NavUtil; import org.lsposed.manager.util.ThemeUtil; import org.lsposed.manager.util.UpdateUtil; -import rikka.core.util.ResourceUtils; import rikka.material.app.MaterialActivity; public class BaseActivity extends MaterialActivity { @@ -113,15 +112,6 @@ public class BaseActivity extends MaterialActivity { super.onApplyTranslucentSystemBars(); Window window = getWindow(); window.setStatusBarColor(Color.TRANSPARENT); - - window.getDecorView().post(() -> { - var rootWindowInsets = window.getDecorView().getRootWindowInsets(); - if (rootWindowInsets != null && - rootWindowInsets.getSystemWindowInsetBottom() >= Resources.getSystem().getDisplayMetrics().density * 40) { - window.setNavigationBarColor(ResourceUtils.resolveColor(getTheme(), android.R.attr.navigationBarColor) & 0x00ffffff | -0x20000000); - } else { - window.setNavigationBarColor(Color.TRANSPARENT); - } - }); + window.setNavigationBarColor(Color.TRANSPARENT); } } diff --git a/app/src/main/java/org/lsposed/manager/ui/dialog/FlashDialogBuilder.java b/app/src/main/java/org/lsposed/manager/ui/dialog/FlashDialogBuilder.java index d66b3a1b..807853f7 100644 --- a/app/src/main/java/org/lsposed/manager/ui/dialog/FlashDialogBuilder.java +++ b/app/src/main/java/org/lsposed/manager/ui/dialog/FlashDialogBuilder.java @@ -22,7 +22,7 @@ import org.lsposed.manager.App; import org.lsposed.manager.ConfigManager; import org.lsposed.manager.R; import org.lsposed.manager.databinding.DialogTitleBinding; -import org.lsposed.manager.databinding.DialogWarningBinding; +import org.lsposed.manager.databinding.ScrollableDialogBinding; import java.io.BufferedReader; import java.io.IOException; @@ -52,8 +52,8 @@ public class FlashDialogBuilder extends BlurBehindDialogBuilder { textView.setMovementMethod(LinkMovementMethod.getInstance()); textView.setTextIsSelectable(true); - DialogWarningBinding binding = DialogWarningBinding.inflate(inflater, null, false); - binding.container.addView(textView); + var binding = ScrollableDialogBinding.inflate(inflater, null, false); + binding.dialogContainer.addView(textView); rootView = binding.getRoot(); setView(rootView); title.setOnClickListener(v -> rootView.smoothScrollTo(0, 0)); diff --git a/app/src/main/java/org/lsposed/manager/ui/dialog/InfoDialogBuilder.java b/app/src/main/java/org/lsposed/manager/ui/dialog/InfoDialogBuilder.java deleted file mode 100644 index 7b5e6673..00000000 --- a/app/src/main/java/org/lsposed/manager/ui/dialog/InfoDialogBuilder.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * This file is part of LSPosed. - * - * LSPosed is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LSPosed is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with LSPosed. If not, see . - * - * Copyright (C) 2021 LSPosed Contributors - */ - -package org.lsposed.manager.ui.dialog; - -import android.app.Dialog; -import android.os.Build; -import android.os.Bundle; -import android.view.LayoutInflater; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; - -import org.lsposed.manager.BuildConfig; -import org.lsposed.manager.ConfigManager; -import org.lsposed.manager.R; -import org.lsposed.manager.databinding.DialogInfoBinding; - -import java.util.Locale; - -import rikka.core.util.ClipboardUtils; - -public class InfoDialogBuilder extends DialogFragment { - - @NonNull - @Override - public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - var activity = requireActivity(); - var builder = new BlurBehindDialogBuilder(activity).setTitle(R.string.info); - DialogInfoBinding binding = DialogInfoBinding.inflate(LayoutInflater.from(activity), null, false); - - if (ConfigManager.isBinderAlive()) { - binding.apiVersion.setText(String.valueOf(ConfigManager.getXposedApiVersion())); - binding.api.setText(ConfigManager.getApi()); - binding.frameworkVersion.setText(String.format(Locale.ROOT, "%s (%s)", ConfigManager.getXposedVersionName(), ConfigManager.getXposedVersionCode())); - } else { - binding.apiVersion.setText(R.string.not_installed); - binding.api.setText(R.string.not_installed); - binding.frameworkVersion.setText(R.string.not_installed); - } - binding.managerVersion.setText(String.format(Locale.ROOT, "%s (%s)", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE)); - - if (Build.VERSION.PREVIEW_SDK_INT != 0) { - binding.systemVersion.setText(String.format(Locale.ROOT, "%1$s Preview (API %2$d)", Build.VERSION.CODENAME, Build.VERSION.SDK_INT)); - } else { - binding.systemVersion.setText(String.format(Locale.ROOT, "%1$s (API %2$d)", Build.VERSION.RELEASE, Build.VERSION.SDK_INT)); - } - - binding.device.setText(getDevice()); - binding.systemAbi.setText(Build.SUPPORTED_ABIS[0]); - - builder.setView(binding.getRoot()); - - builder.setPositiveButton(android.R.string.ok, null); - String info = activity.getString(R.string.info_api_version) + - "\n" + - binding.apiVersion.getText() + - "\n\n" + - activity.getString(R.string.info_api) + - "\n" + - binding.api.getText() + - "\n\n" + - activity.getString(R.string.info_framework_version) + - "\n" + - binding.frameworkVersion.getText() + - "\n\n" + - activity.getString(R.string.info_manager_version) + - "\n" + - binding.managerVersion.getText() + - "\n\n" + - activity.getString(R.string.info_system_version) + - "\n" + - binding.systemVersion.getText() + - "\n\n" + - activity.getString(R.string.info_device) + - "\n" + - binding.device.getText() + - "\n\n" + - activity.getString(R.string.info_system_abi) + - "\n" + - binding.systemAbi.getText(); - builder.setNeutralButton(android.R.string.copy, (dialog, which) -> ClipboardUtils.put(activity, info)); - return builder.create(); - } - - private String getDevice() { - String manufacturer = Character.toUpperCase(Build.MANUFACTURER.charAt(0)) + Build.MANUFACTURER.substring(1); - if (!Build.BRAND.equals(Build.MANUFACTURER)) { - manufacturer += " " + Character.toUpperCase(Build.BRAND.charAt(0)) + Build.BRAND.substring(1); - } - manufacturer += " " + Build.MODEL + " "; - return manufacturer; - } -} diff --git a/app/src/main/java/org/lsposed/manager/ui/dialog/WarningDialogBuilder.java b/app/src/main/java/org/lsposed/manager/ui/dialog/WarningDialogBuilder.java deleted file mode 100644 index 71daadd1..00000000 --- a/app/src/main/java/org/lsposed/manager/ui/dialog/WarningDialogBuilder.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This file is part of LSPosed. - * - * LSPosed is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LSPosed is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with LSPosed. If not, see . - * - * Copyright (C) 2021 LSPosed Contributors - */ - -package org.lsposed.manager.ui.dialog; - -import android.app.Dialog; -import android.os.Bundle; -import android.text.method.LinkMovementMethod; -import android.view.LayoutInflater; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.text.HtmlCompat; -import androidx.fragment.app.DialogFragment; - -import org.lsposed.manager.ConfigManager; -import org.lsposed.manager.R; -import org.lsposed.manager.databinding.DialogItemBinding; -import org.lsposed.manager.databinding.DialogWarningBinding; -import org.lsposed.manager.util.chrome.LinkTransformationMethod; - -public class WarningDialogBuilder extends DialogFragment { - @NonNull - @Override - public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - var activity = requireActivity(); - var builder = new BlurBehindDialogBuilder(activity). - setTitle(R.string.partial_activated); - - LayoutInflater inflater = LayoutInflater.from(activity); - DialogWarningBinding binding = DialogWarningBinding.inflate(inflater, null, false); - - if (!ConfigManager.isSepolicyLoaded()) { - DialogItemBinding item = DialogItemBinding.inflate(inflater, binding.container, true); - item.title.setText(R.string.selinux_policy_not_loaded_summary); - item.value.setText(HtmlCompat.fromHtml(activity.getString(R.string.selinux_policy_not_loaded), HtmlCompat.FROM_HTML_MODE_LEGACY)); - item.value.setMovementMethod(LinkMovementMethod.getInstance()); - item.value.setTransformationMethod(new LinkTransformationMethod(activity)); - } - if (!ConfigManager.systemServerRequested()) { - DialogItemBinding item = DialogItemBinding.inflate(inflater, binding.container, true); - item.title.setText(R.string.system_inject_fail_summary); - item.value.setText(HtmlCompat.fromHtml(activity.getString(R.string.system_inject_fail), HtmlCompat.FROM_HTML_MODE_LEGACY)); - item.value.setMovementMethod(LinkMovementMethod.getInstance()); - item.value.setTransformationMethod(new LinkTransformationMethod(activity)); - } - if (!ConfigManager.dex2oatFlagsLoaded()) { - DialogItemBinding item = DialogItemBinding.inflate(inflater, binding.container, true); - item.title.setText(R.string.system_prop_incorrect_summary); - item.value.setText(HtmlCompat.fromHtml(activity.getString(R.string.system_prop_incorrect), HtmlCompat.FROM_HTML_MODE_LEGACY)); - item.value.setMovementMethod(LinkMovementMethod.getInstance()); - item.value.setTransformationMethod(new LinkTransformationMethod(activity)); - } - - builder.setView(binding.getRoot()); - builder.setPositiveButton(android.R.string.ok, null); - builder.setNeutralButton(R.string.info, (dialog, which) -> new InfoDialogBuilder().show(getParentFragmentManager(), "info")); - return builder.create(); - } -} 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 17539d9f..15fb24bf 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 @@ -30,6 +30,8 @@ import androidx.fragment.app.Fragment; import androidx.navigation.NavController; 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; import org.lsposed.manager.App; @@ -110,6 +112,8 @@ public class BaseFragment extends Fragment { 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); + if (container.findViewById(R.id.fab) instanceof FloatingActionButton) snackbar.setAnchorView(R.id.fab); if (actionStr != null && action != null) snackbar.setAction(actionStr, action); snackbar.show(); return; diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java index 827f022c..b18ac8a3 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/HomeFragment.java @@ -25,6 +25,7 @@ import android.os.Build; import android.os.Bundle; import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; +import android.view.Menu; import android.view.View; import android.view.ViewGroup; @@ -33,142 +34,180 @@ import androidx.annotation.Nullable; import androidx.core.text.HtmlCompat; import androidx.fragment.app.DialogFragment; -import com.google.android.material.color.MaterialColors; - import org.lsposed.manager.BuildConfig; import org.lsposed.manager.ConfigManager; import org.lsposed.manager.R; import org.lsposed.manager.databinding.DialogAboutBinding; import org.lsposed.manager.databinding.FragmentHomeBinding; -import org.lsposed.manager.repo.RepoLoader; import org.lsposed.manager.ui.dialog.BlurBehindDialogBuilder; import org.lsposed.manager.ui.dialog.FlashDialogBuilder; -import org.lsposed.manager.ui.dialog.InfoDialogBuilder; import org.lsposed.manager.ui.dialog.ShortcutDialog; -import org.lsposed.manager.ui.dialog.WarningDialogBuilder; -import org.lsposed.manager.util.ModuleUtil; import org.lsposed.manager.util.NavUtil; import org.lsposed.manager.util.UpdateUtil; import org.lsposed.manager.util.chrome.LinkTransformationMethod; -import java.util.HashSet; import java.util.Locale; -import rikka.core.util.ResourceUtils; +import rikka.core.util.ClipboardUtils; -public class HomeFragment extends BaseFragment implements RepoLoader.RepoListener, ModuleUtil.ModuleListener { +public class HomeFragment extends BaseFragment { private FragmentHomeBinding binding; - private static final RepoLoader repoLoader = RepoLoader.getInstance(); - private static final ModuleUtil moduleUtil = ModuleUtil.getInstance(); - @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ShortcutDialog.showIfNeed(getChildFragmentManager()); } + @Override + public void onPrepareOptionsMenu(Menu menu) { + menu.findItem(R.id.menu_about).setOnMenuItemClickListener(v -> { + showAbout(); + return true; + }); + menu.findItem(R.id.menu_issue).setOnMenuItemClickListener(v -> { + NavUtil.startURL(requireActivity(), "https://github.com/LSPosed/LSPosed/issues/new/choose"); + return true; + }); + } + @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = FragmentHomeBinding.inflate(inflater, container, false); - - setupToolbar(binding.toolbar, null, R.string.app_name); + setupToolbar(binding.toolbar, binding.clickView, R.string.app_name, R.menu.menu_home); binding.toolbar.setNavigationIcon(null); binding.toolbar.setOnClickListener(v -> showAbout()); + binding.clickView.setOnClickListener(v -> showAbout()); binding.appBar.setLiftable(true); binding.nestedScrollView.getBorderViewDelegate().setBorderVisibilityChangedListener((top, oldTop, bottom, oldBottom) -> binding.appBar.setLifted(!top)); - Activity activity = requireActivity(); - binding.status.setOnClickListener(v -> { - if (ConfigManager.isBinderAlive() && !UpdateUtil.needUpdate()) { - if (!ConfigManager.isSepolicyLoaded() || !ConfigManager.systemServerRequested() || !ConfigManager.dex2oatFlagsLoaded()) { - new WarningDialogBuilder().show(getChildFragmentManager(), "warning"); - } else { - new InfoDialogBuilder().show(getChildFragmentManager(), "info"); - } - } else { - if (UpdateUtil.canInstall()) { - new FlashDialogBuilder(activity, null).show(); - return; - } - NavUtil.startURL(activity, getString(R.string.about_source)); - } - }); - binding.status.setOnLongClickListener(v -> { - if (UpdateUtil.canInstall()) { - new FlashDialogBuilder(activity, null).show(); - return true; - } - return false; - }); - binding.modules.setOnClickListener(new StartFragmentListener(R.id.action_modules_fragment, true)); - binding.download.setOnClickListener(new StartFragmentListener(R.id.action_repo_fragment, false)); - binding.logs.setOnClickListener(new StartFragmentListener(R.id.action_logs_fragment, true)); - binding.settings.setOnClickListener(new StartFragmentListener(R.id.action_settings_fragment, false)); - binding.issue.setOnClickListener(view -> NavUtil.startURL(activity, "https://github.com/LSPosed/LSPosed/issues/new/choose")); - updateStates(requireActivity(), ConfigManager.isBinderAlive(), UpdateUtil.needUpdate()); - repoLoader.addListener(this); - moduleUtil.addListener(this); - onModulesReloaded(); return binding.getRoot(); } private void updateStates(Activity activity, boolean binderAlive, boolean needUpdate) { - int cardBackgroundColor; if (binderAlive) { - StringBuilder sb = new StringBuilder(String.format(Locale.ROOT, "%s (%d) - %s", - ConfigManager.getXposedVersionName(), ConfigManager.getXposedVersionCode(), ConfigManager.getApi())); if (needUpdate) { - cardBackgroundColor = ResourceUtils.resolveColor(activity.getTheme(), R.attr.colorInstall); - binding.statusTitle.setText(R.string.need_update); + binding.updateTitle.setText(R.string.need_update); + binding.updateSummary.setText(getString(R.string.please_update_summary)); binding.statusIcon.setImageResource(R.drawable.ic_round_update_24); - sb.append("\n\n"); - sb.append(getString(R.string.please_update_summary)); - } else if (!ConfigManager.isSepolicyLoaded() || !ConfigManager.systemServerRequested() || !ConfigManager.dex2oatFlagsLoaded()) { - cardBackgroundColor = ResourceUtils.resolveColor(activity.getTheme(), rikka.material.R.attr.colorWarning); + binding.updateBtn.setOnClickListener(v -> { + if (UpdateUtil.canInstall()) { + new FlashDialogBuilder(activity, null).show(); + } else { + NavUtil.startURL(activity, getString(R.string.about_source)); + } + }); + binding.updateCard.setVisibility(View.VISIBLE); + } else { + binding.updateCard.setVisibility(View.GONE); + } + if (!ConfigManager.isSepolicyLoaded() || !ConfigManager.systemServerRequested() || !ConfigManager.dex2oatFlagsLoaded()) { binding.statusTitle.setText(R.string.partial_activated); binding.statusIcon.setImageResource(R.drawable.ic_round_warning_24); - sb.append("\n"); + binding.warningCard.setVisibility(View.VISIBLE); if (!ConfigManager.isSepolicyLoaded()) { - sb.append("\n"); - sb.append(getString(R.string.selinux_policy_not_loaded_summary)); + binding.warningTitle.setText(R.string.selinux_policy_not_loaded_summary); + binding.warningSummary.setText(HtmlCompat.fromHtml(getString(R.string.selinux_policy_not_loaded), HtmlCompat.FROM_HTML_MODE_LEGACY)); } if (!ConfigManager.systemServerRequested()) { - sb.append("\n"); - sb.append(getString(R.string.system_inject_fail_summary)); + binding.warningTitle.setText(R.string.system_inject_fail_summary); + binding.warningSummary.setText(HtmlCompat.fromHtml(getString(R.string.system_inject_fail), HtmlCompat.FROM_HTML_MODE_LEGACY)); } if (!ConfigManager.dex2oatFlagsLoaded()) { - sb.append("\n"); - sb.append(getString(R.string.system_prop_incorrect_summary)); + binding.warningTitle.setText(R.string.system_prop_incorrect_summary); + binding.warningSummary.setText(HtmlCompat.fromHtml(getString(R.string.system_prop_incorrect), HtmlCompat.FROM_HTML_MODE_LEGACY)); } } else { - cardBackgroundColor = ResourceUtils.resolveColor(activity.getTheme(), R.attr.colorNormal); + binding.warningCard.setVisibility(View.GONE); binding.statusTitle.setText(R.string.activated); binding.statusIcon.setImageResource(R.drawable.ic_round_check_circle_24); } - binding.statusSummary.setText(sb.toString()); + binding.statusSummary.setText(String.format(Locale.ROOT, "%s (%d) - %s", + ConfigManager.getXposedVersionName(), ConfigManager.getXposedVersionCode(), ConfigManager.getApi())); } else { - cardBackgroundColor = ResourceUtils.resolveColor(activity.getTheme(), R.attr.colorInstall); boolean isMagiskInstalled = ConfigManager.isMagiskInstalled(); - binding.statusTitle.setText(isMagiskInstalled ? R.string.install : R.string.not_installed); - binding.statusSummary.setText(isMagiskInstalled ? R.string.install_summary : R.string.not_install_summary); - if (!isMagiskInstalled) { - binding.status.setOnClickListener(null); - binding.download.setVisibility(View.GONE); + if (isMagiskInstalled) { + binding.updateTitle.setText(R.string.install); + binding.updateSummary.setText(R.string.install_summary); + binding.statusIcon.setImageResource(R.drawable.ic_round_error_outline_24); + binding.updateBtn.setOnClickListener(v -> { + if (UpdateUtil.canInstall()) { + new FlashDialogBuilder(activity, null).show(); + } else { + NavUtil.startURL(activity, getString(R.string.install_url)); + } + }); + binding.updateCard.setVisibility(View.VISIBLE); + } else { + binding.updateCard.setVisibility(View.GONE); } - binding.statusIcon.setImageResource(R.drawable.ic_round_error_outline_24); - showHint(R.string.lsposed_not_active, false); + binding.warningCard.setVisibility(View.GONE); + binding.statusTitle.setText(R.string.not_installed); + binding.statusSummary.setText(R.string.not_install_summary); } - cardBackgroundColor = MaterialColors.harmonizeWithPrimary(activity, cardBackgroundColor); - binding.status.setCardBackgroundColor(cardBackgroundColor); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - binding.status.setOutlineSpotShadowColor(cardBackgroundColor); - binding.status.setOutlineAmbientShadowColor(cardBackgroundColor); + + if (ConfigManager.isBinderAlive()) { + binding.apiVersion.setText(String.valueOf(ConfigManager.getXposedApiVersion())); + binding.api.setText(ConfigManager.getApi()); + binding.frameworkVersion.setText(String.format(Locale.ROOT, "%s (%s)", ConfigManager.getXposedVersionName(), ConfigManager.getXposedVersionCode())); + } else { + binding.apiVersion.setText(R.string.not_installed); + binding.api.setText(R.string.not_installed); + binding.frameworkVersion.setText(R.string.not_installed); } - binding.about.setOnClickListener(v -> showAbout()); + binding.managerVersion.setText(String.format(Locale.ROOT, "%s (%s)", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE)); + + if (Build.VERSION.PREVIEW_SDK_INT != 0) { + binding.systemVersion.setText(String.format(Locale.ROOT, "%1$s Preview (API %2$d)", Build.VERSION.CODENAME, Build.VERSION.SDK_INT)); + } else { + binding.systemVersion.setText(String.format(Locale.ROOT, "%1$s (API %2$d)", Build.VERSION.RELEASE, Build.VERSION.SDK_INT)); + } + + binding.device.setText(getDevice()); + binding.systemAbi.setText(Build.SUPPORTED_ABIS[0]); + String info = activity.getString(R.string.info_api_version) + + "\n" + + binding.apiVersion.getText() + + "\n\n" + + activity.getString(R.string.info_api) + + "\n" + + binding.api.getText() + + "\n\n" + + activity.getString(R.string.info_framework_version) + + "\n" + + binding.frameworkVersion.getText() + + "\n\n" + + activity.getString(R.string.info_manager_version) + + "\n" + + binding.managerVersion.getText() + + "\n\n" + + activity.getString(R.string.info_system_version) + + "\n" + + binding.systemVersion.getText() + + "\n\n" + + activity.getString(R.string.info_device) + + "\n" + + binding.device.getText() + + "\n\n" + + activity.getString(R.string.info_system_abi) + + "\n" + + binding.systemAbi.getText(); + binding.copyInfo.setOnClickListener(v -> { + ClipboardUtils.put(activity, info); + showHint(R.string.info_copied, false); + }); + } + + private String getDevice() { + String manufacturer = Character.toUpperCase(Build.MANUFACTURER.charAt(0)) + Build.MANUFACTURER.substring(1); + if (!Build.BRAND.equals(Build.MANUFACTURER)) { + manufacturer += " " + Character.toUpperCase(Build.BRAND.charAt(0)) + Build.BRAND.substring(1); + } + manufacturer += " " + Build.MODEL + " "; + return manufacturer; } public static class AboutDialog extends DialogFragment { @@ -193,84 +232,9 @@ public class HomeFragment extends BaseFragment implements RepoLoader.RepoListene new AboutDialog().show(getChildFragmentManager(), "about"); } - @Override - public void onRepoLoaded() { - final int[] count = new int[]{0}; - HashSet processedModules = new HashSet<>(); - var modules = moduleUtil.getModules(); - if (modules == null) return; - modules.forEach((k, v) -> { - if (!processedModules.contains(k.first)) { - var ver = repoLoader.getModuleLatestVersion(k.first); - if (ver != null && ver.upgradable(v.versionCode, v.versionName)) { - ++count[0]; - } - processedModules.add(k.first); - } - } - ); - runOnUiThread(() -> { - if (count[0] > 0 && binding != null) { - binding.downloadSummary.setText(getResources().getQuantityString(R.plurals.module_repo_upgradable, count[0], count[0])); - } else { - onThrowable(null); - } - }); - } - - @Override - public void onThrowable(Throwable t) { - runOnUiThread(() -> { - if (binding != null) - binding.downloadSummary.setText(getResources().getString(R.string.module_repo_up_to_date)); - }); - } - - @Override - public void onModulesReloaded() { - onRepoLoaded(); - setModulesSummary(moduleUtil.getEnabledModulesCount()); - } - - private class StartFragmentListener implements View.OnClickListener { - boolean requireInstalled; - int fragment; - - StartFragmentListener(int fragment, boolean requireInstalled) { - this.fragment = fragment; - this.requireInstalled = requireInstalled; - } - - @Override - public void onClick(View v) { - if (requireInstalled && !ConfigManager.isBinderAlive()) { - showHint(R.string.lsposed_not_active, false); - } else { - getNavController().navigate(fragment); - } - } - } - - @Override - public void onResume() { - super.onResume(); - if (ConfigManager.isBinderAlive()) { - setModulesSummary(moduleUtil.getEnabledModulesCount()); - } else setModulesSummary(0); - } - - private void setModulesSummary(int moduleCount) { - runOnUiThread(() -> { - if (binding != null) - binding.modulesSummary.setText(moduleCount == -1 ? getString(R.string.loading) : getResources().getQuantityString(R.plurals.modules_enabled_count, moduleCount, moduleCount)); - }); - } - @Override public void onDestroyView() { super.onDestroyView(); - repoLoader.removeListener(this); - moduleUtil.removeListener(this); binding = null; } } diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/LogsFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/LogsFragment.java index e8bea637..7d98b3a6 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/LogsFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/LogsFragment.java @@ -106,6 +106,7 @@ public class LogsFragment extends BaseFragment { binding = FragmentPagerBinding.inflate(inflater, container, false); binding.appBar.setLiftable(true); setupToolbar(binding.toolbar, binding.clickView, R.string.Logs, R.menu.menu_logs); + binding.toolbar.setNavigationIcon(null); binding.toolbar.setSubtitle(ConfigManager.isVerboseLogEnabled() ? R.string.enabled_verbose_log : R.string.disabled_verbose_log); adapter = new LogPageAdapter(this); binding.viewPager.setAdapter(adapter); @@ -389,7 +390,14 @@ public class LogsFragment extends BaseFragment { @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { super.onBindViewHolder(holder, position); - holder.item.measure(0, 0); + var view = holder.item; + view.measure(0, 0); + int desiredWidth = view.getMeasuredWidth(); + ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); + layoutParams.width = desiredWidth; + if (binding.recyclerView.getWidth() < desiredWidth) { + binding.recyclerView.requestLayout(); + } } }; } 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 c2fa1268..ac4807b5 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 @@ -147,6 +147,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi binding = FragmentPagerBinding.inflate(inflater, container, false); binding.appBar.setLiftable(true); setupToolbar(binding.toolbar, binding.clickView, R.string.Modules, R.menu.menu_modules); + binding.toolbar.setNavigationIcon(null); pagerAdapter = new PagerAdapter(this); binding.viewPager.setAdapter(pagerAdapter); binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { 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 8f9f04a6..00de6e88 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 @@ -111,6 +111,7 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene binding.appBar.setLiftable(true); binding.recyclerView.getBorderViewDelegate().setBorderVisibilityChangedListener((top, oldTop, bottom, oldBottom) -> binding.appBar.setLifted(!top)); setupToolbar(binding.toolbar, binding.clickView, R.string.module_repo, R.menu.menu_repo); + binding.toolbar.setNavigationIcon(null); adapter = new RepoAdapter(); adapter.setHasStableIds(true); adapter.registerAdapterDataObserver(observer); diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/SettingsFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/SettingsFragment.java index ce5dbda4..008f42f4 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/SettingsFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/SettingsFragment.java @@ -72,9 +72,10 @@ public class SettingsFragment extends BaseFragment { binding = FragmentSettingsBinding.inflate(inflater, container, false); binding.appBar.setLiftable(true); setupToolbar(binding.toolbar, binding.clickView, R.string.Settings); + binding.toolbar.setNavigationIcon(null); if (savedInstanceState == null) { getChildFragmentManager().beginTransaction() - .add(R.id.container, new PreferenceFragment()).commitNow(); + .add(R.id.setting_container, new PreferenceFragment()).commitNow(); } if (ConfigManager.isBinderAlive()) { binding.toolbar.setSubtitle(String.format(Locale.ROOT, "%s (%d) - %s", diff --git a/app/src/main/java/org/lsposed/manager/util/ThemeUtil.java b/app/src/main/java/org/lsposed/manager/util/ThemeUtil.java index d0ae0c97..13460c9a 100644 --- a/app/src/main/java/org/lsposed/manager/util/ThemeUtil.java +++ b/app/src/main/java/org/lsposed/manager/util/ThemeUtil.java @@ -45,7 +45,6 @@ public class ThemeUtil { static { preferences = App.getPreferences(); - colorThemeMap.put("COLOR_PRIMARY", R.style.ThemeOverlay_color_primary); colorThemeMap.put("SAKURA", R.style.ThemeOverlay_sakura); colorThemeMap.put("MATERIAL_RED", R.style.ThemeOverlay_material_red); colorThemeMap.put("MATERIAL_PINK", R.style.ThemeOverlay_material_pink); @@ -64,7 +63,6 @@ public class ThemeUtil { colorThemeMap.put("MATERIAL_ORANGE", R.style.ThemeOverlay_material_orange); colorThemeMap.put("MATERIAL_DEEP_ORANGE", R.style.ThemeOverlay_material_deep_orange); colorThemeMap.put("MATERIAL_BROWN", R.style.ThemeOverlay_material_brown); - colorThemeMap.put("MATERIAL_GREY", R.style.ThemeOverlay_material_grey); colorThemeMap.put("MATERIAL_BLUE_GREY", R.style.ThemeOverlay_material_blue_grey); } @@ -102,14 +100,14 @@ public class ThemeUtil { if (isSystemAccent()) { return "SYSTEM"; } - return preferences.getString("theme_color", "COLOR_PRIMARY"); + return preferences.getString("theme_color", "COLOR_BLUE"); } @StyleRes public static int getColorThemeStyleRes() { Integer theme = colorThemeMap.get(getColorTheme()); if (theme == null) { - return R.style.ThemeOverlay_color_primary; + return R.style.ThemeOverlay_material_blue; } return theme; } diff --git a/app/src/main/res/drawable-nodpi/shortcut_ic_repo.xml b/app/src/main/res/drawable-nodpi/shortcut_ic_repo.xml index bc568079..e4948165 100644 --- a/app/src/main/res/drawable-nodpi/shortcut_ic_repo.xml +++ b/app/src/main/res/drawable-nodpi/shortcut_ic_repo.xml @@ -22,7 +22,7 @@ - \ No newline at end of file + diff --git a/app/src/main/res/drawable/ic_assignment_checkable.xml b/app/src/main/res/drawable/ic_assignment_checkable.xml new file mode 100644 index 00000000..96ea7b4a --- /dev/null +++ b/app/src/main/res/drawable/ic_assignment_checkable.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_baseline_assignment_24.xml b/app/src/main/res/drawable/ic_baseline_assignment_24.xml new file mode 100644 index 00000000..a6c37673 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_assignment_24.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_extension_24.xml b/app/src/main/res/drawable/ic_baseline_extension_24.xml new file mode 100644 index 00000000..94055ba4 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_extension_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_get_app_24.xml b/app/src/main/res/drawable/ic_baseline_get_app_24.xml new file mode 100644 index 00000000..27bb5a3b --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_get_app_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_home_24.xml b/app/src/main/res/drawable/ic_baseline_home_24.xml new file mode 100644 index 00000000..3a4c7dac --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_home_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_settings_24.xml b/app/src/main/res/drawable/ic_baseline_settings_24.xml new file mode 100644 index 00000000..41a82ede --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_settings_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_extension.xml b/app/src/main/res/drawable/ic_extension.xml deleted file mode 100644 index 83d047fb..00000000 --- a/app/src/main/res/drawable/ic_extension.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_extension_checkable.xml b/app/src/main/res/drawable/ic_extension_checkable.xml new file mode 100644 index 00000000..e5825c01 --- /dev/null +++ b/app/src/main/res/drawable/ic_extension_checkable.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_get_app.xml b/app/src/main/res/drawable/ic_get_app.xml deleted file mode 100644 index 4b847b66..00000000 --- a/app/src/main/res/drawable/ic_get_app.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_get_app_checkable.xml b/app/src/main/res/drawable/ic_get_app_checkable.xml new file mode 100644 index 00000000..6624b29d --- /dev/null +++ b/app/src/main/res/drawable/ic_get_app_checkable.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_home_checkable.xml b/app/src/main/res/drawable/ic_home_checkable.xml new file mode 100644 index 00000000..206c3bf6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_checkable.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_outline_assignment_24.xml b/app/src/main/res/drawable/ic_outline_assignment_24.xml new file mode 100644 index 00000000..486983c4 --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_assignment_24.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_outline_extension_24.xml b/app/src/main/res/drawable/ic_outline_extension_24.xml new file mode 100644 index 00000000..2667cc69 --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_extension_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_outline_get_app_24.xml b/app/src/main/res/drawable/ic_outline_get_app_24.xml new file mode 100644 index 00000000..ea285035 --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_get_app_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_outline_home_24.xml b/app/src/main/res/drawable/ic_outline_home_24.xml new file mode 100644 index 00000000..11b964ad --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_home_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_outline_settings_24.xml b/app/src/main/res/drawable/ic_outline_settings_24.xml new file mode 100644 index 00000000..0d7a0a66 --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_settings_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml deleted file mode 100644 index cfabe9d4..00000000 --- a/app/src/main/res/drawable/ic_settings.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_settings_checkable.xml b/app/src/main/res/drawable/ic_settings_checkable.xml new file mode 100644 index 00000000..728f3013 --- /dev/null +++ b/app/src/main/res/drawable/ic_settings_checkable.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/shortcut_ic_modules.xml b/app/src/main/res/drawable/shortcut_ic_modules.xml index a4fb006a..1e0105f9 100644 --- a/app/src/main/res/drawable/shortcut_ic_modules.xml +++ b/app/src/main/res/drawable/shortcut_ic_modules.xml @@ -23,7 +23,7 @@ diff --git a/app/src/main/res/layout-sw600dp/activity_main.xml b/app/src/main/res/layout-sw600dp/activity_main.xml index ada82d32..4a0aa526 100644 --- a/app/src/main/res/layout-sw600dp/activity_main.xml +++ b/app/src/main/res/layout-sw600dp/activity_main.xml @@ -17,39 +17,37 @@ ~ Copyright (C) 2021 LSPosed Contributors --> - - - - - + android:layout_height="match_parent"> - - + + + diff --git a/app/src/main/res/layout/activity_crash_report.xml b/app/src/main/res/layout/activity_crash_report.xml index 4157b6b3..53eee181 100644 --- a/app/src/main/res/layout/activity_crash_report.xml +++ b/app/src/main/res/layout/activity_crash_report.xml @@ -54,13 +54,13 @@ android:paddingTop="8dp" android:orientation="vertical"> - - + ~ This file is part of LSPosed. + ~ + ~ LSPosed is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU General Public License as published by + ~ the Free Software Foundation, either version 3 of the License, or + ~ (at your option) any later version. + ~ + ~ LSPosed is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU General Public License for more details. + ~ + ~ You should have received a copy of the GNU General Public License + ~ along with LSPosed. If not, see . + ~ + ~ Copyright (C) 2021 LSPosed Contributors + --> - + android:layout_height="match_parent" + app:edgeToEdge="true"> - - + android:layout_height="match_parent"> + + + + + + diff --git a/app/src/main/res/layout/dialog_about.xml b/app/src/main/res/layout/dialog_about.xml index b8ffd1d2..2139cb2d 100644 --- a/app/src/main/res/layout/dialog_about.xml +++ b/app/src/main/res/layout/dialog_about.xml @@ -36,20 +36,20 @@ android:layout_height="wrap_content" android:layout_marginStart="16dp"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/dialog_item.xml b/app/src/main/res/layout/dialog_item.xml index 55253813..07dab92a 100644 --- a/app/src/main/res/layout/dialog_item.xml +++ b/app/src/main/res/layout/dialog_item.xml @@ -21,13 +21,13 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - - . - ~ + ~ ~ Copyright (C) 2020 EdXposed Contributors ~ Copyright (C) 2021 LSPosed Contributors --> @@ -23,9 +23,9 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - app:consumeSystemWindowsInsets="start|end" + app:consumeSystemWindowsInsets="@integer/internal_fragment_insets" app:edgeToEdge="true" - app:fitsSystemWindowsInsets="start|end"> + app:fitsSystemWindowsInsets="@integer/internal_fragment_insets"> + app:fitsSystemWindowsInsets="@integer/internal_fragment_top_insets"> + + app:tint="?attr/colorOnPrimary" /> + app:fitsSystemWindowsInsets="@integer/internal_fragment_bottom_insets" /> diff --git a/app/src/main/res/layout/fragment_compile_dialog.xml b/app/src/main/res/layout/fragment_compile_dialog.xml index 5817af37..98fe0e23 100644 --- a/app/src/main/res/layout/fragment_compile_dialog.xml +++ b/app/src/main/res/layout/fragment_compile_dialog.xml @@ -36,7 +36,7 @@ android:layout_marginEnd="?attr/dialogPreferredPadding" android:max="10000" /> - + app:fitsSystemWindowsInsets="@integer/internal_fragment_insets"> + android:fitsSystemWindows="false" + app:fitsSystemWindowsInsets="@integer/internal_fragment_top_insets"> - + android:layout_height="?collapsingToolbarLayoutLargeSize" + android:fitsSystemWindows="false" + app:layout_scrollFlags="scroll|exitUntilCollapsed" + app:titleCollapseMode="scale"> + + + + + + @@ -66,252 +79,254 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:animateLayoutChanges="true" + android:clipChildren="false" + android:clipToPadding="false" android:orientation="vertical" + android:paddingHorizontal="@dimen/m3_appbar_expanded_title_margin_horizontal" + android:paddingVertical="?dialogPreferredPadding" tools:context=".ui.activity.MainActivity"> + android:layout_height="wrap_content" + android:outlineAmbientShadowColor="?colorPrimary" + android:outlineSpotShadowColor="?colorPrimary" + android:stateListAnimator="@null" + app:cardBackgroundColor="?colorPrimary" + app:cardElevation="@dimen/home_primary_elevation" + app:cardPreventCornerOverlap="false" + tools:targetApi="p"> + android:padding="?dialogPreferredPadding"> + tools:ignore="ContentDescription" /> - - + android:textAppearance="?textAppearanceBodyMedium" + android:textColor="?colorOnPrimary" /> - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_marginTop="16dp" + app:cardBackgroundColor="?colorErrorContainer"> + android:orientation="vertical" + android:padding="?dialogPreferredPadding"> - - - + android:textAppearance="?textAppearanceTitleMedium" + android:textColor="?colorOnErrorContainer" /> + + + + android:layout_marginTop="16dp" + app:cardBackgroundColor="?colorSecondaryContainer"> + android:orientation="vertical" + android:padding="?dialogPreferredPadding"> - - - + android:textAppearance="?textAppearanceTitleMedium" + android:textColor="?colorOnSecondaryContainer" /> + + + + + + + + android:layout_marginTop="16dp"> + android:orientation="vertical" + android:padding="?dialogPreferredPadding"> - - - - - + android:text="@string/info_api_version" /> - - - - - - - - - + android:text="@string/not_installed" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_pager.xml b/app/src/main/res/layout/fragment_pager.xml index 241afe50..44000439 100644 --- a/app/src/main/res/layout/fragment_pager.xml +++ b/app/src/main/res/layout/fragment_pager.xml @@ -22,9 +22,9 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:animateLayoutChanges="true" - app:consumeSystemWindowsInsets="start|end" + app:consumeSystemWindowsInsets="@integer/internal_fragment_insets" app:edgeToEdge="true" - app:fitsSystemWindowsInsets="start|end"> + app:fitsSystemWindowsInsets="@integer/internal_fragment_insets"> + app:fitsSystemWindowsInsets="@integer/internal_fragment_top_insets"> + app:tint="?attr/colorOnPrimary" /> diff --git a/app/src/main/res/layout/fragment_repo.xml b/app/src/main/res/layout/fragment_repo.xml index ee688c65..e7c9b2f1 100644 --- a/app/src/main/res/layout/fragment_repo.xml +++ b/app/src/main/res/layout/fragment_repo.xml @@ -22,16 +22,16 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - app:consumeSystemWindowsInsets="start|end" + app:consumeSystemWindowsInsets="@integer/internal_fragment_insets" app:edgeToEdge="true" - app:fitsSystemWindowsInsets="start|end"> + app:fitsSystemWindowsInsets="@integer/internal_fragment_insets"> + app:fitsSystemWindowsInsets="@integer/internal_fragment_top_insets"> + app:fitsSystemWindowsInsets="@integer/internal_fragment_bottom_insets" /> diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 3ea3d2a6..a82e54cf 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -22,16 +22,16 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - app:consumeSystemWindowsInsets="start|end" + app:consumeSystemWindowsInsets="@integer/internal_fragment_insets" app:edgeToEdge="true" - app:fitsSystemWindowsInsets="start|end"> + app:fitsSystemWindowsInsets="@integer/internal_fragment_insets"> + app:fitsSystemWindowsInsets="@integer/internal_fragment_top_insets"> diff --git a/app/src/main/res/layout/item_log_textview.xml b/app/src/main/res/layout/item_log_textview.xml index fabfacbb..22aee4b8 100644 --- a/app/src/main/res/layout/item_log_textview.xml +++ b/app/src/main/res/layout/item_log_textview.xml @@ -23,5 +23,6 @@ android:layout_height="wrap_content" android:clipToPadding="false" android:fontFamily="monospace" + android:paddingHorizontal="@dimen/m3_appbar_expanded_title_margin_horizontal" android:textColor="?attr/colorOnSurface" android:textSize="12sp" /> diff --git a/app/src/main/res/layout/item_module.xml b/app/src/main/res/layout/item_module.xml index e2e1725d..8768c66b 100644 --- a/app/src/main/res/layout/item_module.xml +++ b/app/src/main/res/layout/item_module.xml @@ -47,7 +47,7 @@ tools:ignore="ContentDescription" tools:srcCompat="@tools:sample/backgrounds/scenic" /> - - - - - - + android:clipToPadding="false" + app:fitsSystemWindowsInsets="@integer/internal_fragment_bottom_insets"> + app:borderTopVisibility="whenTop"> diff --git a/app/src/main/res/layout/item_repo_recyclerview.xml b/app/src/main/res/layout/item_repo_recyclerview.xml index adf4b3db..b4bda222 100644 --- a/app/src/main/res/layout/item_repo_recyclerview.xml +++ b/app/src/main/res/layout/item_repo_recyclerview.xml @@ -29,4 +29,4 @@ app:borderBottomVisibility="never" app:borderTopDrawable="@null" app:borderTopVisibility="whenTop" - app:fitsSystemWindowsInsets="bottom" /> + app:fitsSystemWindowsInsets="@integer/internal_fragment_bottom_insets" /> diff --git a/app/src/main/res/layout/item_repo_release.xml b/app/src/main/res/layout/item_repo_release.xml index 72c54e66..ecf41923 100644 --- a/app/src/main/res/layout/item_repo_release.xml +++ b/app/src/main/res/layout/item_repo_release.xml @@ -40,7 +40,7 @@ android:layout_height="match_parent" tools:ignore="RtlSymmetry"> - - diff --git a/app/src/main/res/layout/dialog_warning.xml b/app/src/main/res/layout/scrollable_dialog.xml similarity index 96% rename from app/src/main/res/layout/dialog_warning.xml rename to app/src/main/res/layout/scrollable_dialog.xml index e5ce7ee0..c0cab916 100644 --- a/app/src/main/res/layout/dialog_warning.xml +++ b/app/src/main/res/layout/scrollable_dialog.xml @@ -22,7 +22,7 @@ android:layout_height="wrap_content"> + app:fitsSystemWindowsInsets="@integer/internal_fragment_bottom_insets" /> diff --git a/app/src/main/res/menu-sw600dp/navigation_menu.xml b/app/src/main/res/menu-sw600dp/navigation_menu.xml new file mode 100644 index 00000000..b217051f --- /dev/null +++ b/app/src/main/res/menu-sw600dp/navigation_menu.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + diff --git a/daemon/src/main/res/values-night/colors.xml b/app/src/main/res/menu/menu_home.xml similarity index 57% rename from daemon/src/main/res/values-night/colors.xml rename to app/src/main/res/menu/menu_home.xml index bea2dc86..fcaeb5b2 100644 --- a/daemon/src/main/res/values-night/colors.xml +++ b/app/src/main/res/menu/menu_home.xml @@ -17,6 +17,18 @@ ~ Copyright (C) 2021 LSPosed Contributors --> - - @color/color_primary_dark - + + + + + diff --git a/app/src/main/res/menu/navigation_menu.xml b/app/src/main/res/menu/navigation_menu.xml new file mode 100644 index 00000000..79cca97c --- /dev/null +++ b/app/src/main/res/menu/navigation_menu.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index ea61a5e2..6732b74d 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -24,36 +24,7 @@ - - - - - + android:label="main"/> - - - - - @color/color_primary_dark - @color/material_pink_300 @color/material_light_blue_50 diff --git a/app/src/main/res/values-night/colors_custom.xml b/app/src/main/res/values-night/colors_custom.xml index 4e7d9bcd..be11f010 100644 --- a/app/src/main/res/values-night/colors_custom.xml +++ b/app/src/main/res/values-night/colors_custom.xml @@ -20,24 +20,516 @@ --> - @color/material_red_200 - @color/material_pink_200 - @color/material_purple_200 - @color/material_deep_purple_200 - @color/material_indigo_200 - @color/material_blue_200 - @color/material_light_blue_200 - @color/material_cyan_200 - @color/material_teal_200 - @color/material_green_200 - @color/material_light_green_200 - @color/material_lime_200 - @color/material_yellow_200 - @color/material_amber_200 - @color/material_orange_200 - @color/material_deep_orange_200 - @color/material_brown_200 - @color/material_grey_200 - @color/material_blue_grey_200 - #ffa0ab + #FFB4A8 + #680001 + #940002 + #FFDAD3 + #E7BCB6 + #442A26 + #5D3F3B + #FFDAD4 + #DFC38C + #3F2E04 + #574419 + #FCDFA6 + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #211A19 + #EDE0DE + #211A19 + #EDE0DE + #534341 + #D8C2BF + #A08C89 + #211A19 + #EDE0DE + #BC1714 + + #FFB2C0 + #670024 + #900036 + #FFD9DF + #E5BDC2 + #43292D + #5C3F43 + #FFD9DE + #EBBF90 + #452B08 + #5F411C + #FFDDB8 + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #201A1B + #ECE0E0 + #201A1B + #ECE0E0 + #524345 + #D6C1C3 + #9F8C8E + #201A1B + #ECE0E0 + #BC0049 + + #FBAAFF + #570068 + #7B0091 + #FFD5FF + #D7BFD5 + #3B2B3B + #534153 + #F5DBF2 + #F6B8AE + #4C251F + #663B34 + #FFDAD2 + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #1E1A1D + #E9E0E5 + #1E1A1D + #E9E0E5 + #4D444C + #D0C3CC + #998E96 + #1E1A1D + #E9E0E5 + #9A25AE + + #D4BAFF + #3E008E + #5727A7 + #ECDCFF + #CDC2DB + #342D41 + #4B4358 + #E9DEF7 + #F0B8C5 + #4A2530 + #643B46 + #FFD9E2 + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #1D1B1F + #E6E1E5 + #1D1B1F + #E6E1E5 + #49454E + #CBC4CF + #948E99 + #1D1B1F + #E6E1E5 + #6F43BF + + #B9C3FF + #08218A + #293CA0 + #DDE0FF + #C4C5DD + #2D2F42 + #43465A + #E0E1FA + #E5BAD7 + #45263E + #5D3C55 + #FFD7F3 + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #1B1B1F + #E4E1E6 + #1B1B1F + #E4E1E6 + #46464F + #C6C5D0 + #90909A + #1B1B1F + #E4E1E6 + #4355B9 + + #9CCAFF + #00325A + #00497F + #D0E4FF + #BBC8DB + #253140 + #3C4858 + #D6E3F7 + #D6BEE4 + #3B2948 + #523F5F + #F3DAFF + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #1B1B1B + #E2E2E6 + #1B1B1B + #E2E2E6 + #42474E + #C3C7D0 + #8D9199 + #1B1B1B + #E2E2E6 + #0061A6 + + #8BCEFF + #003450 + #004B71 + #C8E6FF + #B7C8D8 + #22323F + #384956 + #D3E4F5 + #CFBFE8 + #362B4B + #4D4162 + #ECDCFF + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #1A1C1E + #E2E2E5 + #1A1C1E + #E2E2E5 + #41474D + #C1C7CE + #8B9198 + #1A1C1E + #E2E2E5 + #006494 + + #44D8F1 + #00363F + #004E5A + #9CEFFF + #B1CBD1 + #1C3439 + #334A4F + #CDE7ED + #BCC5EA + #262F4D + #3D4665 + #DAE1FF + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #191C1D + #E1E3E3 + #191C1D + #E1E3E3 + #3F484A + #BFC8CA + #899294 + #191C1D + #E1E3E3 + #006877 + + #53DBC9 + #003730 + #005047 + #74F7E5 + #B1CCC6 + #1C3531 + #334B47 + #CDE8E2 + #ADCAE6 + #153349 + #2D4960 + #CBE5FF + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #191C1B + #E0E3E1 + #191C1B + #E0E3E1 + #3F4947 + #BFC9C6 + #889390 + #191C1B + #E0E3E1 + #006A5F + + #7BDC77 + #003907 + #00530C + #96F990 + #BACCB3 + #253423 + #3C4B39 + #D5E8CE + #A1CFD4 + #00363A + #1E4D52 + #BCEBF0 + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #1A1C19 + #E2E3DD + #1A1C19 + #E2E3DD + #424840 + #C2C8BD + #8C9288 + #1A1C19 + #E2E3DD + #006E17 + + #71DBA8 + #003822 + #005234 + #8DF7C2 + #B4CCBC + #20352A + #364B3F + #D0E9D8 + #A5CDDE + #063542 + #234C5A + #C0E9FA + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #191C1A + #E1E3DF + #191C1A + #E1E3DF + #404943 + #C0C9C1 + #8A938C + #191C1A + #E1E3DF + #006C46 + + #C1D02C + #2E3400 + #434B00 + #DEED49 + #C7C9A6 + #30321A + #46492E + #E4E5C1 + #A3D0C1 + #06372C + #234E43 + #BEECDC + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #1C1C17 + #E5E2DA + #1C1C17 + #E5E2DA + #47473B + #C8C7B7 + #929282 + #1C1C17 + #E5E2DA + #5A6400 + + #DBC808 + #373100 + #504700 + #F9E534 + #CEC7A3 + #353117 + #4B472B + #EBE3BD + #A6D0B7 + #113726 + #284E3B + #C2ECD2 + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #1D1C16 + #E7E2D9 + #1D1C16 + #E7E2D9 + #4A473A + #CBC6B5 + #959181 + #1D1C16 + #E7E2D9 + #6A5F00 + + #FABD00 + #402D00 + #5C4300 + #FFDF99 + #D7C4A0 + #3B2F15 + #52452A + #F4E0BB + #B0CFA9 + #1D361C + #334D31 + #CCEBC5 + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #1E1B16 + #E9E1D8 + #1E1B16 + #E9E1D8 + #4D4639 + #D0C5B4 + #999080 + #1E1B16 + #E9E1D8 + #795900 + + #FFB86D + #4B2800 + #6A3B00 + #FFDCBB + #E2C1A4 + #402C18 + #59422C + #FEDCBE + #C0CC9A + #2B3410 + #414B25 + #DCE8B4 + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #1F1B17 + #EBE0D9 + #1F1B17 + #EBE0D9 + #51453A + #D5C3B5 + #9E8E81 + #1F1B17 + #EBE0D9 + #8C5000 + + #FFB49D + #601400 + #882000 + #FFDACF + #E7BDB2 + #442A22 + #5D3F37 + #FFDACF + #D8C58D + #3A2F04 + #53461A + #F5E1A6 + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #201A18 + #EDE0DD + #201A18 + #EDE0DD + #53433F + #D8C2BC + #A08C87 + #201A18 + #EDE0DD + #B22D00 + + #FFB598 + #5C1A00 + #7B2E0D + #FFDBCD + #E7BEB0 + #442A20 + #5D4035 + #FFDBCD + #D5C78E + #383005 + #50461A + #F1E2A7 + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #201A18 + #EDE0DC + #201A18 + #EDE0DC + #52433E + #D8C2BB + #A08C86 + #201A18 + #EDE0DC + #9A4523 + + #79D0FF + #00344A + #004C69 + #C2E8FF + #B5C9D7 + #20333E + #374955 + #D1E5F3 + #CAC1EA + #322C4C + #484264 + #E7DEFF + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #191C1E + #E1E2E5 + #191C1E + #E1E2E5 + #41484D + #C0C7CD + #8B9298 + #191C1E + #E1E2E5 + #00668B + + #FFB2BC + #5F1123 + #7D2939 + #FFDADE + #E5BDC0 + #44292C + #5C3F42 + #FFD9DC + #E8BF8E + #442B06 + #5D411B + #FFDDB4 + #FFB4A9 + #930006 + #680003 + #FFDAD4 + #201A1A + #ECE0E0 + #201A1A + #ECE0E0 + #524344 + #D7C2C3 + #9F8C8D + #201A1A + #ECE0E0 + #9B404F diff --git a/app/src/main/res/values-sw600dp/integer.xml b/app/src/main/res/values-sw600dp/integer.xml new file mode 100644 index 00000000..fef5d662 --- /dev/null +++ b/app/src/main/res/values-sw600dp/integer.xml @@ -0,0 +1,5 @@ + + + 0x50 + + diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 26378783..a3122a12 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -37,7 +37,6 @@ - COLOR_PRIMARY SAKURA MATERIAL_RED MATERIAL_PINK @@ -56,12 +55,10 @@ MATERIAL_ORANGE MATERIAL_DEEP_ORANGE MATERIAL_BROWN - MATERIAL_GREY MATERIAL_BLUE_GREY - @string/color_pixel_blue @string/color_sakura @string/color_red @string/color_pink @@ -80,7 +77,6 @@ @string/color_orange @string/color_deep_orange @string/color_brown - @string/color_grey @string/color_blue_grey diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 44a3ffe5..6ca4a3d6 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -19,10 +19,6 @@ --> - @color/google_blue_600 - @color/google_blue_300 - @color/color_primary_light - @android:color/white @color/material_pink_200 diff --git a/app/src/main/res/values/colors_custom.xml b/app/src/main/res/values/colors_custom.xml index 8e2eb29a..ca2abf8c 100644 --- a/app/src/main/res/values/colors_custom.xml +++ b/app/src/main/res/values/colors_custom.xml @@ -20,24 +20,536 @@ --> - @color/material_red_500 - @color/material_pink_500 - @color/material_purple_500 - @color/material_deep_purple_500 - @color/material_indigo_500 - @color/material_blue_500 - @color/material_light_blue_500 - @color/material_cyan_500 - @color/material_teal_500 - @color/material_green_500 - @color/material_light_green_500 - @color/material_lime_500 - @color/material_yellow_500 - @color/material_amber_500 - @color/material_orange_500 - @color/material_deep_orange_500 - @color/material_brown_500 - @color/material_grey_500 - @color/material_blue_grey_500 - #ff9ca8 + #BC1714 + #FFFFFF + #FFDAD3 + #410001 + #775652 + #FFFFFF + #FFDAD4 + #2C1512 + #715C2E + #FFFFFF + #FCDFA6 + #261A00 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FCFCFC + #211A19 + #FCFCFC + #211A19 + #F4DDDA + #534341 + #857370 + #FBEEEC + #362F2E + #FFB4A8 + #F44336 + + #BC0049 + #FFFFFF + #FFD9DF + #400013 + #76565B + #FFFFFF + #FFD9DE + #2B1519 + #795831 + #FFFFFF + #FFDDB8 + #2C1700 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FCFCFC + #201A1B + #FCFCFC + #201A1B + #F4DDDF + #524345 + #847375 + #FAEEEE + #362F30 + #FFB2C0 + #E91E63 + + #9A25AE + #FFFFFF + #FFD5FF + #350040 + #6B586B + #FFFFFF + #F5DBF2 + #251626 + #82524A + #FFFFFF + #FFDAD2 + #32110C + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FCFCFC + #1E1A1D + #FCFCFC + #1E1A1D + #ECDEE8 + #4D444C + #7E747C + #F7EEF3 + #332F32 + #FBAAFF + #9C27B0 + + #6F43BF + #FFFFFF + #ECDCFF + #25005A + #635B70 + #FFFFFF + #E9DEF7 + #1F182B + #7F525E + #FFFFFF + #FFD9E2 + #32101B + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FFFBFD + #1D1B1F + #FFFBFD + #1D1B1F + #E7E0EB + #49454E + #7A757F + #F5EFF4 + #323033 + #D4BAFF + #673AB7 + + #4355B9 + #FFFFFF + #DDE0FF + #000D61 + #5B5D71 + #FFFFFF + #E0E1FA + #171A2C + #77536D + #FFFFFF + #FFD7F3 + #2D1228 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FEFBFF + #1B1B1F + #FEFBFF + #1B1B1F + #E3E1EC + #46464F + #767680 + #F3F0F5 + #303034 + #B9C3FF + #3F51B5 + + + #0061A6 + #FFFFFF + #D0E4FF + #001D36 + #535F70 + #FFFFFF + #D6E3F7 + #101C2B + #6B5778 + #FFFFFF + #F3DAFF + #251432 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FDFCFF + #1B1B1B + #FDFCFF + #1B1B1B + #DFE2EB + #42474E + #73777F + #F1F0F4 + #2F3033 + #9CCAFF + #2196F3 + + #006494 + #FFFFFF + #C8E6FF + #001E31 + #50606E + #FFFFFF + #D3E4F5 + #0C1D29 + #65597B + #FFFFFF + #ECDCFF + #201634 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FCFCFF + #1A1C1E + #FCFCFF + #1A1C1E + #DEE3EA + #41474D + #72787E + #F0F0F3 + #2F3032 + #8BCEFF + #03A9F4 + + #006877 + #FFFFFF + #9CEFFF + #001F25 + #4A6267 + #FFFFFF + #CDE7ED + #051F23 + #545D7D + #FFFFFF + #DAE1FF + #101A37 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FBFDFE + #191C1D + #FBFDFE + #191C1D + #DBE4E6 + #3F484A + #70797B + #EFF1F2 + #2D3132 + #44D8F1 + #00BCD4 + + #006A5F + #FFFFFF + #74F7E5 + #00201C + #4A635F + #FFFFFF + #CDE8E2 + #05201C + #466179 + #FFFFFF + #CBE5FF + #001D31 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FAFDFA + #191C1B + #FAFDFA + #191C1B + #DBE5E2 + #3F4947 + #6E7976 + #EFF1EF + #2D3130 + #53DBC9 + #009688 + + #006E17 + #FFFFFF + #96F990 + #002202 + #52634E + #FFFFFF + #D5E8CE + #101F0F + #38656A + #FFFFFF + #BCEBF0 + #011F22 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FCFDF6 + #1A1C19 + #FCFDF6 + #1A1C19 + #DEE4D8 + #424840 + #73796F + #F1F1EB + #2F312D + #7BDC77 + #4FAF50 + + #006C46 + #FFFFFF + #8DF7C2 + #002112 + #4D6356 + #FFFFFF + #D0E9D8 + #0A2015 + #3D6473 + #FFFFFF + #C0E9FA + #001F29 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FBFDF8 + #191C1A + #FBFDF8 + #191C1A + #DCE5DD + #404943 + #707972 + #F0F1ED + #2D312E + #71DBA8 + #8BC3A4 + + #5A6400 + #FFFFFF + #DEED49 + #1A1E00 + #5E6044 + #FFFFFF + #E4E5C1 + #1B1D07 + #3C665A + #FFFFFF + #BEECDC + #002019 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FFFCF3 + #1C1C17 + #FFFCF3 + #1C1C17 + #E5E3D2 + #47473B + #787869 + #F3F0E8 + #31312B + #C1D02C + #CDDC39 + + #6A5F00 + #FFFFFF + #F9E534 + #201C00 + #645F41 + #FFFFFF + #EBE3BD + #1F1C05 + #406652 + #FFFFFF + #C2ECD2 + #002112 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FFFBF7 + #1D1C16 + #FFFBF7 + #1D1C16 + #E8E2D0 + #4A473A + #7B7768 + #F5F0E7 + #32302A + #DBC808 + #FFEB3B + + #795900 + #FFFFFF + #FFDF99 + #261A00 + #6B5C3F + #FFFFFF + #F4E0BB + #241A04 + #496546 + #FFFFFF + #CCEBC5 + #082009 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FFFBF8 + #1E1B16 + #FFFBF8 + #1E1B16 + #EDE1CF + #4D4639 + #7F7667 + #F8F0E7 + #34302A + #FABD00 + #FFC107 + + #8C5000 + #FFFFFF + #FFDCBB + #2D1600 + #735A42 + #FFFFFF + #FEDCBE + #291806 + #586339 + #FFFFFF + #DCE8B4 + #161E01 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FCFCFC + #1F1B17 + #FCFCFC + #1F1B17 + #F2DFD1 + #51453A + #837569 + #FAEFE7 + #352F2A + #FFB86D + #FF9800 + + #B22D00 + #FFFFFF + #FFDACF + #3C0800 + #77574E + #FFFFFF + #FFDACF + #2C160F + #6B5D2F + #FFFFFF + #F5E1A6 + #231B00 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FCFCFC + #201A18 + #FCFCFC + #201A18 + #F5DED8 + #53433F + #86736E + #FBEEEB + #362F2D + #FFB49D + #FF5722 + + #9A4523 + #FFFFFF + #FFDBCD + #380C00 + #77574C + #FFFFFF + #FFDBCD + #2C160D + #695E2F + #FFFFFF + #F1E2A7 + #221B00 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FCFCFC + #201A18 + #FCFCFC + #201A18 + #F5DED6 + #52433E + #85736D + #FCEEEA + #362F2D + #FFB598 + #795548 + + #00668B + #FFFFFF + #C2E8FF + #001E2C + #4E616D + #FFFFFF + #D1E5F3 + #0A1E28 + #615A7D + #FFFFFF + #E7DEFF + #1D1736 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FBFCFF + #191C1E + #FBFCFF + #191C1E + #DDE3E9 + #41484D + #71787D + #F0F1F4 + #2E3133 + #79D0FF + #607D8F + + #9B404F + #FFFFFF + #FFDADE + #400010 + #765659 + #FFFFFF + #FFD9DC + #2C1518 + #785931 + #FFFFFF + #FFDDB4 + #2A1700 + #BA1B1B + #FFDAD4 + #FFFFFF + #410001 + #FCFCFC + #201A1A + #FCFCFC + #201A1A + #F3DDDE + #524344 + #847374 + #FAEEEE + #362F2F + #FFB2BC + #ff9ca8 diff --git a/app/src/main/res/values/integer.xml b/app/src/main/res/values/integer.xml new file mode 100644 index 00000000..92ead4e0 --- /dev/null +++ b/app/src/main/res/values/integer.xml @@ -0,0 +1,6 @@ + + + 0x00800007 + 0x30 + 0 + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 27fad0f2..5a40b245 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -204,9 +204,9 @@ report this to Send crash info Crash info copied to clipboard + Copied to clipboard - Pixel blue Sakura Red Pink @@ -225,8 +225,8 @@ Orange Deep orange Brown - Grey Blue grey Feedback or suggestion Upgradable first + Overview diff --git a/app/src/main/res/values/strings_untranslatable.xml b/app/src/main/res/values/strings_untranslatable.xml index 8fe812cc..afddc318 100644 --- a/app/src/main/res/values/strings_untranslatable.xml +++ b/app/src/main/res/values/strings_untranslatable.xml @@ -20,5 +20,6 @@ LSPosed https://github.com/LSPosed/LSPosed/ + https://github.com/LSPosed/LSPosed#install @string/module_repo diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 3388c349..5c59aa84 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -79,27 +79,6 @@ 24dp - - - - - - - - - diff --git a/app/src/main/res/values/themes_override.xml b/app/src/main/res/values/themes_override.xml index a315f9d0..b5b005d1 100644 --- a/app/src/main/res/values/themes_override.xml +++ b/app/src/main/res/values/themes_override.xml @@ -53,6 +53,13 @@ 0.0178571429 + +