Un cadeau de Saint-Valentin numérique, sécurisé et transparent.

1️⃣ Introduction

💘 Cupidon 2.0, c'est une petite application qui permet de partager ta localisation et ton amour, en toute sécurité et transparence. Contrairement à un logiciel de surveillance, Cupidon 2.0 repose sur l'acceptation et le consentement mutuel. Après tout, l'amour, c'est la confiance ! ❤️

2️⃣ Fonctionnalités

3️⃣ Installation et Transformation en APK

💻 Pré-requis : Installer Python, Kivy et Buildozer :

pip install kivy kivy-garden
pip install plyer
pip install buildozer

Voici le script Python pour l'application Cupidon 2.0 :


import random
import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.clock import Clock
from kivy.uix.popup import Popup
from kivy.uix.textinput import TextInput
from kivy.properties import StringProperty, BooleanProperty
from plyer import gps, notification

# Messages mignons pour la Saint-Valentin
messages_romantiques = [
    "💘 Ton amour est comme un bug dans mon cœur... impossible à corriger !",
    "🔐 Mon cœur est en HTTPS avec un certificat validé par toi !",
    "💾 Si notre amour était un fichier, il serait 'read-only' pour tous sauf toi !",
    "👀 Même un hacker ne pourrait pas trouver de faille dans mon amour pour toi !",
    "❤️ Ton amour, c’est comme un serveur bien sécurisé : impossible à compromettre !",
    "🔒 Notre amour est comme un VPN, il protège nos cœurs contre toute intrusion !",
    "📡 Notre connexion est plus forte que n'importe quel signal Wi-Fi !",
    "🔗 Chaque jour avec toi est comme un nouveau commit dans notre histoire d'amour.",
    "🖥️ Tu es le clavier de mon cœur, sans toi, je n'ai pas de mots.",
    "🖱️ Avec toi, je clique toujours sur 'oui' pour le bonheur.",
    "🌐 Notre amour est comme le web, vaste et infini.",
    "⚡ Tu es l'électricité qui alimente mon processeur émotionnel.",
    "🎶 Tu es le code qui fait chanter mon cœur comme une mélodie parfaite.",
    "🔋 Avec toi, ma vie a enfin trouvé sa charge complète.",
    "🛡️ Notre amour est comme un pare-feu, il bloque toutes les menaces à notre bonheur."
]

class CupidonApp(BoxLayout):
    message = StringProperty("")
    gps_active = BooleanProperty(False)

    def __init__(self, **kwargs):
        super().__init__(orientation="vertical", **kwargs)
        
        # Affichage du message romantique aléatoire
        self.message = random.choice(messages_romantiques)
        self.label_message = Label(text=self.message, font_size=20)
        self.add_widget(self.label_message)

        # Bouton pour activer/désactiver la localisation
        self.btn_localisation = Button(text="📍 Activer la Localisation" if not self.gps_active else "📍 Désactiver la Localisation", on_press=self.toggle_location)
        self.add_widget(self.btn_localisation)

        # Affichage de la position
        self.label_position = Label(text="Localisation désactivée" if not self.gps_active else "Localisation en attente...", font_size=16)
        self.add_widget(self.label_position)

        # Bouton surprise
        self.btn_surprise = Button(text="💌 Envoyer un message surprise", on_press=self.send_surprise)
        self.add_widget(self.btn_surprise)

        # Bouton pour le mode troll
        self.btn_troll = Button(text="💡 Mode Troll", on_press=self.toggle_troll_mode)
        self.add_widget(self.btn_troll)

        # Bouton pour les options de confidentialité
        self.btn_confidentiality = Button(text="🔒 Options de Confidentialité", on_press=self.show_confidentiality_options)
        self.add_widget(self.btn_confidentiality)

    def init_gps(self):
        if self.gps_active:
            try:
                gps.configure(on_location=self.on_gps_position)
                gps.start(minTime=1000, minDistance=1)
            except NotImplementedError:
                self.label_position.text = "⚠️ GPS non disponible"
        else:
            gps.stop()
            self.label_position.text = "Localisation désactivée"

    def on_gps_position(self, **kwargs):
        self.label_position.text = f"📍 Localisation : {kwargs['lat']:.6f}, {kwargs['lon']:.6f}"

    def toggle_location(self, instance):
        self.gps_active = not self.gps_active
        instance.text = "📍 Activer la Localisation" if not self.gps_active else "📍 Désactiver la Localisation"
        self.init_gps()

    def send_surprise(self, instance):
        notif_message = random.choice(messages_romantiques)
        notification.notify(
            title="Cupidon 2.0 💘",
            message=notif_message,
            timeout=5
        )

    def toggle_troll_mode(self, instance):
        content = Button(text='N\'oublie pas de changer ton mot de passe !', size_hint=(None, None), size=(300, 100))
        popup = Popup(title='Attention à la Cybersécurité !', content=content, size_hint=(None, None), size=(400, 200))
        content.bind(on_press=popup.dismiss)
        popup.open()

    def show_confidentiality_options(self, instance):
        layout = BoxLayout(orientation='vertical')
        share_duration = TextInput(multiline=False, text="Durée de partage en minutes:")
        clear_history = Button(text="Effacer l'historique de localisation")
        
        def clear_history_action(instance):
            # Ici, on pourrait simuler l'effacement de l'historique de localisation
            popup.dismiss()
            notification.notify(
                title="Cupidon 2.0 💘",
                message="Historique de localisation effacé.",
                timeout=5
            )

        layout.add_widget(share_duration)
        layout.add_widget(clear_history)
        clear_history.bind(on_press=clear_history_action)
        
        popup = Popup(title='Options de Confidentialité', content=layout, size_hint=(None, None), size=(400, 300))
        popup.open()

class MainApp(App):
    def build(self):
        return CupidonApp()

if __name__ == '__main__':
    MainApp().run()

⚡ Compiler l'APK :

buildozer -v android debug

4️⃣ Éthique et Respect de la Vie Privée

🛡️ Transparence et respect mutuel : Cupidon 2.0 ne cache rien. Aucune donnée n'est envoyée sur un serveur externe.