in mobile/src/main/java/com/github/shadowsocks/AppManager.kt [262:306]
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.action_apply_all -> {
val profiles = ProfileManager.getAllProfiles()
if (profiles != null) {
val proxiedAppString = DataStore.individual
profiles.forEach {
it.individual = proxiedAppString
it.bypass = DataStore.bypass
ProfileManager.updateProfile(it)
}
if (DataStore.directBootAware) DirectBoot.update()
Snackbar.make(list, R.string.action_apply_all, Snackbar.LENGTH_LONG).show()
} else Snackbar.make(list, R.string.action_export_err, Snackbar.LENGTH_LONG).show()
return true
}
R.id.action_export_clipboard -> {
val success = Core.trySetPrimaryClip("${DataStore.bypass}\n${DataStore.individual}")
Snackbar.make(list,
if (success) R.string.action_export_msg else R.string.action_export_err,
Snackbar.LENGTH_LONG).show()
return true
}
R.id.action_import_clipboard -> {
val proxiedAppString = Core.clipboard.primaryClip?.getItemAt(0)?.text?.toString()
if (!proxiedAppString.isNullOrEmpty()) {
val i = proxiedAppString.indexOf('\n')
try {
val (enabled, apps) = if (i < 0) {
proxiedAppString to ""
} else proxiedAppString.substring(0, i) to proxiedAppString.substring(i + 1)
bypassGroup.check(if (enabled.toBoolean()) R.id.btn_bypass else R.id.btn_on)
DataStore.individual = apps
DataStore.dirty = true
Snackbar.make(list, R.string.action_import_msg, Snackbar.LENGTH_LONG).show()
initProxiedUids(apps)
appsAdapter.notifyItemRangeChanged(0, appsAdapter.itemCount, SWITCH)
return true
} catch (_: IllegalArgumentException) { }
}
Snackbar.make(list, R.string.action_import_err, Snackbar.LENGTH_LONG).show()
}
}
return super.onOptionsItemSelected(item)
}