Skip to content

Commit b366f8d

Browse files
Merge pull request #2397 from celzero/copilot/fix-uninitialized-property-access
Fix UninitializedPropertyAccessException in AppInfoActivity click listeners
2 parents 0485007 + b847144 commit b366f8d

File tree

1 file changed

+86
-61
lines changed

1 file changed

+86
-61
lines changed

app/src/full/java/com/celzero/bravedns/ui/activity/AppInfoActivity.kt

Lines changed: 86 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -323,99 +323,111 @@ class AppInfoActivity : AppCompatActivity(R.layout.activity_app_details) {
323323
TooltipCompat.setTooltipText(b.aadCloseConnsChip, getString(R.string.close_conns_dialog_title))
324324

325325
b.aadAppSettingsBypassDnsFirewall.setOnClickListener {
326-
// show the tooltip only once when app is not bypassed (dns + firewall) earlier
327-
if (showBypassToolTip && appStatus == FirewallManager.FirewallStatus.NONE) {
328-
b.aadAppSettingsBypassDnsFirewall.performLongClick()
329-
showBypassToolTip = false
330-
return@setOnClickListener
331-
}
326+
guardAppInfoInitialized("aadAppSettingsBypassDnsFirewall") {
327+
// show the tooltip only once when app is not bypassed (dns + firewall) earlier
328+
if (showBypassToolTip && appStatus == FirewallManager.FirewallStatus.NONE) {
329+
b.aadAppSettingsBypassDnsFirewall.performLongClick()
330+
showBypassToolTip = false
331+
return@setOnClickListener
332+
}
332333

333-
if (appStatus == FirewallManager.FirewallStatus.BYPASS_DNS_FIREWALL) {
334-
updateFirewallStatus(
335-
FirewallManager.FirewallStatus.NONE,
336-
FirewallManager.ConnectionStatus.ALLOW
337-
)
338-
} else {
339-
updateFirewallStatus(
340-
FirewallManager.FirewallStatus.BYPASS_DNS_FIREWALL,
341-
FirewallManager.ConnectionStatus.ALLOW
342-
)
334+
if (appStatus == FirewallManager.FirewallStatus.BYPASS_DNS_FIREWALL) {
335+
updateFirewallStatus(
336+
FirewallManager.FirewallStatus.NONE,
337+
FirewallManager.ConnectionStatus.ALLOW
338+
)
339+
} else {
340+
updateFirewallStatus(
341+
FirewallManager.FirewallStatus.BYPASS_DNS_FIREWALL,
342+
FirewallManager.ConnectionStatus.ALLOW
343+
)
344+
}
343345
}
344346
}
345347

346348
b.aadAppSettingsBlockWifi.setOnClickListener {
347-
toggleWifi(appInfo)
348-
updateFirewallStatusUi(appStatus, connStatus)
349+
guardAppInfoInitialized("aadAppSettingsBlockWifi") {
350+
toggleWifi(appInfo)
351+
updateFirewallStatusUi(appStatus, connStatus)
352+
}
349353
}
350354

351355
b.aadAppSettingsBlockMd.setOnClickListener {
352-
toggleMobileData(appInfo)
353-
updateFirewallStatusUi(appStatus, connStatus)
356+
guardAppInfoInitialized("aadAppSettingsBlockMd") {
357+
toggleMobileData(appInfo)
358+
updateFirewallStatusUi(appStatus, connStatus)
359+
}
354360
}
355361

356362
b.aadAppSettingsBypassUniv.setOnClickListener {
357-
// change the status to allowed if already app is bypassed
358-
if (appStatus == FirewallManager.FirewallStatus.BYPASS_UNIVERSAL) {
359-
updateFirewallStatus(
360-
FirewallManager.FirewallStatus.NONE,
361-
FirewallManager.ConnectionStatus.ALLOW
362-
)
363-
} else {
364-
updateFirewallStatus(
365-
FirewallManager.FirewallStatus.BYPASS_UNIVERSAL,
366-
FirewallManager.ConnectionStatus.ALLOW
367-
)
363+
guardAppInfoInitialized("aadAppSettingsBypassUniv") {
364+
// change the status to allowed if already app is bypassed
365+
if (appStatus == FirewallManager.FirewallStatus.BYPASS_UNIVERSAL) {
366+
updateFirewallStatus(
367+
FirewallManager.FirewallStatus.NONE,
368+
FirewallManager.ConnectionStatus.ALLOW
369+
)
370+
} else {
371+
updateFirewallStatus(
372+
FirewallManager.FirewallStatus.BYPASS_UNIVERSAL,
373+
FirewallManager.ConnectionStatus.ALLOW
374+
)
375+
}
368376
}
369377
}
370378

371379
b.aadAppSettingsExclude.setOnClickListener {
372-
if (VpnController.isVpnLockdown()) {
373-
showToastUiCentered(this, getString(R.string.hsf_exclude_error), Toast.LENGTH_SHORT)
374-
return@setOnClickListener
375-
}
380+
guardAppInfoInitialized("aadAppSettingsExclude") {
381+
if (VpnController.isVpnLockdown()) {
382+
showToastUiCentered(this, getString(R.string.hsf_exclude_error), Toast.LENGTH_SHORT)
383+
return@setOnClickListener
384+
}
376385

377-
io {
378-
if (FirewallManager.isUnknownPackage(uid) && appStatus == FirewallManager.FirewallStatus.EXCLUDE) {
379-
uiCtx {
380-
showToastUiCentered(
381-
this,
382-
getString(R.string.exclude_no_package_err_toast),
383-
Toast.LENGTH_LONG
386+
io {
387+
if (FirewallManager.isUnknownPackage(uid) && appStatus == FirewallManager.FirewallStatus.EXCLUDE) {
388+
uiCtx {
389+
showToastUiCentered(
390+
this,
391+
getString(R.string.exclude_no_package_err_toast),
392+
Toast.LENGTH_LONG
393+
)
394+
}
395+
return@io
396+
}
397+
398+
// change the status to allowed if already app is excluded
399+
if (appStatus == FirewallManager.FirewallStatus.EXCLUDE) {
400+
updateFirewallStatus(
401+
FirewallManager.FirewallStatus.NONE,
402+
FirewallManager.ConnectionStatus.ALLOW
403+
)
404+
} else {
405+
updateFirewallStatus(
406+
FirewallManager.FirewallStatus.EXCLUDE,
407+
FirewallManager.ConnectionStatus.ALLOW
384408
)
385409
}
386-
return@io
387410
}
411+
}
412+
}
388413

389-
// change the status to allowed if already app is excluded
390-
if (appStatus == FirewallManager.FirewallStatus.EXCLUDE) {
414+
b.aadAppSettingsIsolate.setOnClickListener {
415+
guardAppInfoInitialized("aadAppSettingsIsolate") {
416+
// change the status to allowed if already app is isolated
417+
if (appStatus == FirewallManager.FirewallStatus.ISOLATE) {
391418
updateFirewallStatus(
392419
FirewallManager.FirewallStatus.NONE,
393420
FirewallManager.ConnectionStatus.ALLOW
394421
)
395422
} else {
396423
updateFirewallStatus(
397-
FirewallManager.FirewallStatus.EXCLUDE,
424+
FirewallManager.FirewallStatus.ISOLATE,
398425
FirewallManager.ConnectionStatus.ALLOW
399426
)
400427
}
401428
}
402429
}
403430

404-
b.aadAppSettingsIsolate.setOnClickListener {
405-
// change the status to allowed if already app is isolated
406-
if (appStatus == FirewallManager.FirewallStatus.ISOLATE) {
407-
updateFirewallStatus(
408-
FirewallManager.FirewallStatus.NONE,
409-
FirewallManager.ConnectionStatus.ALLOW
410-
)
411-
} else {
412-
updateFirewallStatus(
413-
FirewallManager.FirewallStatus.ISOLATE,
414-
FirewallManager.ConnectionStatus.ALLOW
415-
)
416-
}
417-
}
418-
419431
b.aadIpBlockCard.setOnClickListener { openCustomIpScreen() }
420432

421433
b.aadDomainBlockCard.setOnClickListener { openCustomDomainScreen() }
@@ -912,6 +924,19 @@ class AppInfoActivity : AppCompatActivity(R.layout.activity_app_details) {
912924
Configuration.UI_MODE_NIGHT_YES
913925
}
914926

927+
private inline fun guardAppInfoInitialized(listenerName: String, block: () -> Unit) {
928+
if (!::appInfo.isInitialized) {
929+
Logger.w(LOG_TAG_UI, "AppInfo not initialized yet in $listenerName click listener, using uid: $uid")
930+
showToastUiCentered(
931+
this,
932+
this.getString(R.string.ctbs_app_info_not_available_toast),
933+
Toast.LENGTH_SHORT
934+
)
935+
return
936+
}
937+
block()
938+
}
939+
915940
private fun io(f: suspend () -> Unit): Job {
916941
return lifecycleScope.launch(Dispatchers.IO) { f() }
917942
}

0 commit comments

Comments
 (0)