Skip to content

Commit 8b4d21a

Browse files
Bump library version to 0.2.4
1 parent 77b9a15 commit 8b4d21a

File tree

3 files changed

+78
-10
lines changed

3 files changed

+78
-10
lines changed

app/src/main/java/com/webileapps/protect/sample/MainActivity.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,16 @@ class MainActivity : AppActivity() {
3333
SecurityChecker.SecurityCheckState.WARNING, // networkSecurityCheck
3434
SecurityChecker.SecurityCheckState.WARNING, // screenSharingCheck
3535
SecurityChecker.SecurityCheckState.WARNING, // keyloggerCheck
36-
SecurityChecker.SecurityCheckState.WARNING, // ongoingCallCheck
3736
SecurityChecker.SecurityCheckState.WARNING, // appSignatureCheck
37+
SecurityChecker.SecurityCheckState.WARNING, // ongoingCallCheck
3838
"com.webileapps.protect.sample", // expectedPackageName
39-
"2A36434023EECADABE4F43B09C4BF95AB2594256BD0A2577424B85BC2C6E0CBB" // expectedSignature
39+
"2A36434023EECADABE4F43B09C4BF95AB2594256BD0A2577424B85BC2C6E0CBB", // expectedSignature
40+
"Critical Alert!", // criticalDialogTitle
41+
"Heads Up!", // warningDialogTitle
42+
"Exit App", // criticalDialogPositiveButton
43+
"Ignore Warning", // warningDialogPositiveButton
44+
"Cancel", // criticalDialogNegativeButton
45+
null // warningDialogNegativeButton
4046
)
4147
)
4248

protect/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44
}
55

66
group = 'com.github.webileapps'
7-
version = '0.2.3'
7+
version = '0.2.4'
88

99
android {
1010
namespace 'com.webileapps.safeguard'
@@ -57,7 +57,7 @@ afterEvaluate {
5757

5858
groupId = 'com.github.webileapps'
5959
artifactId = 'safeguard'
60-
version = '0.2.3'
60+
version = '0.2.4'
6161

6262
pom {
6363
name = 'Safeguard'

protect/src/main/java/com/webileapps/safeguard/SecurityChecker.java

Lines changed: 68 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,21 @@ public static class SecurityConfig {
6161
private final SecurityCheckState keyloggerCheck;
6262
private final SecurityCheckState appSignature;
6363
private final SecurityCheckState ongoingCallCheck;
64+
65+
// Customizable dialog options with defaults
66+
private String criticalDialogTitle = "Security Error";
67+
private String warningDialogTitle = "Security Warning";
68+
private String criticalDialogPositiveButton = "Quit";
69+
private String warningDialogPositiveButton = "Continue Anyway";
70+
private String criticalDialogNegativeButton = null;
71+
private String warningDialogNegativeButton = null;
72+
73+
public String getCriticalDialogTitle() { return criticalDialogTitle; }
74+
public String getWarningDialogTitle() { return warningDialogTitle; }
75+
public String getCriticalDialogPositiveButton() { return criticalDialogPositiveButton; }
76+
public String getWarningDialogPositiveButton() { return warningDialogPositiveButton; }
77+
public String getCriticalDialogNegativeButton() { return criticalDialogNegativeButton; }
78+
public String getWarningDialogNegativeButton() { return warningDialogNegativeButton; }
6479
private final String expectedPackageName;
6580
private final String expectedSignature;
6681

@@ -90,10 +105,38 @@ public SecurityConfig(
90105
SecurityCheckState networkSecurityCheck,
91106
SecurityCheckState screenSharingCheck,
92107
SecurityCheckState keyloggerCheck,
93-
SecurityCheckState ongoingCallCheck,
94108
SecurityCheckState appSignature,
109+
SecurityCheckState ongoingCallCheck,
95110
String expectedPackageName,
96111
String expectedSignature
112+
) {
113+
this(rootCheck, developerOptionsCheck, malwareCheck, tamperingCheck, appSpoofingCheck, networkSecurityCheck,
114+
screenSharingCheck, keyloggerCheck, appSignature, ongoingCallCheck, expectedPackageName, expectedSignature,
115+
"Security Error", "Security Warning", "Quit", "Continue Anyway", null, null);
116+
}
117+
118+
/**
119+
* Extended constructor to allow dialog customization at runtime.
120+
*/
121+
public SecurityConfig(
122+
SecurityCheckState rootCheck,
123+
SecurityCheckState developerOptionsCheck,
124+
SecurityCheckState malwareCheck,
125+
SecurityCheckState tamperingCheck,
126+
SecurityCheckState appSpoofingCheck,
127+
SecurityCheckState networkSecurityCheck,
128+
SecurityCheckState screenSharingCheck,
129+
SecurityCheckState keyloggerCheck,
130+
SecurityCheckState appSignature,
131+
SecurityCheckState ongoingCallCheck,
132+
String expectedPackageName,
133+
String expectedSignature,
134+
String criticalDialogTitle,
135+
String warningDialogTitle,
136+
String criticalDialogPositiveButton,
137+
String warningDialogPositiveButton,
138+
String criticalDialogNegativeButton,
139+
String warningDialogNegativeButton
97140
) {
98141
this.rootCheck = rootCheck;
99142
this.developerOptionsCheck = developerOptionsCheck;
@@ -107,6 +150,12 @@ public SecurityConfig(
107150
this.ongoingCallCheck = ongoingCallCheck;
108151
this.expectedPackageName = expectedPackageName;
109152
this.expectedSignature = expectedSignature;
153+
this.criticalDialogTitle = criticalDialogTitle;
154+
this.warningDialogTitle = warningDialogTitle;
155+
this.criticalDialogPositiveButton = criticalDialogPositiveButton;
156+
this.warningDialogPositiveButton = warningDialogPositiveButton;
157+
this.criticalDialogNegativeButton = criticalDialogNegativeButton;
158+
this.warningDialogNegativeButton = warningDialogNegativeButton;
110159
}
111160

112161
// Getters
@@ -302,10 +351,15 @@ private void showNextDialog(Context context) {
302351
isShowingDialog = true;
303352
SecurityDialogInfo dialogInfo = dialogQueue.remove(0);
304353

305-
AlertDialog dialog = new AlertDialog.Builder(context)
306-
.setTitle(dialogInfo.isCritical ? "Security Error" : "Security Warning")
354+
// Use dialog options directly from config
355+
String title = dialogInfo.isCritical ? config.getCriticalDialogTitle() : config.getWarningDialogTitle();
356+
String positiveButton = dialogInfo.isCritical ? config.getCriticalDialogPositiveButton() : config.getWarningDialogPositiveButton();
357+
String negativeButton = dialogInfo.isCritical ? config.getCriticalDialogNegativeButton() : config.getWarningDialogNegativeButton();
358+
359+
AlertDialog.Builder builder = new AlertDialog.Builder(context)
360+
.setTitle(title)
307361
.setMessage(dialogInfo.message)
308-
.setPositiveButton(dialogInfo.isCritical ? "Quit" : "Continue Anyway", (dialogInterface, which) -> {
362+
.setPositiveButton(positiveButton, (dialogInterface, which) -> {
309363
dialogInterface.dismiss();
310364
if (dialogInfo.isCritical) {
311365
System.exit(0);
@@ -317,8 +371,16 @@ private void showNextDialog(Context context) {
317371
showNextDialog(context);
318372
}
319373
})
320-
.setCancelable(!dialogInfo.isCritical)
321-
.create();
374+
.setCancelable(!dialogInfo.isCritical);
375+
if (negativeButton != null && !negativeButton.isEmpty()) {
376+
builder.setNegativeButton(negativeButton, (dialogInterface, which) -> {
377+
dialogInterface.dismiss();
378+
// Optionally handle negative button click here if needed
379+
isShowingDialog = false;
380+
showNextDialog(context);
381+
});
382+
}
383+
AlertDialog dialog = builder.create();
322384

323385
dialog.setOnDismissListener(dialogInterface -> {
324386
if (!dialogInfo.isCritical) {

0 commit comments

Comments
 (0)