diff --git a/app/build.gradle b/app/build.gradle index ff7bbf81..4527751c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,6 +70,10 @@ dependencies { implementation 'com.google.android.material:material:1.2.1' implementation 'com.takisoft.preferencex:preferencex:1.1.0' implementation 'com.takisoft.preferencex:preferencex-colorpicker:1.1.0' + implementation 'rikka.insets:insets:1.0.1' + implementation 'rikka.recyclerview:recyclerview-utils:1.2.0' + implementation "rikka.widget:switchbar:1.0.2" + implementation 'rikka.layoutinflater:layoutinflater:1.0.1' implementation 'tech.rectifier.preferencex-android:preferencex-simplemenu:88f93154b2' implementation 'me.zhanghai.android.appiconloader:appiconloader-glide:1.2.0' implementation 'me.zhanghai.android.fastscroll:library:1.1.5' diff --git a/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java b/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java index 66ed09a2..751c47a9 100644 --- a/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java +++ b/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java @@ -51,9 +51,9 @@ import io.github.lsposed.manager.BuildConfig; import io.github.lsposed.manager.R; import io.github.lsposed.manager.ui.activity.AppListActivity; import io.github.lsposed.manager.ui.fragment.CompileDialogFragment; -import io.github.lsposed.manager.ui.widget.MasterSwitch; import io.github.lsposed.manager.util.GlideApp; import io.github.lsposed.manager.util.ModuleUtil; +import rikka.widget.switchbar.SwitchBar; import static android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS; @@ -64,14 +64,14 @@ public class ScopeAdapter extends RecyclerView.Adapter private final SharedPreferences preferences; private final String modulePackageName; private final String moduleName; - private final MasterSwitch masterSwitch; + private final SwitchBar masterSwitch; private List fullList, showList; private List checkedList; private final List recommendedList; private boolean enabled = true; private ApplicationInfo selectedInfo; - public ScopeAdapter(AppListActivity activity, String moduleName, String modulePackageName, MasterSwitch masterSwitch) { + public ScopeAdapter(AppListActivity activity, String moduleName, String modulePackageName, SwitchBar masterSwitch) { this.activity = activity; this.moduleName = moduleName; this.modulePackageName = modulePackageName; @@ -80,13 +80,11 @@ public class ScopeAdapter extends RecyclerView.Adapter fullList = showList = Collections.emptyList(); checkedList = Collections.emptyList(); pm = activity.getPackageManager(); - masterSwitch.setOnCheckedChangedListener(new MasterSwitch.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(boolean checked) { - enabled = checked; - ModuleUtil.getInstance().setModuleEnabled(modulePackageName, enabled); - notifyDataSetChanged(); - } + masterSwitch.setOnCheckedChangeListener((view, isChecked) -> { + enabled = isChecked; + ModuleUtil.getInstance().setModuleEnabled(modulePackageName, enabled); + notifyDataSetChanged(); + return true; }); ModuleUtil.InstalledModule module = ModuleUtil.getInstance().getModule(modulePackageName); recommendedList = module.getScopeList(); diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java index 9844ba7d..477b08a4 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java @@ -27,7 +27,7 @@ import io.github.lsposed.manager.adapters.ScopeAdapter; import io.github.lsposed.manager.databinding.ActivityAppListBinding; import io.github.lsposed.manager.util.BackupUtils; import io.github.lsposed.manager.util.LinearLayoutManagerFix; -import me.zhanghai.android.fastscroll.FastScrollerBuilder; +import rikka.recyclerview.RecyclerViewKt; public class AppListActivity extends BaseActivity { private SearchView searchView; @@ -63,16 +63,13 @@ public class AppListActivity extends BaseActivity { scopeAdapter.setHasStableIds(true); binding.recyclerView.setAdapter(scopeAdapter); binding.recyclerView.setLayoutManager(new LinearLayoutManagerFix(this)); - setupRecyclerViewInsets(binding.recyclerView, binding.getRoot()); - FastScrollerBuilder fastScrollerBuilder = new FastScrollerBuilder(binding.recyclerView); + RecyclerViewKt.addFastScroller(binding.recyclerView, binding.swipeRefreshLayout); + RecyclerViewKt.fixEdgeEffect(binding.recyclerView, false, true); if (!preferences.getBoolean("md2", true)) { DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL); binding.recyclerView.addItemDecoration(dividerItemDecoration); - } else { - fastScrollerBuilder.useMd2Style(); } - fastScrollerBuilder.build(); handler.postDelayed(runnable, 300); binding.swipeRefreshLayout.setOnRefreshListener(scopeAdapter::refresh); diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/BaseActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/BaseActivity.java index 6143cf3b..26c24a2d 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/BaseActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/BaseActivity.java @@ -5,19 +5,14 @@ import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; -import android.os.Build; import android.os.Bundle; -import android.view.View; +import android.view.LayoutInflater; import androidx.annotation.Nullable; import androidx.annotation.StyleRes; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatDelegate; import androidx.core.content.ContextCompat; -import androidx.core.graphics.Insets; -import androidx.core.view.ViewCompat; -import androidx.core.view.WindowCompat; -import androidx.core.view.WindowInsetsCompat; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -29,6 +24,7 @@ import io.github.lsposed.manager.Constants; import io.github.lsposed.manager.R; import io.github.lsposed.manager.util.CustomThemeColor; import io.github.lsposed.manager.util.CustomThemeColors; +import io.github.lsposed.manager.util.InsetsViewInflater; import io.github.lsposed.manager.util.NavUtil; import io.github.lsposed.manager.util.Version; @@ -47,6 +43,10 @@ public class BaseActivity extends AppCompatActivity { return preferences.getBoolean("black_dark_theme", false); } + private void onInstallViewFactory(LayoutInflater layoutInflater) { + layoutInflater.setFactory2(new InsetsViewInflater(getDelegate())); + } + public String getTheme(Context context) { if (isBlackNightTheme() && isNightMode(context.getResources().getConfiguration())) @@ -98,6 +98,7 @@ public class BaseActivity extends AppCompatActivity { @Override public void onCreate(@Nullable Bundle savedInstanceState) { + onInstallViewFactory(LayoutInflater.from(this)); super.onCreate(savedInstanceState); AppCompatDelegate.setDefaultNightMode(preferences.getInt("theme", -1)); theme = getTheme(this) + getCustomTheme() + preferences.getBoolean("md2", true); @@ -120,18 +121,6 @@ public class BaseActivity extends AppCompatActivity { } } - protected void setupRecyclerViewInsets(View recyclerView, View root) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - WindowCompat.setDecorFitsSystemWindows(getWindow(), false); - ViewCompat.setOnApplyWindowInsetsListener(recyclerView, (v, insets) -> { - Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); - root.setPadding(insets1.left, insets1.top, insets1.right, 0); - v.setPadding(0, 0, 0, insets1.bottom); - return WindowInsetsCompat.CONSUMED; - }); - } - } - public int getThemedColor(int id) { TypedArray typedArray = getTheme().obtainStyledAttributes(new int[]{id}); int color = typedArray.getColor(0, 0); diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/LogsActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/LogsActivity.java index d782be67..5389fce6 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/LogsActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/LogsActivity.java @@ -43,6 +43,7 @@ import io.github.lsposed.manager.databinding.ActivityLogsBinding; import io.github.lsposed.manager.databinding.DialogInstallWarningBinding; import io.github.lsposed.manager.databinding.ItemLogBinding; import io.github.lsposed.manager.util.LinearLayoutManagerFix; +import rikka.recyclerview.RecyclerViewKt; public class LogsActivity extends BaseActivity { private int logType = 0; @@ -89,10 +90,10 @@ public class LogsActivity extends BaseActivity { .show(); } adapter = new LogsAdapter(); + RecyclerViewKt.fixEdgeEffect(binding.recyclerView, false, true); binding.recyclerView.setAdapter(adapter); layoutManager = new LinearLayoutManagerFix(this); binding.recyclerView.setLayoutManager(layoutManager); - setupRecyclerViewInsets(binding.recyclerView, binding.getRoot()); try { if (Files.readAllBytes(Paths.get(Constants.getMiscDir(), "disable_verbose_log"))[0] == 49) { binding.slidingTabs.setVisibility(View.GONE); diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/MainActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/MainActivity.java index f5cf44f5..bccf4add 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/MainActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/MainActivity.java @@ -2,15 +2,10 @@ package io.github.lsposed.manager.ui.activity; import android.annotation.SuppressLint; import android.content.Intent; -import android.os.Build; import android.os.Bundle; import android.view.View; import androidx.core.content.ContextCompat; -import androidx.core.graphics.Insets; -import androidx.core.view.ViewCompat; -import androidx.core.view.WindowCompat; -import androidx.core.view.WindowInsetsCompat; import com.bumptech.glide.Glide; import com.google.android.material.snackbar.Snackbar; @@ -37,17 +32,6 @@ public class MainActivity extends BaseActivity { super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); - WindowCompat.setDecorFitsSystemWindows(getWindow(), false); - ViewCompat.setOnApplyWindowInsetsListener(binding.nestedScrollView, (v, insets) -> { - Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - v.setPadding(insets1.left, insets1.top, insets1.right, insets1.bottom); - } else { - v.setPadding(0, insets1.top, 0, 0); - binding.getRoot().setPadding(insets1.left, 0, insets1.right, insets1.bottom); - } - return WindowInsetsCompat.CONSUMED; - }); HolidayHelper.setup(this); binding.status.setOnClickListener(v -> { if (Constants.getXposedVersionCode() != -1) { diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/ModulesActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/ModulesActivity.java index 34a21be5..51eba32c 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/ModulesActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/ModulesActivity.java @@ -48,7 +48,7 @@ import io.github.lsposed.manager.databinding.ActivityAppListBinding; import io.github.lsposed.manager.util.GlideApp; import io.github.lsposed.manager.util.LinearLayoutManagerFix; import io.github.lsposed.manager.util.ModuleUtil; -import me.zhanghai.android.fastscroll.FastScrollerBuilder; +import rikka.recyclerview.RecyclerViewKt; import static android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS; @@ -81,16 +81,13 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi moduleUtil.addListener(this); binding.recyclerView.setAdapter(adapter); binding.recyclerView.setLayoutManager(new LinearLayoutManagerFix(this)); - setupRecyclerViewInsets(binding.recyclerView, binding.getRoot()); - FastScrollerBuilder fastScrollerBuilder = new FastScrollerBuilder(binding.recyclerView); + RecyclerViewKt.addFastScroller(binding.recyclerView, binding.swipeRefreshLayout); + RecyclerViewKt.fixEdgeEffect(binding.recyclerView, false, true); if (!preferences.getBoolean("md2", true)) { DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL); binding.recyclerView.addItemDecoration(dividerItemDecoration); - } else { - fastScrollerBuilder.useMd2Style(); } - fastScrollerBuilder.build(); binding.swipeRefreshLayout.setOnRefreshListener(() -> adapter.refresh(true)); mSearchListener = new SearchView.OnQueryTextListener() { @Override diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/SettingsActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/SettingsActivity.java index 30059f04..59aa92b0 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/SettingsActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/SettingsActivity.java @@ -45,8 +45,8 @@ import io.github.lsposed.manager.R; import io.github.lsposed.manager.databinding.ActivitySettingsBinding; import io.github.lsposed.manager.ui.fragment.StatusDialogBuilder; import io.github.lsposed.manager.ui.widget.IntegerListPreference; -import io.github.lsposed.manager.ui.widget.RecyclerViewBugFixed; import io.github.lsposed.manager.util.BackupUtils; +import rikka.recyclerview.RecyclerViewKt; public class SettingsActivity extends BaseActivity { private static final String KEY_PREFIX = SettingsActivity.class.getName() + '.'; @@ -83,14 +83,6 @@ public class SettingsActivity extends BaseActivity { getSupportFragmentManager().beginTransaction() .add(R.id.container, new SettingsFragment()).commit(); } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - WindowCompat.setDecorFitsSystemWindows(getWindow(), false); - ViewCompat.setOnApplyWindowInsetsListener(binding.getRoot(), (v, insets) -> { - Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); - binding.getRoot().setPadding(insets1.left, insets1.top, insets1.right, 0); - return insets; - }); - } if (Constants.getXposedVersion() == null) { Snackbar.make(binding.snackbar, R.string.lsposed_not_active, Snackbar.LENGTH_LONG).show(); } @@ -396,7 +388,7 @@ public class SettingsActivity extends BaseActivity { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { RecyclerView recyclerView = getListView(); recyclerView.setClipToPadding(false); - recyclerView.setEdgeEffectFactory(new RecyclerViewBugFixed.AlwaysClipToPaddingEdgeEffectFactory()); + RecyclerViewKt.fixEdgeEffect(recyclerView, false, true); ViewCompat.setOnApplyWindowInsetsListener(recyclerView, (v, insets) -> { Insets insets1 = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); v.setPadding(0, 0, 0, insets1.bottom); diff --git a/app/src/main/java/io/github/lsposed/manager/ui/widget/MasterSwitch.java b/app/src/main/java/io/github/lsposed/manager/ui/widget/MasterSwitch.java deleted file mode 100644 index e838341f..00000000 --- a/app/src/main/java/io/github/lsposed/manager/ui/widget/MasterSwitch.java +++ /dev/null @@ -1,105 +0,0 @@ -package io.github.lsposed.manager.ui.widget; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.StateListDrawable; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.Checkable; -import android.widget.FrameLayout; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.SwitchCompat; - -import io.github.lsposed.manager.R; - -public class MasterSwitch extends FrameLayout implements View.OnClickListener, Checkable { - - private SwitchCompat switchCompat; - - private OnCheckedChangeListener listener; - - private boolean isChecked; - - public MasterSwitch(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - init(context, attrs); - } - - public MasterSwitch(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(context, attrs); - } - - public MasterSwitch(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - init(context, attrs); - } - - private void init(Context context, AttributeSet attrs) { - LayoutInflater inflater = LayoutInflater.from(getContext()); - inflater.inflate(R.layout.master_switch, this, true); - - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MasterSwitch); - int colorOn = a.getColor(R.styleable.MasterSwitch_masterSwitchBackgroundOn, 0); - int colorOff = a.getColor(R.styleable.MasterSwitch_masterSwitchBackgroundOff, 0); - a.recycle(); - - StateListDrawable drawable = new StateListDrawable(); - drawable.addState(new int[]{android.R.attr.state_selected}, new ColorDrawable(colorOn)); - drawable.addState(new int[]{}, new ColorDrawable(colorOff)); - setBackground(drawable); - - TextView masterTitle = findViewById(android.R.id.title); - masterTitle.setText(R.string.enable_module); - switchCompat = findViewById(R.id.switchWidget); - - setOnClickListener(this); - } - - private void updateViews() { - if (switchCompat != null) { - setSelected(isChecked); - switchCompat.setChecked(isChecked); - } - } - - @Override - public boolean isChecked() { - return isChecked; - } - - @Override - public void toggle() { - setChecked(!isChecked); - } - - @Override - public void setChecked(boolean checked) { - final boolean changed = isChecked != checked; - if (changed) { - isChecked = checked; - updateViews(); - if (listener != null) { - listener.onCheckedChanged(checked); - } - } - } - - public void setOnCheckedChangedListener(OnCheckedChangeListener listener) { - this.listener = listener; - } - - public static abstract class OnCheckedChangeListener { - public abstract void onCheckedChanged(boolean checked); - } - - @Override - public void onClick(View v) { - toggle(); - } -} diff --git a/app/src/main/java/io/github/lsposed/manager/ui/widget/RecyclerViewBugFixed.java b/app/src/main/java/io/github/lsposed/manager/ui/widget/RecyclerViewBugFixed.java deleted file mode 100644 index 39561e5c..00000000 --- a/app/src/main/java/io/github/lsposed/manager/ui/widget/RecyclerViewBugFixed.java +++ /dev/null @@ -1,83 +0,0 @@ -package io.github.lsposed.manager.ui.widget; - -import android.content.Context; -import android.graphics.Canvas; -import android.util.AttributeSet; -import android.widget.EdgeEffect; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.RecyclerView; - -import me.zhanghai.android.fastscroll.FixItemDecorationRecyclerView; - -public class RecyclerViewBugFixed extends FixItemDecorationRecyclerView { - - - public RecyclerViewBugFixed(@NonNull Context context) { - super(context); - setEdgeEffectFactory(getClipToPadding() ? new EdgeEffectFactory() : new AlwaysClipToPaddingEdgeEffectFactory()); - } - - public RecyclerViewBugFixed(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - setEdgeEffectFactory(getClipToPadding() ? new EdgeEffectFactory() : new AlwaysClipToPaddingEdgeEffectFactory()); - } - - public RecyclerViewBugFixed(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - setEdgeEffectFactory(getClipToPadding() ? new EdgeEffectFactory() : new AlwaysClipToPaddingEdgeEffectFactory()); - } - - public static class AlwaysClipToPaddingEdgeEffectFactory extends RecyclerView.EdgeEffectFactory { - - @NonNull - @Override - protected EdgeEffect createEdgeEffect(@NonNull RecyclerView view, int direction) { - return new EdgeEffect(view.getContext()) { - private boolean ensureSize = false; - - private void ensureSize() { - if (ensureSize) return; - ensureSize = true; - switch (direction) { - case DIRECTION_LEFT: - case DIRECTION_RIGHT: - setSize(view.getMeasuredHeight() - view.getPaddingTop() - view.getPaddingBottom(), - view.getMeasuredWidth() - view.getPaddingLeft() - view.getPaddingRight()); - break; - case DIRECTION_TOP: - case DIRECTION_BOTTOM: - setSize(view.getMeasuredWidth() - view.getPaddingLeft() - view.getPaddingRight(), - view.getMeasuredHeight() - view.getPaddingTop() - view.getPaddingBottom()); - break; - } - } - - @Override - public boolean draw(Canvas c) { - ensureSize(); - - int restore = c.save(); - switch (direction) { - case DIRECTION_LEFT: - c.translate(view.getPaddingBottom(), 0f); - break; - case DIRECTION_TOP: - c.translate(view.getPaddingLeft(), view.getPaddingTop()); - break; - case DIRECTION_RIGHT: - c.translate(-view.getPaddingTop(), 0f); - break; - case DIRECTION_BOTTOM: - c.translate(view.getPaddingRight(), view.getPaddingBottom()); - break; - } - boolean res = super.draw(c); - c.restoreToCount(restore); - return res; - } - }; - } - } -} diff --git a/app/src/main/java/io/github/lsposed/manager/util/InsetsViewInflater.java b/app/src/main/java/io/github/lsposed/manager/util/InsetsViewInflater.java new file mode 100644 index 00000000..e27521e5 --- /dev/null +++ b/app/src/main/java/io/github/lsposed/manager/util/InsetsViewInflater.java @@ -0,0 +1,44 @@ +/* + * This file is part of EdXposed. + * + * EdXposed 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. + * + * EdXposed 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 EdXposed. If not, see . + * + * Copyright (C) 2020 EdXposed Contributors + * Copyright (C) 2021 EdXposed Contributors + */ + +package io.github.lsposed.manager.util; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; + +import androidx.appcompat.app.AppCompatDelegate; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import rikka.insets.WindowInsetsHelper; +import rikka.layoutinflater.view.LayoutInflaterFactory; + +public class InsetsViewInflater extends LayoutInflaterFactory { + public InsetsViewInflater(@NotNull AppCompatDelegate delegate) { + super(delegate); + } + + @Override + public void onViewCreated(@NotNull View view, @Nullable View parent, @NotNull String name, @NotNull Context context, @NotNull AttributeSet attrs) { + WindowInsetsHelper.attach(view, attrs); + } +} diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 7f612f4a..43155cf1 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -4,7 +4,10 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/snackbar" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + app:consumeSystemWindowsInsets="top|start|end" + app:edgeToEdge="true" + app:fitSystemWindowsInsets="top|start|end"> + android:layout_height="match_parent" + app:consumeSystemWindowsInsets="top|start|end" + app:edgeToEdge="true" + app:fitSystemWindowsInsets="top|start|end"> - + app:switchOnText="@string/enable_module" + app:switchOffText="@string/enable_module" /> - + android:clipToPadding="false" + app:fitSystemWindowsInsets="bottom" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_logs.xml b/app/src/main/res/layout/activity_logs.xml index a7d179a8..5365c5c8 100644 --- a/app/src/main/res/layout/activity_logs.xml +++ b/app/src/main/res/layout/activity_logs.xml @@ -3,7 +3,10 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/snackbar" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + app:consumeSystemWindowsInsets="top|start|end" + app:edgeToEdge="true" + app:fitSystemWindowsInsets="top|start|end"> - + android:clipToPadding="false" + app:fitSystemWindowsInsets="bottom" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index f51b56d3..80280d1e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -3,7 +3,10 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/snackbar" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + app:consumeSystemWindowsInsets="start|end" + app:edgeToEdge="true" + app:fitSystemWindowsInsets="start|end"> + android:layout_height="match_parent" + app:consumeSystemWindowsInsets="top|start|end" + app:edgeToEdge="true" + app:fitSystemWindowsInsets="top|start|end"> - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index f79b5d52..77160443 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -10,5 +10,9 @@ @drawable/item_background_md2 @drawable/item_background_md2 true + @style/Widget.SwitchBar + @style/ThemeOverlay.SwitchBar + @color/switchbar_background_dark + @color/switchbar_background_dark \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 085c329a..7aedc76e 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -6,11 +6,4 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 99d968c6..7a72a926 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -21,6 +21,10 @@ @style/Widget.MaterialComponents.TabLayout false + @style/Widget.SwitchBar.Light + @style/ThemeOverlay.SwitchBar + @color/switchbar_background_light + @color/switchbar_background_light - - - - -