Allow modules to display under the nav bar.

pull/27/head
Fox2Code 4 years ago
parent b112330c9a
commit 06fc2ab968

@ -56,6 +56,8 @@ dependencies {
implementation 'androidx.webkit:webkit:1.4.0'
implementation 'com.google.android.material:material:1.5.0'
implementation "com.mikepenz:aboutlibraries:${latestAboutLibsRelease}"
implementation "dev.rikka.rikkax.layoutinflater:layoutinflater:1.2.0"
implementation "dev.rikka.rikkax.insets:insets:1.1.1"
// Utils
implementation 'com.squareup.okhttp3:okhttp-dnsoverhttps:4.9.3'

@ -12,6 +12,7 @@ import android.os.Bundle;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import com.fox2code.mmm.compat.CompatActivity;
@ -53,6 +54,9 @@ public class MainActivity extends CompatActivity implements SwipeRefreshLayout.O
});
setContentView(R.layout.activity_main);
this.setTitle(R.string.app_name);
this.getWindow().setFlags(
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
this.progressIndicator = findViewById(R.id.progress_bar);
this.swipeRefreshLayout = findViewById(R.id.swipe_refresh);
this.swipeRefreshBlocker = Long.MAX_VALUE;
@ -86,6 +90,7 @@ public class MainActivity extends CompatActivity implements SwipeRefreshLayout.O
});
this.searchView.setEnabled(false); // Enabled later
this.cardIconifyUpdate();
this.updateScreenInsets();
InstallerInitializer.tryGetMagiskPathAsync(new InstallerInitializer.Callback() {
@Override
public void onPathReceived(String path) {
@ -109,7 +114,7 @@ public class MainActivity extends CompatActivity implements SwipeRefreshLayout.O
public void commonNext() {
swipeRefreshBlocker = System.currentTimeMillis() + 5_000L;
moduleViewListBuilder.setFooterPx(searchCard.getHeight()); // Fix an edge case
updateScreenInsets(); // Fix an edge case
if (MainApplication.isShowcaseMode())
moduleViewListBuilder.addNotification(NotificationType.SHOWCASE_MODE);
moduleViewListBuilder.applyTo(moduleList, moduleViewAdapter);
@ -171,7 +176,11 @@ public class MainActivity extends CompatActivity implements SwipeRefreshLayout.O
theme.resolveAttribute(backgroundAttr, value, true);
this.searchCard.setCardBackgroundColor(value.data);
this.searchCard.setAlpha(iconified ? 0.70F : 1F);
this.moduleViewListBuilder.setFooterPx(this.searchCard.getHeight());
}
private void updateScreenInsets() {
this.moduleViewListBuilder.setFooterPx(
this.getNavigationBarHeight() + this.searchCard.getHeight());
}
@Override
@ -184,6 +193,7 @@ public class MainActivity extends CompatActivity implements SwipeRefreshLayout.O
this.searchView.clearFocus();
this.searchView.setIconified(true);
this.cardIconifyUpdate();
this.updateScreenInsets();
this.moduleViewListBuilder.setQuery(null);
Log.i(TAG, "Item After");
this.moduleViewListBuilder.refreshNotificationsUI(this.moduleViewAdapter);

@ -13,10 +13,13 @@ import android.view.MenuItem;
import android.view.View;
import androidx.annotation.CallSuper;
import androidx.annotation.Dimension;
import androidx.annotation.DrawableRes;
import androidx.annotation.Nullable;
import androidx.annotation.Px;
import androidx.annotation.StyleRes;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment;
import com.fox2code.mmm.Constants;
@ -25,6 +28,9 @@ import com.fox2code.mmm.R;
import java.util.Locale;
import java.util.Objects;
import rikka.insets.WindowInsetsHelper;
import rikka.layoutinflater.view.LayoutInflaterFactory;
/**
* I will probably outsource this to a separate library later
*/
@ -55,6 +61,10 @@ public class CompatActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
if (!this.onCreateCalled) {
this.getLayoutInflater().setFactory2(new LayoutInflaterFactory(this.getDelegate())
.addOnViewCreatedListener(WindowInsetsHelper.Companion.getLISTENER()));
}
Application application = this.getApplication();
if (application instanceof ApplicationCallbacks) {
((ApplicationCallbacks) application).onCreateCompatActivity(this);
@ -151,6 +161,38 @@ public class CompatActivity extends AppCompatActivity {
}
}
@Dimension @Px
public int getActionBarHeight() {
androidx.appcompat.app.ActionBar compatActionBar;
try {
compatActionBar = this.getSupportActionBar();
} catch (Exception e) {
Log.e(TAG, "Failed to call getSupportActionBar", e);
compatActionBar = null; // Allow fallback to builtin actionBar.
}
if (compatActionBar != null) {
return compatActionBar.isShowing() ? compatActionBar.getHeight() : 0;
} else {
android.app.ActionBar actionBar = this.getActionBar();
return actionBar != null && actionBar.isShowing() ? actionBar.getHeight() : 0;
}
}
public int getNavigationBarHeight() { // How to improve this?
int height = WindowInsetsCompat.CONSUMED.getInsets(
WindowInsetsCompat.Type.navigationBars()).bottom;
if (height == 0) { // Fallback to system resources
int id = Resources.getSystem().getIdentifier(
"config_showNavigationBar", "bool", "android");
if (id > 0 && Resources.getSystem().getBoolean(id)) {
id = Resources.getSystem().getIdentifier(
"navigation_bar_height", "dimen", "android");
if (id > 0) return Resources.getSystem().getDimensionPixelSize(id);
}
}
return height;
}
public void setActionBarExtraMenuButton(@DrawableRes int drawableResId,
MenuItem.OnMenuItemClickListener menuClickListener) {
Objects.requireNonNull(menuClickListener);

@ -6,16 +6,16 @@ import android.util.DisplayMetrics;
import androidx.annotation.Dimension;
import androidx.annotation.Px;
public class CompatDisplay {
public final class CompatDisplay {
@Dimension @Px
public static int dpToPixel(@Dimension(unit = Dimension.DP) int dp){
public static int dpToPixel(@Dimension(unit = Dimension.DP) float dp){
return (int) (dp * ((float) Resources.getSystem().getDisplayMetrics()
.densityDpi / DisplayMetrics.DENSITY_DEFAULT));
}
@Dimension(unit = Dimension.DP)
public static int pixelsToDp(@Dimension @Px int px){
return (int) (px / ((float) Resources.getSystem().getDisplayMetrics()
public static float pixelsToDp(@Dimension @Px int px){
return (px / ((float) Resources.getSystem().getDisplayMetrics()
.densityDpi / DisplayMetrics.DENSITY_DEFAULT));
}
}

@ -4,6 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:fitsSystemWindowsInsets="top"
tools:context=".MainActivity">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
@ -17,7 +18,8 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/module_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent"
app:edgeToEdge="true" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<com.google.android.material.progressindicator.LinearProgressIndicator
@ -40,7 +42,8 @@
android:gravity="center_vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
app:layout_constraintBottom_toBottomOf="parent"
app:fitsSystemWindowsInsets="bottom">
<androidx.cardview.widget.CardView
android:id="@+id/search_card"
android:layout_gravity="center"

Loading…
Cancel
Save