דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. אנדרואיד - כללי
  3. שיאומי
  4. שיאומי f21 pro ו +f21 pro
  5. עזרה הדדית - שיאומי f21 pro ו +f21 pro
  6. מדריך | הוספת החלפת פרופילים לדאמבדוריד (14) ע"י סולמית

מדריך | הוספת החלפת פרופילים לדאמבדוריד (14) ע"י סולמית

מתוזמן נעוץ נעול הועבר עזרה הדדית - שיאומי f21 pro ו +f21 pro
1 פוסטים 1 כותבים 24 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • L מנותק
    L מנותק
    lilo159
    כתב נערך לאחרונה על ידי lilo159
    #1

    בהמשך למדריך הישן שלי כאן, כעת לפני מעבר שלי לדאמבדוריד, היה חשוב לי שתהיה האפשרות הזו.
    מסך.gif
    כמובן שהעריכה על אחריותכם וכו', תגבו הכל וכו'.
    אה, וכמובן שצריכה להיות לכם היכולת לערוך את הסיסטם, מה שמשיגים בעזרת RO2RW, חפשו על זה בפורום.
    עוד דבר, אני לא דובר סמאלית, כמובן שזה AI..

    החלפת הפרופילים תעבוד בכל מקום שממשק המערכת (systemui בלעז) הוא התהליך הקדמי (בforeground), דהיינו במסך הנעילה ובכל מקום שתפתחו את חלון ההתראות (זה שמושכים למטה..).
    האפליקציה הנערכת היא הsystemui, שנמצאת בנתיב:
    system/system_ext/priv-app/SystemUI
    השינויים:

    1. בנתיב com/android/systemui/volume
      הקובץ: VolumeDialogImpl
      בתוך המתודה <init>
      להוסיף בסופה לפני ה return-void
      את הקוד הזה:
    # --- התחלת הוספה מתוקנת ---
        
        # 1. יצירת IntentFilter
        new-instance v2, Landroid/content/IntentFilter;
        const-string v3, "com.android.systemui.volume.TOGGLE_RINGER"
        invoke-direct {v2, v3}, Landroid/content/IntentFilter;-><init>(Ljava/lang/String;)V
    
        # 2. יצירת הרסיבר
        # v0 הוא 'this' (VolumeDialogImpl)
        new-instance v3, Lcom/android/systemui/volume/VolumeDialogImpl$RingerReceiver;
        invoke-direct {v3, v0}, Lcom/android/systemui/volume/VolumeDialogImpl$RingerReceiver;-><init>(Lcom/android/systemui/volume/VolumeDialogImpl;)V
    
        # 3. השגת ה-Context בצורה בטוחה
        # p1 הוא הפרמטר הראשון של הבנאי (Context)
        # נעביר אותו ל-v4 כדי להשתמש בו (כי v1 כבר "מלוכלך")
        move-object v4, p1 
    
        # 4. רישום הרסיבר
        # v4 = Context
        # v3 = Receiver
        # v2 = Filter
        # v5 = Flags (0x2 = RECEIVER_EXPORTED)
        const/4 v5, 0x2
        invoke-virtual {v4, v3, v2, v5}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent;
    
        # --- סוף הוספה ---
    

    מראה מקום בספויילר:

    .method public constructor <init>(Landroid/content/Context;Lcom/android/systemui/plugins/VolumeDialogController;Lcom/android/systemui/statusbar/policy/AccessibilityManagerWrapper;Lcom/android/systemui/statusbar/policy/DeviceProvisionedController;Lcom/android/systemui/statusbar/policy/ConfigurationController;Lcom/android/systemui/media/dialog/MediaOutputDialogFactory;Lcom/android/internal/jank/InteractionJankMonitor;Lcom/android/systemui/dagger/DaggerReferenceGlobalRootComponent$ReferenceSysUIComponentImpl$SwitchingProvider$12;Lcom/android/systemui/statusbar/policy/DevicePostureController;Landroid/os/Looper;Lcom/android/systemui/dump/DumpManager;Ldagger/Lazy;Lcom/android/systemui/statusbar/VibratorHelper;Lcom/android/systemui/util/time/SystemClock;)V
        .registers 25
    
        move-object v0, p0
    
        move-object v1, p1
    
        move-object/from16 v2, p9
    
        .line 1
        invoke-direct {p0}, Ljava/lang/Object;-><init>()V
    
      # הרבה קוד באמצע...
    
        .line 62
        :cond_179
        iput-object v3, v0, Lcom/android/systemui/volume/VolumeDialogImpl;->mDevicePostureControllerCallback:Lcom/android/systemui/volume/VolumeDialogImpl$$ExternalSyntheticLambda2;
    
        :goto_17b
    
    # --- התחלת הוספה מתוקנת ---
        
        # 1. יצירת IntentFilter
        new-instance v2, Landroid/content/IntentFilter;
        const-string v3, "com.android.systemui.volume.TOGGLE_RINGER"
        invoke-direct {v2, v3}, Landroid/content/IntentFilter;-><init>(Ljava/lang/String;)V
    
        # 2. יצירת הרסיבר
        # v0 הוא 'this' (VolumeDialogImpl)
        new-instance v3, Lcom/android/systemui/volume/VolumeDialogImpl$RingerReceiver;
        invoke-direct {v3, v0}, Lcom/android/systemui/volume/VolumeDialogImpl$RingerReceiver;-><init>(Lcom/android/systemui/volume/VolumeDialogImpl;)V
    
        # 3. השגת ה-Context בצורה בטוחה
        # p1 הוא הפרמטר הראשון של הבנאי (Context)
        # נעביר אותו ל-v4 כדי להשתמש בו (כי v1 כבר "מלוכלך")
        move-object v4, p1 
    
        # 4. רישום הרסיבר
        # v4 = Context
        # v3 = Receiver
        # v2 = Filter
        # v5 = Flags (0x2 = RECEIVER_EXPORTED)
        const/4 v5, 0x2
        invoke-virtual {v4, v3, v2, v5}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent;
    
        # --- סוף הוספה ---
    
        return-void
    
        :array_17c
        .array-data 4
            0x0
            0x3f800000  # 1.0f
        .end array-data
    
        :array_184
        .array-data 4
            0x3f800000  # 1.0f
            0x0
        .end array-data
    .end method
    

    1. בסוף אותו קובץ (VolumeDialogImpl)
      להוסיף את המתודה הזאת:
    .method public final toggleRingerMode()V
        .registers 6
    
        # 1. איפוס טיימר (משתמשים ב-p0)
        invoke-virtual {p0}, Lcom/android/systemui/volume/VolumeDialogImpl;->rescheduleTimeoutH()V
    
        # 2. בדיקה שה-State קיים
        iget-object v0, p0, Lcom/android/systemui/volume/VolumeDialogImpl;->mState:Lcom/android/systemui/plugins/VolumeDialogController$State;
        if-nez v0, :get_current_mode
        return-void
    
        :get_current_mode
        # 3. קריאת המצב הנוכחי לתוך v0
        iget v0, v0, Lcom/android/systemui/plugins/VolumeDialogController$State;->ringerModeInternal:I
    
        # נשתמש ב-v1 כדי להחזיק את המצב החדש שנרצה להגדיר
        
        # הגדרת קבועים להשוואה (v2=1 רטט, v3=2 רגיל)
        const/4 v2, 0x1 
        const/4 v3, 0x2
        
        # --- לוגיקה (רגיל -> רטט -> שקט -> רגיל) ---
    
        # אם המצב הנוכחי הוא רגיל (2), נרצה לעבור לרטט (1)
        if-ne v0, v3, :check_vibrate
        move v1, v2
        goto :apply_change
    
        :check_vibrate
        # אם המצב הנוכחי הוא רטט (1), נרצה לעבור לשקט (0)
        if-ne v0, v2, :set_normal
        const/4 v1, 0x0
        goto :apply_change
    
        :set_normal
        # אחרת (שקט או לא ידוע), נחזור לרגיל (2)
        move v1, v3
    
        :apply_change
        # 4. ביצוע השינוי באמצעות הפונקציה הפנימית של המחלקה
        invoke-virtual {p0, v1}, Lcom/android/systemui/volume/VolumeDialogImpl;->setRingerMode(I)V
    
        return-void
    .end method
    
    1. באותו נתיב (com/android/systemui/volume)
      (זה ליד אותו קובץ (VolumeDialogImpl))
      להוסיף קלאס חדש בשם VolumeDialogImpl$RingerReceiver:
    .class public Lcom/android/systemui/volume/VolumeDialogImpl$RingerReceiver;
    .super Landroid/content/BroadcastReceiver;
    
    .field final synthetic this$0:Lcom/android/systemui/volume/VolumeDialogImpl;
    
    .method public constructor <init>(Lcom/android/systemui/volume/VolumeDialogImpl;)V
        .registers 2
        iput-object p1, p0, Lcom/android/systemui/volume/VolumeDialogImpl$RingerReceiver;->this$0:Lcom/android/systemui/volume/VolumeDialogImpl;
        invoke-direct {p0}, Landroid/content/BroadcastReceiver;-><init>()V
        return-void
    .end method
    
    .method public onReceive(Landroid/content/Context;Landroid/content/Intent;)V
        .registers 4
        # קריאה לפונקציה הראשית שכתבנו קודם
        iget-object v0, p0, Lcom/android/systemui/volume/VolumeDialogImpl$RingerReceiver;->this$0:Lcom/android/systemui/volume/VolumeDialogImpl;
        invoke-virtual {v0}, Lcom/android/systemui/volume/VolumeDialogImpl;->toggleRingerMode()V
        return-void
    .end method
    
    1. בנתיב com/android/systemui/shade
      בקובץ NotificationShadeWindowView
      במתודה dispatchKeyEvent
      מיד אחרי השורה של הregisters
      להוסיף את הקוד הזה:
    # 1. בדיקה: האם זה סולמית (18)?
        invoke-virtual {p1}, Landroid/view/KeyEvent;->getKeyCode()I
        move-result v0
        const/16 v1, 0x12
        if-ne v0, v1, :original_code
    
        # 2. בדיקה: האם זו לחיצה (DOWN=0)?
        invoke-virtual {p1}, Landroid/view/KeyEvent;->getAction()I
        move-result v0
        const/4 v1, 0x1
        
        # אם זה UP, נבלע את המקש
        if-eqz v0, :check_locked
        return v1
    
        :check_locked
        # 3. בדיקה: האם המכשיר נעול?
        invoke-virtual {p0}, Landroid/widget/FrameLayout;->getContext()Landroid/content/Context;
        move-result-object v0
        
        const-string v2, "keyguard"
        invoke-virtual {v0, v2}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
        move-result-object v2
        check-cast v2, Landroid/app/KeyguardManager;
        
        # אם לא נעול -> לך לקוד המקורי (אל תשלח שידור)
        invoke-virtual {v2}, Landroid/app/KeyguardManager;->isKeyguardLocked()Z
        move-result v2
        if-nez v2, :do_broadcast
        goto :original_code
    
        :do_broadcast
        # 4. שליחת Broadcast
        new-instance v2, Landroid/content/Intent;
        const-string v3, "com.android.systemui.volume.TOGGLE_RINGER"
        invoke-direct {v2, v3}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
        
        const-string v3, "com.android.systemui"
        invoke-virtual {v2, v3}, Landroid/content/Intent;->setPackage(Ljava/lang/String;)Landroid/content/Intent;
    
        sget-object v3, Landroid/os/UserHandle;->CURRENT:Landroid/os/UserHandle;
        invoke-virtual {v0, v2, v3}, Landroid/content/Context;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
        
        return v1
    
        :original_code
    

    מראה מקום בספויילר:

    .method public final dispatchKeyEvent(Landroid/view/KeyEvent;)Z
        .registers 11
    # תחילת הוספה
    # 1. בדיקה: האם זה סולמית (18)?
        invoke-virtual {p1}, Landroid/view/KeyEvent;->getKeyCode()I
        move-result v0
        const/16 v1, 0x12
        if-ne v0, v1, :original_code
    
        # 2. בדיקה: האם זו לחיצה (DOWN=0)?
        invoke-virtual {p1}, Landroid/view/KeyEvent;->getAction()I
        move-result v0
        const/4 v1, 0x1
        
        # אם זה UP, נבלע את המקש
        if-eqz v0, :check_locked
        return v1
    
        :check_locked
        # 3. בדיקה: האם המכשיר נעול?
        invoke-virtual {p0}, Landroid/widget/FrameLayout;->getContext()Landroid/content/Context;
        move-result-object v0
        
        const-string v2, "keyguard"
        invoke-virtual {v0, v2}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
        move-result-object v2
        check-cast v2, Landroid/app/KeyguardManager;
        
        # אם לא נעול -> לך לקוד המקורי (אל תשלח שידור)
        invoke-virtual {v2}, Landroid/app/KeyguardManager;->isKeyguardLocked()Z
        move-result v2
        if-nez v2, :do_broadcast
        goto :original_code
    
        :do_broadcast
        # 4. שליחת Broadcast
        new-instance v2, Landroid/content/Intent;
        const-string v3, "com.android.systemui.volume.TOGGLE_RINGER"
        invoke-direct {v2, v3}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
        
        const-string v3, "com.android.systemui"
        invoke-virtual {v2, v3}, Landroid/content/Intent;->setPackage(Ljava/lang/String;)Landroid/content/Intent;
    
        sget-object v3, Landroid/os/UserHandle;->CURRENT:Landroid/os/UserHandle;
        invoke-virtual {v0, v2, v3}, Landroid/content/Context;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
        
        return v1
    
        :original_code
    # עד כאן
    
        .line 1
        iget-object v0, p0, Lcom/android/systemui/shade/NotificationShadeWindowView;->mInteractionEventHandler:Lcom/android/systemui/shade/NotificationShadeWindowViewController$1;
    

    בהצלחה!

    תגובה 1 תגובה אחרונה
    3

    • התחברות

    • אין לך חשבון עדיין? הרשמה

    • התחברו או הירשמו כדי לחפש.
    • פוסט ראשון
      פוסט אחרון
    0
    • חוקי הפורום
    • פופולרי
    • לא נפתר
    • משתמשים
    • חיפוש גוגל בפורום
    • צור קשר