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

Commit ab5361a

Browse files
committed
Many improvements
- [CODE] Change `distributionSha256Sum` - [DESIGN] Rework markdown activity with blur support (beta) - [API] added `this.getActionBarHeight(this);` to get the right action bar height (old one is still available) - [CHIPS (MD)] Added chips for `Min. Android [...]`,`Max. Android [...]`, `Min. Magisk "[...]"` - [CHIPS (MD)] Added an Android version parser
1 parent fa46b79 commit ab5361a

File tree

7 files changed

+217
-86
lines changed

7 files changed

+217
-86
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ protected void onCreate(Bundle savedInstanceState) {
105105
this.moduleList.setItemViewCacheSize(4); // Default is 2
106106
OverScrollManager.install(this.moduleList, this);
107107
this.swipeRefreshLayout.setOnRefreshListener(this);
108-
this.actionBarBlur.setBackground(this.actionBarBackground);;
108+
this.actionBarBlur.setBackground(this.actionBarBackground);
109109
this.actionBarBlur.setupWith(this.moduleList).setFrameClearDrawable(
110110
this.getWindow().getDecorView().getBackground())
111111
.setBlurAlgorithm(new RenderScriptBlur(this))

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

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,20 +55,21 @@ public class CompatActivity extends AppCompatActivity {
5555
private static final String TAG = "CompatActivity";
5656
public static final CompatActivity.OnBackPressedCallback DISABLE_BACK_BUTTON =
5757
new CompatActivity.OnBackPressedCallback() {
58-
@Override
59-
public boolean onBackPressed(CompatActivity compatActivity) {
60-
compatActivity.setOnBackPressedCallback(this);
61-
return true;
62-
}
63-
};
58+
@Override
59+
public boolean onBackPressed(CompatActivity compatActivity) {
60+
compatActivity.setOnBackPressedCallback(this);
61+
return true;
62+
}
63+
};
6464

6565
final WeakReference<CompatActivity> selfReference;
6666
private final CompatConfigHelper compatConfigHelper = new CompatConfigHelper(this);
6767
private CompatActivity.OnActivityResultCallback onActivityResultCallback;
6868
private CompatActivity.OnBackPressedCallback onBackPressedCallback;
6969
private MenuItem.OnMenuItemClickListener menuClickListener;
7070
private CharSequence menuContentDescription;
71-
@StyleRes private int setThemeDynamic = 0;
71+
@StyleRes
72+
private int setThemeDynamic = 0;
7273
private boolean onCreateCalledOnce = false;
7374
private boolean onCreateCalled = false;
7475
private boolean isRefreshUi = false;
@@ -221,7 +222,8 @@ public View getActionBarView() {
221222
}
222223
}
223224

224-
@Dimension @Px
225+
@Dimension
226+
@Px
225227
public int getActionBarHeight() {
226228
androidx.appcompat.app.ActionBar compatActionBar;
227229
try {
@@ -247,6 +249,15 @@ public int getActionBarHeight() {
247249
}
248250
}
249251

252+
public int getActionBarHeight(Activity activity) {
253+
TypedValue tv = new TypedValue();
254+
int actionBarHeight = 0;
255+
if (activity.getTheme().resolveAttribute(R.attr.actionBarSize, tv, true)) {
256+
actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
257+
}
258+
return actionBarHeight;
259+
}
260+
250261
public void setActionBarBackground(Drawable drawable) {
251262
androidx.appcompat.app.ActionBar compatActionBar;
252263
try {
@@ -264,7 +275,8 @@ public void setActionBarBackground(Drawable drawable) {
264275
}
265276
}
266277

267-
@Dimension @Px
278+
@Dimension
279+
@Px
268280
public int getStatusBarHeight() {
269281
int height = WindowInsetsCompat.CONSUMED.getInsets(
270282
WindowInsetsCompat.Type.statusBars()).top;
@@ -476,7 +488,7 @@ void propagateResourcesOverride(boolean forceEnglish, Boolean nightModeOverride)
476488
this.checkResourcesOverrides(forceEnglish, nightModeOverride);
477489
}
478490

479-
private void checkResourcesOverrides(boolean forceEnglish,Boolean nightModeOverride) {
491+
private void checkResourcesOverrides(boolean forceEnglish, Boolean nightModeOverride) {
480492
if (this.isRefreshUi || !this.onCreateCalled) return; // Wait before reload
481493
this.compatConfigHelper.checkResourcesOverrides(forceEnglish, nightModeOverride);
482494
}

app/src/main/java/com/fox2code/mmm/markdown/MarkdownActivity.java

Lines changed: 143 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,21 @@
22

33
import android.content.Intent;
44
import android.content.pm.PackageManager;
5+
import android.content.res.Configuration;
6+
import android.content.res.Resources;
57
import android.graphics.Color;
8+
import android.graphics.drawable.ColorDrawable;
9+
import android.os.Build;
610
import android.os.Bundle;
711
import android.util.Log;
812
import android.view.View;
13+
import android.view.ViewConfiguration;
914
import android.view.ViewGroup;
15+
import android.view.ViewTreeObserver;
1016
import android.view.WindowManager;
1117
import android.widget.HorizontalScrollView;
18+
import android.widget.LinearLayout;
19+
import android.widget.ScrollView;
1220
import android.widget.TextView;
1321
import android.widget.Toast;
1422

@@ -21,6 +29,7 @@
2129
import com.fox2code.mmm.R;
2230
import com.fox2code.mmm.XHooks;
2331
import com.fox2code.mmm.compat.CompatActivity;
32+
import com.fox2code.mmm.compat.CompatDisplay;
2433
import com.fox2code.mmm.utils.Http;
2534
import com.fox2code.mmm.utils.IntentHelper;
2635
import com.google.android.material.chip.Chip;
@@ -34,6 +43,7 @@
3443
import java.util.HashMap;
3544

3645
import eightbitlab.com.blurview.BlurView;
46+
import eightbitlab.com.blurview.RenderScriptBlur;
3747

3848

3949
public class MarkdownActivity extends CompatActivity {
@@ -42,6 +52,12 @@ public class MarkdownActivity extends CompatActivity {
4252
private static final String[] variants = new String[]{
4353
"readme.md", "README.MD", ".github/README.md"
4454
};
55+
private BlurView chipHolder;
56+
private TextView actionBarPadding;
57+
private BlurView actionBarBlur;
58+
private ColorDrawable anyBarBackground;
59+
private ScrollView scrollView;
60+
private LinearLayout md_layout;
4561

4662
private static byte[] getRawMarkdown(String url) throws IOException {
4763
String newUrl = redirects.get(url);
@@ -119,27 +135,38 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
119135
setContentView(R.layout.markdown_view);
120136
final ViewGroup markdownBackground = findViewById(R.id.markdownBackground);
121137
final TextView textView = findViewById(R.id.markdownView);
122-
final HorizontalScrollView chip_holder = findViewById(R.id.chip_holder);
138+
this.chipHolder = findViewById(R.id.chip_holder);
139+
this.anyBarBackground = new ColorDrawable(Color.TRANSPARENT);
140+
this.actionBarPadding = findViewById(R.id.markdown_action_bar_padding);
141+
this.actionBarBlur = findViewById(R.id.markdown_action_bar_blur);
142+
this.scrollView = findViewById(R.id.scrollView2);
143+
this.md_layout = findViewById(R.id.md_layout);
123144
final TextView footer = findViewById(R.id.markdownFooter);
124145
UiThreadHandler.handler.postDelayed(() -> // Fix footer height
125146
footer.setMinHeight(this.getNavigationBarHeight()), 1L);
147+
this.actionBarBlur.setBackground(this.anyBarBackground);
148+
this.setupBlurView(this.chipHolder, markdownBackground, this.anyBarBackground);
149+
this.setupBlurView(this.actionBarBlur, markdownBackground, this.anyBarBackground);
150+
this.updateScreenInsets();
151+
this.updateUI();
126152

127-
// Really bad created
153+
// Really bad created (MSG by Der_Googler)
128154
if (MainApplication.isChipsDisabled()) {
129-
chip_holder.setVisibility(View.GONE);
155+
this.chipHolder.setVisibility(View.GONE);
130156
} else {
157+
this.chipHolder.setPadding(0,0,0,this.getNavigationBarHeight());
131158
// set "message" to null to disable dialog
132-
this.setChips(change_boot,
159+
this.setChip(change_boot,
133160
getString(R.string.module_can_change_boot),
134161
"This module may change the boot image");
135-
this.setChips(needs_ramdisk,
162+
this.setChip(needs_ramdisk,
136163
getString(R.string.module_needs_ramdisk),
137164
"This module need boot ramdisk to be installed");
138-
this.setChips(min_magisk, "Min. Magisk \"" + min_magisk + "\"",
165+
this.setChip(min_magisk, "Min. Magisk \"" + min_magisk + "\"",
139166
null);
140-
this.setChips(min_api, "Min. Android " + min_api,
167+
this.setChip(min_api, "Min. Android " + min_api,
141168
null);
142-
this.setChips(max_api, "Max. Android " + max_api,
169+
this.setChip(max_api, "Max. Android " + max_api,
143170
null);
144171
}
145172

@@ -171,53 +198,121 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
171198
}, "Markdown load thread").start();
172199
}
173200

174-
private void setChips(boolean bool, String title, String message) {
175-
final ChipGroup chip_group_holder = findViewById(R.id.chip_group_holder);
201+
private void setupBlurView(BlurView view, ViewGroup setupWith, ColorDrawable background) {
202+
view.setBackground(background);
203+
view.setupWith(setupWith).setFrameClearDrawable(
204+
this.getWindow().getDecorView().getBackground())
205+
.setBlurAlgorithm(new RenderScriptBlur(this))
206+
.setBlurRadius(4F).setBlurAutoUpdate(true)
207+
.setHasFixedTransformationMatrix(true);
208+
}
209+
210+
private void updateScreenInsets() {
211+
this.runOnUiThread(() -> this.updateScreenInsets(
212+
this.getResources().getConfiguration()));
213+
}
214+
215+
private void updateScreenInsets(Configuration configuration) {
216+
boolean landscape = configuration.orientation ==
217+
Configuration.ORIENTATION_LANDSCAPE;
218+
int bottomInset = (landscape ? 0 : this.getNavigationBarHeight());
219+
int statusBarHeight = getStatusBarHeight();
220+
int actionBarHeight = getActionBarHeight();
221+
int combinedBarsHeight = statusBarHeight + actionBarHeight;
222+
this.actionBarPadding.setMinHeight(combinedBarsHeight);
223+
//this.actionBarBlur.invalidate();
224+
}
225+
226+
private void updateUI() {
227+
boolean isLightMode = this.isLightTheme();
228+
int colorBackground;
229+
try {
230+
colorBackground = this.getColorCompat(
231+
android.R.attr.windowBackground);
232+
} catch (Resources.NotFoundException e) {
233+
colorBackground = this.getColorCompat(isLightMode ?
234+
R.color.white : R.color.black);
235+
}
236+
this.md_layout.setPadding(0,this.getActionBarHeight(this) + this.getStatusBarHeight(),0,this.getNavigationBarHeight() + 56);
237+
if (MainApplication.isBlurEnabled()) {
238+
this.actionBarBlur.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, this.getActionBarHeight(this) + this.getStatusBarHeight()));
239+
this.chipHolder.setBlurEnabled(true);
240+
this.anyBarBackground.setColor(ColorUtils
241+
.setAlphaComponent(colorBackground, 0x02));
242+
this.anyBarBackground.setColor(Color.TRANSPARENT);
243+
this.actionBarBlur.setBlurEnabled(true);
244+
} else {
245+
this.chipHolder.setBlurEnabled(false);
246+
this.chipHolder.setOverlayColor(Color.TRANSPARENT);
247+
this.anyBarBackground.setColor(colorBackground);
248+
this.actionBarBlur.setBlurEnabled(false);
249+
this.actionBarBlur.setOverlayColor(Color.TRANSPARENT);
250+
}
251+
}
252+
253+
private void setChip(boolean bool, String title, String message) {
176254
if (bool) {
177-
Chip chip = new Chip(this);
178-
chip.setText(title);
179-
chip.setVisibility(View.VISIBLE);
180-
if (message != null) {
181-
chip.setOnClickListener(_view -> {
182-
MaterialAlertDialogBuilder builder =
183-
new MaterialAlertDialogBuilder(this);
184-
185-
builder
186-
.setTitle(title)
187-
.setMessage(message)
188-
.setCancelable(true)
189-
.setPositiveButton(R.string.ok, (x, y) -> {
190-
x.dismiss();
191-
}).show();
255+
this.makeChip(title, message);
256+
}
257+
}
192258

193-
});
194-
}
195-
chip_group_holder.addView(chip);
259+
private void setChip(int i, String title, String message) {
260+
if (i != 0) {
261+
this.makeChip(title, message);
196262
}
197263
}
198264

199-
private void setChips(int i, String title, String message) {
265+
private void makeChip(String title, String message) {
200266
final ChipGroup chip_group_holder = findViewById(R.id.chip_group_holder);
201-
if (i != 0) {
202-
Chip chip = new Chip(this);
203-
chip.setText(title);
204-
chip.setVisibility(View.VISIBLE);
205-
if (message != null) {
206-
chip.setOnClickListener(_view -> {
207-
MaterialAlertDialogBuilder builder =
208-
new MaterialAlertDialogBuilder(this);
209-
210-
builder
211-
.setTitle(title)
212-
.setMessage(message)
213-
.setCancelable(true)
214-
.setPositiveButton(R.string.ok, (x, y) -> {
215-
x.dismiss();
216-
}).show();
267+
Chip chip = new Chip(this);
268+
chip.setText(title);
269+
chip.setVisibility(View.VISIBLE);
270+
if (message != null) {
271+
chip.setOnClickListener(_view -> {
272+
MaterialAlertDialogBuilder builder =
273+
new MaterialAlertDialogBuilder(this);
217274

218-
});
219-
}
220-
chip_group_holder.addView(chip);
275+
builder
276+
.setTitle(title)
277+
.setMessage(message)
278+
.setCancelable(true)
279+
.setPositiveButton(R.string.ok, (x, y) -> {
280+
x.dismiss();
281+
}).show();
282+
283+
});
284+
}
285+
chip_group_holder.addView(chip);
286+
}
287+
288+
private String parseAndroidVersion(int version) {
289+
switch (version) {
290+
case Build.VERSION_CODES.LOLLIPOP:
291+
return "5.0";
292+
case Build.VERSION_CODES.LOLLIPOP_MR1:
293+
return "5.1";
294+
case Build.VERSION_CODES.M:
295+
return "6.0";
296+
case Build.VERSION_CODES.N:
297+
return "7.0";
298+
case Build.VERSION_CODES.N_MR1:
299+
return "7.1";
300+
case Build.VERSION_CODES.O:
301+
return "8.0";
302+
case Build.VERSION_CODES.O_MR1:
303+
return "8.1";
304+
case Build.VERSION_CODES.P:
305+
return "9.0 (P)";
306+
case Build.VERSION_CODES.Q:
307+
return "10 (Q)";
308+
case Build.VERSION_CODES.R:
309+
return "11 (R)";
310+
case Build.VERSION_CODES.S:
311+
return "12 (S)";
312+
case Build.VERSION_CODES.S_V2:
313+
return "12L";
314+
default:
315+
return "false";
221316
}
222317
}
223318

app/src/main/java/com/fox2code/mmm/module/ActionButtonType.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,11 @@
44
import android.text.Spanned;
55
import android.util.Log;
66
import android.widget.Button;
7-
import android.widget.ImageButton;
87
import android.widget.TextView;
98
import android.widget.Toast;
109

1110
import androidx.annotation.DrawableRes;
1211
import androidx.appcompat.app.AlertDialog;
13-
import androidx.core.content.ContextCompat;
1412

1513
import com.fox2code.mmm.MainApplication;
1614
import com.fox2code.mmm.R;
@@ -21,7 +19,6 @@
2119
import com.fox2code.mmm.manager.LocalModuleInfo;
2220
import com.fox2code.mmm.manager.ModuleInfo;
2321
import com.fox2code.mmm.manager.ModuleManager;
24-
import com.fox2code.mmm.module.ModuleHolder;
2522
import com.fox2code.mmm.utils.IntentHelper;
2623
import com.google.android.material.chip.Chip;
2724
import com.google.android.material.dialog.MaterialAlertDialogBuilder;

0 commit comments

Comments
 (0)