Skip to content

Commit

Permalink
Merge pull request #1443 from hussainmohd-a/v055j
Browse files Browse the repository at this point in the history
v055j
  • Loading branch information
hussainmohd-a committed May 18, 2024
2 parents ed2a5a1 + 839e1e1 commit ad897b0
Show file tree
Hide file tree
Showing 15 changed files with 174 additions and 83 deletions.
10 changes: 3 additions & 7 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ configurations {
}

dependencies {
implementation 'com.google.firebase:firebase-crashlytics-ktx:19.0.0'
androidTestImplementation 'androidx.test:rules:1.5.0'
def room_version = "2.6.1"
def paging_version = "3.2.1"
Expand Down Expand Up @@ -288,13 +289,8 @@ dependencies {
// barcode scanner for wireguard
fullImplementation 'com.journeyapps:zxing-android-embedded:4.3.0'

playImplementation platform('com.google.firebase:firebase-bom:33.0.0')
playImplementation 'com.google.firebase:firebase-crashlytics-ktx'
playImplementation 'com.google.firebase:firebase-crashlytics-ndk'

websiteImplementation platform('com.google.firebase:firebase-bom:33.0.0')
websiteImplementation 'com.google.firebase:firebase-crashlytics-ktx'
websiteImplementation 'com.google.firebase:firebase-crashlytics-ndk'
playImplementation 'com.google.firebase:firebase-crashlytics:19.0.0'
playImplementation 'com.google.firebase:firebase-crashlytics-ndk:19.0.0'
}

// github.com/michel-kraemer/gradle-download-task/issues/131#issuecomment-464476903
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,9 @@ class AppInfoActivity : AppCompatActivity(R.layout.activity_app_details) {
if (it.append.endOfPaginationReached) {
if (adapter.itemCount < 1) {
b.aadMostContactedDomainRl.visibility = View.GONE
b.aadMostContactedIpsRv.visibility = View.GONE
} else {
b.aadMostContactedDomainRl.visibility = View.VISIBLE

}
}
}
Expand All @@ -386,7 +388,8 @@ class AppInfoActivity : AppCompatActivity(R.layout.activity_app_details) {
if (it.append.endOfPaginationReached) {
if (adapter.itemCount < 1) {
b.aadMostContactedIpsRl.visibility = View.GONE
b.aadMostContactedDomainRv.visibility = View.GONE
} else {
b.aadMostContactedIpsRl.visibility = View.VISIBLE
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ import kotlinx.coroutines.withContext
import org.koin.android.ext.android.inject
import org.koin.androidx.viewmodel.ext.android.viewModel


class AppWiseDomainLogsActivity :
AppCompatActivity(R.layout.activity_app_wise_domain_logs), SearchView.OnQueryTextListener {
private val b by viewBinding(ActivityAppWiseDomainLogsBinding::bind)
Expand All @@ -63,7 +64,7 @@ class AppWiseDomainLogsActivity :

private fun Context.isDarkThemeOn(): Boolean {
return resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK ==
Configuration.UI_MODE_NIGHT_YES
Configuration.UI_MODE_NIGHT_YES
}

override fun onCreate(savedInstanceState: Bundle?) {
Expand Down Expand Up @@ -132,15 +133,23 @@ class AppWiseDomainLogsActivity :
uiCtx {
this.appInfo = appInfo

b.awlAppDetailName.text = appName(packages.count())
val appName = appName(packages.count())
updateAppNameInSearchHint(appName)
displayIcon(
Utilities.getIcon(this, appInfo.packageName, appInfo.appName),
b.awlAppDetailIcon
b.awlAppDetailIcon1
)
}
}
}

private fun updateAppNameInSearchHint(appName: String) {
val appNameTruncated = appName.substring(0, appName.length.coerceAtMost(10))
val hint = getString(R.string.two_argument_colon, appNameTruncated, getString(R.string.search_custom_domains))
b.awlSearch.queryHint = hint
return
}


private fun highlightToggleBtn() {
val timeCategory = "0" // default is 1 hours, "0" tag is 1 hours
Expand Down Expand Up @@ -204,7 +213,6 @@ class AppWiseDomainLogsActivity :

private fun hideRulesUi() {
b.awlCardViewTop.visibility = android.view.View.GONE
b.awlAppDetailRl.visibility = android.view.View.GONE
b.awlRecyclerConnection.visibility = android.view.View.GONE
}

Expand All @@ -214,7 +222,6 @@ class AppWiseDomainLogsActivity :

private fun showRulesUi() {
b.awlCardViewTop.visibility = android.view.View.VISIBLE
b.awlAppDetailRl.visibility = android.view.View.VISIBLE
b.awlRecyclerConnection.visibility = android.view.View.VISIBLE
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
if (
BiometricManager.from(this)
.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_WEAK) ==
BiometricManager.BIOMETRIC_SUCCESS
BiometricManager.BIOMETRIC_SUCCESS
) {
b.settingsBiometricSwitch.isChecked = persistentState.biometricAuth
} else {
Expand All @@ -149,13 +149,15 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
getString(R.string.settings_notification_desc1)
)
}

NotificationActionType.DNS_FIREWALL -> {
b.genSettingsNotificationDesc.text =
getString(
R.string.settings_notification_desc,
getString(R.string.settings_notification_desc2)
)
}

NotificationActionType.NONE -> {
b.genSettingsNotificationDesc.text =
getString(
Expand All @@ -172,9 +174,11 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
PcapMode.NONE -> {
b.settingsActivityPcapDesc.text = getString(R.string.settings_pcap_dialog_option_1)
}

PcapMode.LOGCAT -> {
b.settingsActivityPcapDesc.text = getString(R.string.settings_pcap_dialog_option_2)
}

PcapMode.EXTERNAL_FILE -> {
b.settingsActivityPcapDesc.text = getString(R.string.settings_pcap_dialog_option_3)
}
Expand All @@ -191,20 +195,23 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
getString(R.string.settings_theme_dialog_themes_1)
)
}

Themes.LIGHT.id -> {
b.genSettingsThemeDesc.text =
getString(
R.string.settings_selected_theme,
getString(R.string.settings_theme_dialog_themes_2)
)
}

Themes.DARK.id -> {
b.genSettingsThemeDesc.text =
getString(
R.string.settings_selected_theme,
getString(R.string.settings_theme_dialog_themes_3)
)
}

else -> {
b.genSettingsThemeDesc.text =
getString(
Expand All @@ -221,9 +228,8 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
!b.settingsActivityEnableLogsSwitch.isChecked
}

b.settingsActivityEnableLogsSwitch.setOnCheckedChangeListener {
_: CompoundButton,
b: Boolean ->
b.settingsActivityEnableLogsSwitch.setOnCheckedChangeListener { _: CompoundButton,
b: Boolean ->
persistentState.logsEnabled = b
}

Expand All @@ -242,9 +248,8 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
!b.settingsActivityCheckUpdateSwitch.isChecked
}

b.settingsActivityCheckUpdateSwitch.setOnCheckedChangeListener {
_: CompoundButton,
b: Boolean ->
b.settingsActivityCheckUpdateSwitch.setOnCheckedChangeListener { _: CompoundButton,
b: Boolean ->
persistentState.checkForAppUpdate = b
}

Expand Down Expand Up @@ -272,9 +277,8 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
!b.settingsActivityAppNotificationPersistentSwitch.isChecked
}

b.settingsActivityAppNotificationPersistentSwitch.setOnCheckedChangeListener {
_: CompoundButton,
b: Boolean ->
b.settingsActivityAppNotificationPersistentSwitch.setOnCheckedChangeListener { _: CompoundButton,
b: Boolean ->
persistentState.persistentNotification = b
}

Expand Down Expand Up @@ -324,9 +328,8 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
val locale = languages.getOrDefault(item, "en-US")
AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(locale))
}
alertBuilder.setNeutralButton(getString(R.string.settings_locale_dialog_neutral)) {
dialog,
_ ->
alertBuilder.setNeutralButton(getString(R.string.settings_locale_dialog_neutral)) { dialog,
_ ->
dialog.dismiss()
openActionViewIntent(getString(R.string.about_translate_link).toUri())
}
Expand Down Expand Up @@ -386,7 +389,7 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)

private fun Context.isDarkThemeOn(): Boolean {
return resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK ==
Configuration.UI_MODE_NIGHT_YES
Configuration.UI_MODE_NIGHT_YES
}

private fun showThemeDialog() {
Expand Down Expand Up @@ -415,12 +418,15 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
setThemeRecreate(R.style.AppThemeWhite)
}
}

Themes.LIGHT.id -> {
setThemeRecreate(R.style.AppThemeWhite)
}

Themes.DARK.id -> {
setThemeRecreate(R.style.AppTheme)
}

Themes.TRUE_BLACK.id -> {
setThemeRecreate(R.style.AppThemeTrueBlack)
}
Expand Down Expand Up @@ -483,11 +489,13 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
getString(R.string.settings_pcap_dialog_option_1)
appConfig.setPcap(PcapMode.NONE.id)
}

PcapMode.LOGCAT -> {
b.settingsActivityPcapDesc.text =
getString(R.string.settings_pcap_dialog_option_2)
appConfig.setPcap(PcapMode.LOGCAT.id, PcapMode.ENABLE_PCAP_LOGCAT)
}

PcapMode.EXTERNAL_FILE -> {
b.settingsActivityPcapDesc.text =
getString(R.string.settings_pcap_dialog_option_3)
Expand Down Expand Up @@ -524,6 +532,7 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
persistentState.notificationActionType =
NotificationActionType.PAUSE_STOP.action
}

NotificationActionType.DNS_FIREWALL -> {
b.genSettingsNotificationDesc.text =
getString(
Expand All @@ -533,6 +542,7 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
persistentState.notificationActionType =
NotificationActionType.DNS_FIREWALL.action
}

NotificationActionType.NONE -> {
b.genSettingsNotificationDesc.text =
getString(
Expand Down Expand Up @@ -782,7 +792,7 @@ class MiscSettingsActivity : AppCompatActivity(R.layout.activity_misc_settings)
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
private fun isNotificationPermissionGranted(): Boolean {
return ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) ==
PackageManager.PERMISSION_GRANTED
PackageManager.PERMISSION_GRANTED
}

private fun enableAfterDelay(ms: Long, vararg views: View) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -655,7 +655,9 @@ class ProxySettingsActivity : AppCompatActivity(R.layout.fragment_proxy_configur
val errorTxt: TextView = dialogBinding.dialogProxyErrorText
val userNameEditText: EditText = dialogBinding.dialogProxyEditUsername
val passwordEditText: EditText = dialogBinding.dialogProxyEditPassword
val udpBlockLayout: LinearLayout = dialogBinding.dialogProxyUdpHeader
val udpBlockCheckBox: CheckBox = dialogBinding.dialogProxyUdpCheck
val excludeAppLayout: LinearLayout = dialogBinding.dialogProxyExcludeAppsHeader
val excludeAppCheckBox: CheckBox = dialogBinding.dialogProxyExcludeAppsCheck

headerDesc.visibility = View.GONE
Expand Down Expand Up @@ -706,6 +708,14 @@ class ProxySettingsActivity : AppCompatActivity(R.layout.fragment_proxy_configur
UIUtils.openVpnProfile(this)
}

excludeAppLayout.setOnClickListener {
excludeAppCheckBox.isChecked = !excludeAppCheckBox.isChecked
}

udpBlockLayout.setOnClickListener {
udpBlockCheckBox.isChecked = !udpBlockCheckBox.isChecked
}

applyURLBtn.setOnClickListener {
var port: Int? = 0
var isValid: Boolean
Expand Down Expand Up @@ -849,6 +859,7 @@ class ProxySettingsActivity : AppCompatActivity(R.layout.fragment_proxy_configur
val userNameLl: LinearLayout = dialogBinding.dialogProxyUsernameHeader
val passwordLl: LinearLayout = dialogBinding.dialogProxyPasswordHeader
val udpBlockLl: LinearLayout = dialogBinding.dialogProxyUdpHeader
val excludeAppLayout: LinearLayout = dialogBinding.dialogProxyExcludeAppsHeader
val excludeAppCheckBox: CheckBox = dialogBinding.dialogProxyExcludeAppsCheck

// do not show the UDP block option for HTTP proxy
Expand All @@ -869,6 +880,10 @@ class ProxySettingsActivity : AppCompatActivity(R.layout.fragment_proxy_configur
}
lockdownDesc.visibility = if (VpnController.isVpnLockdown()) View.VISIBLE else View.GONE

excludeAppLayout.setOnClickListener {
excludeAppCheckBox.isChecked = !excludeAppCheckBox.isChecked
}

val proxySpinnerAdapter =
ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, appNames)
appNameSpinner.adapter = proxySpinnerAdapter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,12 @@ import com.celzero.bravedns.R
import com.celzero.bravedns.adapter.AppWiseDomainsAdapter
import com.celzero.bravedns.databinding.BottomSheetAppConnectionsBinding
import com.celzero.bravedns.service.DomainRulesManager
import com.celzero.bravedns.service.FirewallManager
import com.celzero.bravedns.service.PersistentState
import com.celzero.bravedns.util.Constants.Companion.INVALID_UID
import com.celzero.bravedns.util.Themes.Companion.getBottomsheetCurrentTheme
import com.celzero.bravedns.util.UIUtils.updateHtmlEncodedText
import com.celzero.bravedns.util.Utilities
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
Expand Down Expand Up @@ -110,16 +112,59 @@ class AppDomainRulesBottomSheet : BottomSheetDialogFragment() {
this.dismiss()
return
}

updateAppDetails()
// making use of the same layout used for ip rules, so changing the text and
// removing the recycler related changes

b.bsacIpAddressTv.text = domain
b.bsacIpRuleTxt.text = updateHtmlEncodedText(getString(R.string.bsct_block_domain))

b.bsacDomainRuleTxt.visibility = View.GONE
b.bsacDomainLl.visibility = View.GONE
}

private fun updateAppDetails() {
if (uid == -1) return

io {
val appNames = FirewallManager.getAppNamesByUid(uid)
if (appNames.isEmpty()) {
uiCtx { handleNonApp() }
return@io
}
val pkgName = FirewallManager.getPackageNameByAppName(appNames[0])

val appCount = appNames.count()
uiCtx {
if (appCount >= 1) {
b.bsacAppName.text =
if (appCount >= 2) {
getString(
R.string.ctbs_app_other_apps,
appNames[0],
appCount.minus(1).toString()
)
} else {
appNames[0]
}
if (pkgName == null) return@uiCtx
b.bsacAppIcon.setImageDrawable(
Utilities.getIcon(requireContext(), pkgName)
)
} else {
// apps which are not available in cache are treated as non app.
// TODO: check packageManager#getApplicationInfo() for appInfo
handleNonApp()
}
}
}
}

private fun handleNonApp() {
b.bsacAppName.visibility = View.GONE
b.bsacAppIcon.visibility = View.GONE
}

private fun setRulesUi() {
io {
// no need to send port number for the app info screen
Expand Down
Loading

0 comments on commit ad897b0

Please sign in to comment.