Skip to content
This repository was archived by the owner on May 4, 2023. It is now read-only.

Commit 06fc2ab

Browse files
committed
Allow modules to display under the nav bar.
1 parent b112330 commit 06fc2ab

File tree

5 files changed

+65
-8
lines changed

5 files changed

+65
-8
lines changed

app/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ dependencies {
5656
implementation 'androidx.webkit:webkit:1.4.0'
5757
implementation 'com.google.android.material:material:1.5.0'
5858
implementation "com.mikepenz:aboutlibraries:${latestAboutLibsRelease}"
59+
implementation "dev.rikka.rikkax.layoutinflater:layoutinflater:1.2.0"
60+
implementation "dev.rikka.rikkax.insets:insets:1.1.1"
5961

6062
// Utils
6163
implementation 'com.squareup.okhttp3:okhttp-dnsoverhttps:4.9.3'

app/src/main/java/com/fox2code/mmm/MainActivity.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import android.util.Log;
1313
import android.util.TypedValue;
1414
import android.view.View;
15+
import android.view.WindowManager;
1516
import android.view.inputmethod.EditorInfo;
1617

1718
import com.fox2code.mmm.compat.CompatActivity;
@@ -53,6 +54,9 @@ protected void onCreate(Bundle savedInstanceState) {
5354
});
5455
setContentView(R.layout.activity_main);
5556
this.setTitle(R.string.app_name);
57+
this.getWindow().setFlags(
58+
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
59+
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
5660
this.progressIndicator = findViewById(R.id.progress_bar);
5761
this.swipeRefreshLayout = findViewById(R.id.swipe_refresh);
5862
this.swipeRefreshBlocker = Long.MAX_VALUE;
@@ -86,6 +90,7 @@ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newStat
8690
});
8791
this.searchView.setEnabled(false); // Enabled later
8892
this.cardIconifyUpdate();
93+
this.updateScreenInsets();
8994
InstallerInitializer.tryGetMagiskPathAsync(new InstallerInitializer.Callback() {
9095
@Override
9196
public void onPathReceived(String path) {
@@ -109,7 +114,7 @@ public void onFailure(int error) {
109114

110115
public void commonNext() {
111116
swipeRefreshBlocker = System.currentTimeMillis() + 5_000L;
112-
moduleViewListBuilder.setFooterPx(searchCard.getHeight()); // Fix an edge case
117+
updateScreenInsets(); // Fix an edge case
113118
if (MainApplication.isShowcaseMode())
114119
moduleViewListBuilder.addNotification(NotificationType.SHOWCASE_MODE);
115120
moduleViewListBuilder.applyTo(moduleList, moduleViewAdapter);
@@ -171,7 +176,11 @@ private void cardIconifyUpdate() {
171176
theme.resolveAttribute(backgroundAttr, value, true);
172177
this.searchCard.setCardBackgroundColor(value.data);
173178
this.searchCard.setAlpha(iconified ? 0.70F : 1F);
174-
this.moduleViewListBuilder.setFooterPx(this.searchCard.getHeight());
179+
}
180+
181+
private void updateScreenInsets() {
182+
this.moduleViewListBuilder.setFooterPx(
183+
this.getNavigationBarHeight() + this.searchCard.getHeight());
175184
}
176185

177186
@Override
@@ -184,6 +193,7 @@ public void refreshUI() {
184193
this.searchView.clearFocus();
185194
this.searchView.setIconified(true);
186195
this.cardIconifyUpdate();
196+
this.updateScreenInsets();
187197
this.moduleViewListBuilder.setQuery(null);
188198
Log.i(TAG, "Item After");
189199
this.moduleViewListBuilder.refreshNotificationsUI(this.moduleViewAdapter);

app/src/main/java/com/fox2code/mmm/compat/CompatActivity.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,13 @@
1313
import android.view.View;
1414

1515
import androidx.annotation.CallSuper;
16+
import androidx.annotation.Dimension;
1617
import androidx.annotation.DrawableRes;
1718
import androidx.annotation.Nullable;
19+
import androidx.annotation.Px;
1820
import androidx.annotation.StyleRes;
1921
import androidx.appcompat.app.AppCompatActivity;
22+
import androidx.core.view.WindowInsetsCompat;
2023
import androidx.fragment.app.Fragment;
2124

2225
import com.fox2code.mmm.Constants;
@@ -25,6 +28,9 @@
2528
import java.util.Locale;
2629
import java.util.Objects;
2730

31+
import rikka.insets.WindowInsetsHelper;
32+
import rikka.layoutinflater.view.LayoutInflaterFactory;
33+
2834
/**
2935
* I will probably outsource this to a separate library later
3036
*/
@@ -55,6 +61,10 @@ public boolean onBackPressed(CompatActivity compatActivity) {
5561

5662
@Override
5763
protected void onCreate(@Nullable Bundle savedInstanceState) {
64+
if (!this.onCreateCalled) {
65+
this.getLayoutInflater().setFactory2(new LayoutInflaterFactory(this.getDelegate())
66+
.addOnViewCreatedListener(WindowInsetsHelper.Companion.getLISTENER()));
67+
}
5868
Application application = this.getApplication();
5969
if (application instanceof ApplicationCallbacks) {
6070
((ApplicationCallbacks) application).onCreateCompatActivity(this);
@@ -151,6 +161,38 @@ public void hideActionBar() {
151161
}
152162
}
153163

164+
@Dimension @Px
165+
public int getActionBarHeight() {
166+
androidx.appcompat.app.ActionBar compatActionBar;
167+
try {
168+
compatActionBar = this.getSupportActionBar();
169+
} catch (Exception e) {
170+
Log.e(TAG, "Failed to call getSupportActionBar", e);
171+
compatActionBar = null; // Allow fallback to builtin actionBar.
172+
}
173+
if (compatActionBar != null) {
174+
return compatActionBar.isShowing() ? compatActionBar.getHeight() : 0;
175+
} else {
176+
android.app.ActionBar actionBar = this.getActionBar();
177+
return actionBar != null && actionBar.isShowing() ? actionBar.getHeight() : 0;
178+
}
179+
}
180+
181+
public int getNavigationBarHeight() { // How to improve this?
182+
int height = WindowInsetsCompat.CONSUMED.getInsets(
183+
WindowInsetsCompat.Type.navigationBars()).bottom;
184+
if (height == 0) { // Fallback to system resources
185+
int id = Resources.getSystem().getIdentifier(
186+
"config_showNavigationBar", "bool", "android");
187+
if (id > 0 && Resources.getSystem().getBoolean(id)) {
188+
id = Resources.getSystem().getIdentifier(
189+
"navigation_bar_height", "dimen", "android");
190+
if (id > 0) return Resources.getSystem().getDimensionPixelSize(id);
191+
}
192+
}
193+
return height;
194+
}
195+
154196
public void setActionBarExtraMenuButton(@DrawableRes int drawableResId,
155197
MenuItem.OnMenuItemClickListener menuClickListener) {
156198
Objects.requireNonNull(menuClickListener);

app/src/main/java/com/fox2code/mmm/compat/CompatDisplay.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@
66
import androidx.annotation.Dimension;
77
import androidx.annotation.Px;
88

9-
public class CompatDisplay {
9+
public final class CompatDisplay {
1010
@Dimension @Px
11-
public static int dpToPixel(@Dimension(unit = Dimension.DP) int dp){
11+
public static int dpToPixel(@Dimension(unit = Dimension.DP) float dp){
1212
return (int) (dp * ((float) Resources.getSystem().getDisplayMetrics()
1313
.densityDpi / DisplayMetrics.DENSITY_DEFAULT));
1414
}
1515

1616
@Dimension(unit = Dimension.DP)
17-
public static int pixelsToDp(@Dimension @Px int px){
18-
return (int) (px / ((float) Resources.getSystem().getDisplayMetrics()
17+
public static float pixelsToDp(@Dimension @Px int px){
18+
return (px / ((float) Resources.getSystem().getDisplayMetrics()
1919
.densityDpi / DisplayMetrics.DENSITY_DEFAULT));
2020
}
2121
}

app/src/main/res/layout/activity_main.xml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
xmlns:tools="http://schemas.android.com/tools"
55
android:layout_width="match_parent"
66
android:layout_height="match_parent"
7+
app:fitsSystemWindowsInsets="top"
78
tools:context=".MainActivity">
89

910
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
@@ -17,7 +18,8 @@
1718
<androidx.recyclerview.widget.RecyclerView
1819
android:id="@+id/module_list"
1920
android:layout_width="match_parent"
20-
android:layout_height="match_parent" />
21+
android:layout_height="match_parent"
22+
app:edgeToEdge="true" />
2123
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
2224

2325
<com.google.android.material.progressindicator.LinearProgressIndicator
@@ -40,7 +42,8 @@
4042
android:gravity="center_vertical"
4143
app:layout_constraintEnd_toEndOf="parent"
4244
app:layout_constraintStart_toStartOf="parent"
43-
app:layout_constraintBottom_toBottomOf="parent">
45+
app:layout_constraintBottom_toBottomOf="parent"
46+
app:fitsSystemWindowsInsets="bottom">
4447
<androidx.cardview.widget.CardView
4548
android:id="@+id/search_card"
4649
android:layout_gravity="center"

0 commit comments

Comments
 (0)