|
13 | 13 | import android.view.View; |
14 | 14 |
|
15 | 15 | import androidx.annotation.CallSuper; |
| 16 | +import androidx.annotation.Dimension; |
16 | 17 | import androidx.annotation.DrawableRes; |
17 | 18 | import androidx.annotation.Nullable; |
| 19 | +import androidx.annotation.Px; |
18 | 20 | import androidx.annotation.StyleRes; |
19 | 21 | import androidx.appcompat.app.AppCompatActivity; |
| 22 | +import androidx.core.view.WindowInsetsCompat; |
20 | 23 | import androidx.fragment.app.Fragment; |
21 | 24 |
|
22 | 25 | import com.fox2code.mmm.Constants; |
|
25 | 28 | import java.util.Locale; |
26 | 29 | import java.util.Objects; |
27 | 30 |
|
| 31 | +import rikka.insets.WindowInsetsHelper; |
| 32 | +import rikka.layoutinflater.view.LayoutInflaterFactory; |
| 33 | + |
28 | 34 | /** |
29 | 35 | * I will probably outsource this to a separate library later |
30 | 36 | */ |
@@ -55,6 +61,10 @@ public boolean onBackPressed(CompatActivity compatActivity) { |
55 | 61 |
|
56 | 62 | @Override |
57 | 63 | protected void onCreate(@Nullable Bundle savedInstanceState) { |
| 64 | + if (!this.onCreateCalled) { |
| 65 | + this.getLayoutInflater().setFactory2(new LayoutInflaterFactory(this.getDelegate()) |
| 66 | + .addOnViewCreatedListener(WindowInsetsHelper.Companion.getLISTENER())); |
| 67 | + } |
58 | 68 | Application application = this.getApplication(); |
59 | 69 | if (application instanceof ApplicationCallbacks) { |
60 | 70 | ((ApplicationCallbacks) application).onCreateCompatActivity(this); |
@@ -151,6 +161,38 @@ public void hideActionBar() { |
151 | 161 | } |
152 | 162 | } |
153 | 163 |
|
| 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 | + |
154 | 196 | public void setActionBarExtraMenuButton(@DrawableRes int drawableResId, |
155 | 197 | MenuItem.OnMenuItemClickListener menuClickListener) { |
156 | 198 | Objects.requireNonNull(menuClickListener); |
|
0 commit comments