Reformatted code base using black.

This commit is contained in:
Goffi 2024-06-19 18:44:57 +02:00
commit 53fdaa9d09

View file

@ -67,20 +67,20 @@ from android.broadcast import BroadcastReceiver
from android import python_act
Context = autoclass('android.content.Context')
ConnectivityManager = autoclass('android.net.ConnectivityManager')
MediaPlayer = autoclass('android.media.MediaPlayer')
AudioManager = autoclass('android.media.AudioManager')
Context = autoclass("android.content.Context")
ConnectivityManager = autoclass("android.net.ConnectivityManager")
MediaPlayer = autoclass("android.media.MediaPlayer")
AudioManager = autoclass("android.media.AudioManager")
# notifications
AndroidString = autoclass('java.lang.String')
PendingIntent = autoclass('android.app.PendingIntent')
Intent = autoclass('android.content.Intent')
AndroidString = autoclass("java.lang.String")
PendingIntent = autoclass("android.app.PendingIntent")
Intent = autoclass("android.content.Intent")
# DNS
# regex to find dns server prop with "getprop"
RE_DNS = re.compile(r"^\[net\.[a-z0-9]+\.dns[0-4]\]: \[(.*)\]$", re.MULTILINE)
SystemProperties = autoclass('android.os.SystemProperties')
SystemProperties = autoclass("android.os.SystemProperties")
#: delay between a pause event and sending the inactive indication to server, in seconds
#: we don't send the indication immediately because user can be just checking something
@ -148,7 +148,8 @@ class Notification(AndroidNotification):
action_data = AndroidString(json.dumps(sat_action).encode())
log.debug(f"adding extra {INTENT_EXTRA_ACTION} ==> {action_data}")
notification_intent = notification_intent.putExtra(
INTENT_EXTRA_ACTION, action_data)
INTENT_EXTRA_ACTION, action_data
)
# we use PendingIntent.FLAG_UPDATE_CURRENT here, otherwise extra won't be set
# in the new intent (the old ACTION_MAIN intent will be reused). This differs
@ -168,14 +169,12 @@ class Notification(AndroidNotification):
# in the generic "notify" method).
sat_action = kwargs.pop("sat_action", None)
noti = None
message = kwargs.get('message', '').encode('utf-8')
ticker = kwargs.get('ticker', '').encode('utf-8')
title = AndroidString(
kwargs.get('title', '').encode('utf-8')
)
icon = kwargs.get('app_icon', '')
message = kwargs.get("message", "").encode("utf-8")
ticker = kwargs.get("ticker", "").encode("utf-8")
title = AndroidString(kwargs.get("title", "").encode("utf-8"))
icon = kwargs.get("app_icon", "")
if kwargs.get('toast', False):
if kwargs.get("toast", False):
self._toast(message)
return
else:
@ -212,7 +211,6 @@ class FrontendStateFactory(protocol.Factory):
return FrontendStateProtocol(self.android_plugin)
class AndroidPlugin(object):
params = """
@ -243,7 +241,7 @@ class AndroidPlugin(object):
log.info(_("plugin Android initialization"))
log.info(f"using Android API {api_version}")
self.host = host
self._csi = host.plugins.get('XEP-0352')
self._csi = host.plugins.get("XEP-0352")
self._csi_timer = None
host.memory.update_params(self.params)
try:
@ -268,7 +266,9 @@ class AndroidPlugin(object):
raise e
# we set a low priority because we want the notification to be sent after all
# plugins have done their job
host.trigger.add("message_received", self.message_received_trigger, priority=-1000)
host.trigger.add(
"message_received", self.message_received_trigger, priority=-1000
)
# profiles autoconnection
host.bridge.add_method(
@ -312,7 +312,7 @@ class AndroidPlugin(object):
callback=lambda *args, **kwargs: reactor.callFromThread(
self.on_connectivity_change
),
actions=["android.net.conn.CONNECTIVITY_CHANGE"]
actions=["android.net.conn.CONNECTIVITY_CHANGE"],
)
self.br.start()
@ -355,14 +355,18 @@ class AndroidPlugin(object):
- there is a message and it is not a groupchat
- message is not coming from ourself
"""
if (mess_data["message"] and mess_data["type"] != C.MESS_TYPE_GROUPCHAT
and not mess_data["from"].userhostJID() == client.jid.userhostJID()):
if (
mess_data["message"]
and mess_data["type"] != C.MESS_TYPE_GROUPCHAT
and not mess_data["from"].userhostJID() == client.jid.userhostJID()
):
message = next(iter(mess_data["message"].values()))
try:
subject = next(iter(mess_data["subject"].values()))
except StopIteration:
subject = D_("new message from {contact}").format(
contact = mess_data['from'])
contact=mess_data["from"]
)
notification = Notification()
notification._notify(
@ -379,25 +383,24 @@ class AndroidPlugin(object):
vibrate_mode = ringer_mode == AudioManager.RINGER_MODE_VIBRATE
ring_setting = self.host.memory.param_get_a(
PARAM_RING_NAME,
PARAM_RING_CATEGORY,
profile_key=client.profile
PARAM_RING_NAME, PARAM_RING_CATEGORY, profile_key=client.profile
)
if ring_setting != 'never' and ringer_mode == AudioManager.RINGER_MODE_NORMAL:
if ring_setting != "never" and ringer_mode == AudioManager.RINGER_MODE_NORMAL:
self.notif_player.start()
vibration_setting = self.host.memory.param_get_a(
PARAM_VIBRATE_NAME,
PARAM_VIBRATE_CATEGORY,
profile_key=client.profile
PARAM_VIBRATE_NAME, PARAM_VIBRATE_CATEGORY, profile_key=client.profile
)
if (vibration_setting == 'always'
or vibration_setting == 'vibrate' and vibrate_mode):
try:
vibrator.vibrate()
except Exception as e:
log.warning("Can't use vibrator: {e}".format(e=e))
if (
vibration_setting == "always"
or vibration_setting == "vibrate"
and vibrate_mode
):
try:
vibrator.vibrate()
except Exception as e:
log.warning("Can't use vibrator: {e}".format(e=e))
return mess_data
def message_received_trigger(self, client, message_elt, post_treat):
@ -414,7 +417,8 @@ class AndroidPlugin(object):
async def _get_profiles_autoconnect(self):
autoconnect_dict = await self.host.memory.storage.get_ind_param_values(
category='Connection', name='autoconnect_backend',
category="Connection",
name="autoconnect_backend",
)
return [p for p, v in autoconnect_dict.items() if C.bool(v)]
@ -426,7 +430,8 @@ class AndroidPlugin(object):
if len(profiles_autoconnect) > 1:
log.warning(
f"More that one profiles with backend autoconnection set found, picking "
f"up first one (full list: {profiles_autoconnect!r})")
f"up first one (full list: {profiles_autoconnect!r})"
)
return profiles_autoconnect[0]
# CSI
@ -503,17 +508,22 @@ class AndroidPlugin(object):
elif net_type == NET_TYPE_MOBILE:
log.info("mobile data activated")
else:
log.info("network activated (type={net_type_android})"
.format(net_type_android=net_type_android))
log.info(
"network activated (type={net_type_android})".format(
net_type_android=net_type_android
)
)
else:
log.debug("_check_connectivity called without network change ({net_type})"
.format(net_type = net_type))
log.debug(
"_check_connectivity called without network change ({net_type})".format(
net_type=net_type
)
)
# we always call _handle_network_change even if there is not connectivity change
# to be sure to reconnect when necessary
await self._handle_network_change(net_type)
def on_connectivity_change(self):
log.debug("on_connectivity_change called")
d = defer.ensureDeferred(self._check_connectivity())
@ -527,7 +537,8 @@ class AndroidPlugin(object):
log.info(
"Patching Twisted to use Android DNS resolver ({dns_servers})".format(
dns_servers=', '.join([s[0] for s in dns_servers]))
dns_servers=", ".join([s[0] for s in dns_servers])
)
)
dns_client.theResolver = dns_client.createResolver(servers=dns_servers)
@ -538,7 +549,7 @@ class AndroidPlugin(object):
# thanks to A-IV at https://stackoverflow.com/a/11362271 for the way to go
log.debug("Old API, using SystemProperties to find DNS")
for idx in range(1, 5):
addr = SystemProperties.get(f'net.dns{idx}')
addr = SystemProperties.get(f"net.dns{idx}")
if abstract.isIPAddress(addr):
servers.append((addr, 53))
else:
@ -546,15 +557,18 @@ class AndroidPlugin(object):
# use of getprop inspired by various solutions at
# https://stackoverflow.com/q/3070144
# it's the most simple option, and it fit wells with async_process
getprop_paths = which('getprop')
getprop_paths = which("getprop")
if getprop_paths:
try:
getprop_path = getprop_paths[0]
props = await async_process.run(getprop_path)
servers = [(ip, 53) for ip in RE_DNS.findall(props.decode())
if abstract.isIPAddress(ip)]
servers = [
(ip, 53)
for ip in RE_DNS.findall(props.decode())
if abstract.isIPAddress(ip)
]
except Exception as e:
log.warning(f"Can't use \"getprop\" to find DNS server: {e}")
log.warning(f'Can\'t use "getprop" to find DNS server: {e}')
if not servers:
# FIXME: Cloudflare's 1.1.1.1 seems to have a better privacy policy, to be
# checked.
@ -562,5 +576,5 @@ class AndroidPlugin(object):
"no server found, we have to use factory Google DNS, this is not ideal "
"for privacy"
)
servers.append(('8.8.8.8', 53), ('8.8.4.4', 53))
servers.append(("8.8.8.8", 53), ("8.8.4.4", 53))
return servers