דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • 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

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
L

lilo159

@lilo159
אודות
פוסטים
216
נושאים
16
שיתופים
0
קבוצות
0
עוקבים
9
עוקב אחרי
1

פוסטים

פוסטים אחרונים הגבוה ביותר שנוי במחלוקת

  • להורדה | aurora store כשר - אתם בוחרים איזה אפליקציות יהיו!
    L lilo159

    303ace4b-2f91-4fe0-8806-4334becb11ae-image.png
    קודם כל תודה לד' יתברך, זה פרוייקט שחשבתי שיקח לי שבוע, וסיימתי ביום..
    זו האפליקציה המקורית של המעדכן אפליקציות הנודע לפני ש @jacobel640 ערך אותה.

    היתרונות כאן נראה לי ברורים, לא צריך להוריד APK, להעלות לשרת וכו', האפלקציות תמיד מעודכנות וכו'.

    את האפליקציה ערכתי עם AI Studio, והצלחתי להגיע למגבלה היומית..
    בעזרת ד' בלנ"ד מאוחר יותר אציג את השינויים בקוד.

    ישנו קובץ JSON שמאוחסן ברשת (את שלי שמתי בGITHUB), שמכיל את רשימת האפליקיצות המותרות, בעזרת ד' אני עובד על הממשק לעריכה נוחה.
    לחלופין, לבקשת @iosi-poli, אפשרי גם לאחסן את הרשימה לבנה בassets.
    עוד דבר, את האפליקציה תרגמתי עם AI סטודיו גם כן, אז מחילה אם יש מילים לא מובנות או משהו, דווחו ואתקן בלנ"ד.
    אני מביא כאן את ה"דוגמית", יש שם ארבע אפליקציות.
    להורדת האפליקציה
    לגרסה עם קובץ הassets
    קובץ הJSON אמור להראות כך:

    [
      "com.whatsapp",
      "com.tranzmate",
      "com.waze",
      "tfilon.tfilon"
    ]
    

    אפשר ליצור קובץ כזה בגיטהאב, ללחוץ על RAW, ואז להתעיק את הקישור.

    חפשו בMT מנג'ר את השורה הזאת:

    https://raw.githubusercontent.com/lilor159357/aurora-whitelist/refs/heads/main/whitelist.json
    

    ותחליפו אותה עם הקישור לJSON שלכם, ויש לכם חנות אפליקציות שאתם מחליטים איזה אפליקציות יהיו בה!

    לגרסה עם הקובץ בassets, פשוט לערוך את הקובץ whitelist.json.

    השינויים בספויילר:


    להוסיף בנתיב com/aurora/store
    את הclass:
    AuroraApp$2
    (ליד הקלאס AuroraApp)

    # classes.dex
    
    .class Lcom/aurora/store/AuroraApp$2;
    .super Ljava/lang/Object;
    
    # interfaces
    .implements Ljava/lang/Runnable;
    
    
    # annotations
    .annotation system Ldalvik/annotation/EnclosingMethod;
        value = Lcom/aurora/store/AuroraApp;->onCreate()V
    .end annotation
    
    .annotation system Ldalvik/annotation/InnerClass;
        accessFlags = 0x0
        name = null
    .end annotation
    
    
    # instance fields
    .field final synthetic this$0:Lcom/aurora/store/AuroraApp;
    
    
    # direct methods
    .method constructor <init>(Lcom/aurora/store/AuroraApp;)V
        .registers 2
    
        iput-object p1, p0, Lcom/aurora/store/AuroraApp$2;->this$0:Lcom/aurora/store/AuroraApp;
    
        invoke-direct {p0}, Ljava/lang/Object;-><init>()V
    
        return-void
    .end method
    
    
    # virtual methods
    .method public run()V
        .registers 6
    
        :try_start_0
        new-instance v0, Ljava/net/URL;
    
        const-string v1, "https://raw.githubusercontent.com/lilor159357/aurora-whitelist/refs/heads/main/whitelist.json"
    
        invoke-direct {v0, v1}, Ljava/net/URL;-><init>(Ljava/lang/String;)V
    
        invoke-virtual {v0}, Ljava/net/URL;->openConnection()Ljava/net/URLConnection;
    
        move-result-object v0
    
        check-cast v0, Ljava/net/HttpURLConnection;
    
        new-instance v1, Ljava/io/BufferedReader;
    
        new-instance v2, Ljava/io/InputStreamReader;
    
        invoke-virtual {v0}, Ljava/net/HttpURLConnection;->getInputStream()Ljava/io/InputStream;
    
        move-result-object v0
    
        invoke-direct {v2, v0}, Ljava/io/InputStreamReader;-><init>(Ljava/io/InputStream;)V
    
        invoke-direct {v1, v2}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
    
        new-instance v0, Ljava/lang/StringBuilder;
    
        invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
    
        :goto_20
        invoke-virtual {v1}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;
    
        move-result-object v2
    
        if-eqz v2, :cond_2a
    
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        goto :goto_20
    
        :cond_2a
        new-instance v1, Lorg/json/JSONArray;
    
        invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v0
    
        invoke-direct {v1, v0}, Lorg/json/JSONArray;-><init>(Ljava/lang/String;)V
    
        sget-object v0, Lcom/aurora/store/AuroraApp;->authorizedApps:Ljava/util/List;
    
        invoke-interface {v0}, Ljava/util/List;->clear()V
    
        const/4 v0, 0x0
    
        :goto_39
        invoke-virtual {v1}, Lorg/json/JSONArray;->length()I
    
        move-result v2
    
        if-ge v0, v2, :cond_4b
    
        sget-object v2, Lcom/aurora/store/AuroraApp;->authorizedApps:Ljava/util/List;
    
        invoke-virtual {v1, v0}, Lorg/json/JSONArray;->getString(I)Ljava/lang/String;
    
        move-result-object v3
    
        invoke-interface {v2, v3}, Ljava/util/List;->add(Ljava/lang/Object;)Z
    
        add-int/lit8 v0, v0, 0x1
    
        goto :goto_39
        :try_end_4b
        .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_4b} :catch_4c
    
        :cond_4b
        return-void
    
        :catch_4c
        move-exception v0
    
        const-string v1, "Whitelist"
    
        const-string v2, "Failed to load whitelist"
    
        invoke-static {v1, v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
    
        return-void
    .end method
    

    אם אתם מעדיפים את הקובץ באפליציה עצמה (בassets)
    אז תשתמשו בקוד הזה בשביל AuroraApp$2:

    .class Lcom/aurora/store/AuroraApp$2;
    .super Ljava/lang/Object;
    .implements Ljava/lang/Runnable;
    
    # annotations
    .annotation system Ldalvik/annotation/EnclosingMethod; value = Lcom/aurora/store/AuroraApp;->onCreate()V .end annotation
    .annotation system Ldalvik/annotation/InnerClass; accessFlags = 0x0 name = null .end annotation
    
    # instance fields
    .field final synthetic this$0:Lcom/aurora/store/AuroraApp;
    
    # direct methods
    .method constructor <init>(Lcom/aurora/store/AuroraApp;)V
        .registers 2
        iput-object p1, p0, Lcom/aurora/store/AuroraApp$2;->this$0:Lcom/aurora/store/AuroraApp;
        invoke-direct {p0}, Ljava/lang/Object;-><init>()V
        return-void
    .end method
    
    # virtual methods
    .method public run()V
        .registers 6
        :try_start_0
        iget-object v0, p0, Lcom/aurora/store/AuroraApp$2;->this$0:Lcom/aurora/store/AuroraApp;
        invoke-virtual {v0}, Landroid/content/Context;->getAssets()Landroid/content/res/AssetManager;
        move-result-object v0
        const-string v1, "whitelist.json"
        invoke-virtual {v0, v1}, Landroid/content/res/AssetManager;->open(Ljava/lang/String;)Ljava/io/InputStream;
        move-result-object v0
        new-instance v1, Ljava/io/BufferedReader;
        new-instance v2, Ljava/io/InputStreamReader;
        invoke-direct {v2, v0}, Ljava/io/InputStreamReader;-><init>(Ljava/io/InputStream;)V
        invoke-direct {v1, v2}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
        new-instance v0, Ljava/lang/StringBuilder;
        invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
        :goto_1f
        invoke-virtual {v1}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;
        move-result-object v2
        if-eqz v2, :cond_29
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        goto :goto_1f
        :cond_29
        new-instance v1, Lorg/json/JSONArray;
        invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v0
        invoke-direct {v1, v0}, Lorg/json/JSONArray;-><init>(Ljava/lang/String;)V
        sget-object v0, Lcom/aurora/store/AuroraApp;->authorizedApps:Ljava/util/List;
        invoke-interface {v0}, Ljava/util/List;->clear()V
        const/4 v0, 0x0
        :goto_39
        invoke-virtual {v1}, Lorg/json/JSONArray;->length()I
        move-result v2
        if-ge v0, v2, :cond_4d
        sget-object v2, Lcom/aurora/store/AuroraApp;->authorizedApps:Ljava/util/List;
        invoke-virtual {v1, v0}, Lorg/json/JSONArray;->getString(I)Ljava/lang/String;
        move-result-object v3
        invoke-interface {v2, v3}, Ljava/util/List;->add(Ljava/lang/Object;)Z
        add-int/lit8 v0, v0, 0x1
        goto :goto_39
        :cond_4d
        :try_end_4d
        .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_4d} :catch_4e
        :goto_4e
        return-void
        :catch_4e
        move-exception v0
        const-string v1, "Whitelist"
        const-string v2, "Failed to load whitelist from assets"
        invoke-static {v1, v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
        return-void
    .end method
    

    שינויים בתוך הקלאס AuroraApp (בנתיב com/aurora/store):

    להוסיף אחרי static fields #
    את זה:

    .field public static authorizedApps:Ljava/util/List;
        .annotation system Ldalvik/annotation/Signature;
            value = {
                "Ljava/util/List<",
                "Ljava/lang/String;",
                ">;"
            }
        .end annotation
    .end field
    

    להוסיף בתוך onCreate
    לפני line 4. (אחרי ה-invoke-super)
    את זה:

        new-instance v0, Ljava/util/concurrent/CopyOnWriteArrayList;
    
        invoke-direct {v0}, Ljava/util/concurrent/CopyOnWriteArrayList;-><init>()V
    
        sput-object v0, Lcom/aurora/store/AuroraApp;->authorizedApps:Ljava/util/List;
    
        new-instance v0, Ljava/lang/Thread;
    
        new-instance v1, Lcom/aurora/store/AuroraApp$2;
    
        invoke-direct {v1, p0}, Lcom/aurora/store/AuroraApp$2;-><init>(Lcom/aurora/store/AuroraApp;)V
    
        invoke-direct {v0, v1}, Ljava/lang/Thread;-><init>(Ljava/lang/Runnable;)V
    
        invoke-virtual {v0}, Ljava/lang/Thread;->start()V
    

    שינויים בקלאס MainActivity (בנתיב com/aurora/store):

    חסימת פתיחת קישורים לא מורשים:
    בתוך onCreate
    לפני line 15. (אחרי ה-invoke-super)

        invoke-virtual {p0}, Landroid/app/Activity;->getIntent()Landroid/content/Intent;
        move-result-object v0
        invoke-virtual {v0}, Landroid/content/Intent;->getData()Landroid/net/Uri;
        move-result-object v0
        if-eqz v0, :cond_3c
        const-string v1, "id"
        invoke-virtual {v0, v1}, Landroid/net/Uri;->getQueryParameter(Ljava/lang/String;)Ljava/lang/String;
        move-result-object v0
        if-eqz v0, :cond_3c
        sget-object v1, Lcom/aurora/store/AuroraApp;->authorizedApps:Ljava/util/List;
        const/4 v2, 0x1
        if-eqz v1, :cond_2c
        invoke-interface {v1, v0}, Ljava/util/List;->contains(Ljava/lang/Object;)Z
        move-result v0
        if-eqz v0, :cond_2c
        const/4 v2, 0x0
        :cond_2c
        if-eqz v2, :cond_3c
        const-string v0, "אפליקציה זו אינה מורשת"
        const/4 v1, 0x1
        invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
        move-result-object v0
        invoke-virtual {v0}, Landroid/widget/Toast;->show()V
        invoke-virtual {p0}, Landroid/app/Activity;->finish()V
        return-void
        :cond_3c
    

    הסתרת כפתור המשחקים:
    בתוך method public constructor <init>()V
    להחליף מline 39. עד לפני line 65.
    עם זה:

    .line 39
        const v1, 0x7f0902fa
    .line 42
        invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
    .line 45
        move-result-object v1
    .line 46
        const/4 v2, 0x2
    .line 49
        new-array v3, v2, [Ljava/lang/Integer;
    .line 52
        const/4 v4, 0x0
    .line 53
        aput-object v0, v3, v4
    .line 56
        const/4 v0, 0x1
    .line 57
        aput-object v1, v3, v0
    

    ובתוך onCreate
    להוסיף לפני line 148.
    את זה:

        invoke-virtual {v0}, Lcom/google/android/material/navigation/NavigationBarView;->getMenu()Landroid/view/Menu;
        move-result-object v5
        const v6, 0x7f090144
        invoke-interface {v5, v6}, Landroid/view/Menu;->removeItem(I)V
    

    שינויים בקלאס AppDetailsFragment (בנתיב com/aurora/store/view/ui/details):

    להוסיף בתוך method public final V
    לפני line 10.

    invoke-virtual {v0}, Lx4/a;->v0()LM2/a;
     move-result-object v3
     check-cast v3, Lcom/aurora/store/databinding/FragmentDetailsBinding;
    
     #זה מסתיר את התגובות
     # Get the review layout binding from the main binding
     iget-object v4, v3, Lcom/aurora/store/databinding/FragmentDetailsBinding;->layoutDetailsReview:Lcom/aurora/store/databinding/LayoutDetailsReviewBinding;
     # Get its root view and set visibility to GONE
     invoke-virtual {v4}, Lcom/aurora/store/databinding/LayoutDetailsReviewBinding;->getRoot()Landroid/view/View;
     move-result-object v4
     const/16 v5, 0x8
     invoke-virtual {v4, v5}, Landroid/view/View;->setVisibility(I)V
    
     #זה מסתיר את הצילו"מים בפרטי אפליקציה
     iget-object v6, v3, Lcom/aurora/store/databinding/FragmentDetailsBinding;->layoutDetailDescription:Lcom/aurora/store/databinding/LayoutDetailsDescriptionBinding;
     # Get the EpoxyRecyclerView (which contains the screenshots) from the description layout binding
     iget-object v7, v6, Lcom/aurora/store/databinding/LayoutDetailsDescriptionBinding;->epoxyRecycler:Lcom/airbnb/epoxy/EpoxyRecyclerView;
     # Set its visibility to GONE
     const/16 v8, 0x8
     invoke-virtual {v7, v8}, Landroid/view/View;->setVisibility(I)V
    

    שינויים בקלאס StreamCluster (בנתיב com/aurora/gplayapi/data/models):
    להחליף את כל הmethod:
    getClusterAppList
    עם זה:

    .method public final getClusterAppList()Ljava/util/List;
    .registers 7
    	.annotation system Ldalvik/annotation/Signature;
    		value = {
    			"()Ljava/util/List<",
    			"Lcom/aurora/gplayapi/data/models/App;",
    			">;"
    		}
    	.end annotation
    
    	.prologue
    	.line 1
    	iget-object v0, p0, Lcom/aurora/gplayapi/data/models/StreamCluster;->clusterAppList:Ljava/util/List;
    
    	.line 2
    	sget-object v1, Lcom/aurora/store/AuroraApp;->authorizedApps:Ljava/util/List;
    
    	.line 3
    	if-eqz v1, :cond_31
    
    	invoke-interface {v1}, Ljava/util/List;->isEmpty()Z
    
    	move-result v2
    
    	if-eqz v2, :cond_d
    
    	goto :goto_31
    
    	.line 4
    	:cond_d
    	new-instance v2, Ljava/util/ArrayList;
    
    	invoke-direct {v2}, Ljava/util/ArrayList;-><init>()V
    
    	.line 5
    	invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
    
    	move-result-object v3
    
    	.line 6
    	:cond_16
    	:goto_16
    	invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z
    
    	move-result v4
    
    	if-eqz v4, :cond_30
    
    	.line 7
    	invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;
    
    	move-result-object v4
    
    	check-cast v4, Lcom/aurora/gplayapi/data/models/App;
    
    	.line 8
    	invoke-virtual {v4}, Lcom/aurora/gplayapi/data/models/App;->getPackageName()Ljava/lang/String;
    
    	move-result-object v5
    
    	.line 9
    	invoke-interface {v1, v5}, Ljava/util/List;->contains(Ljava/lang/Object;)Z
    
    	move-result v5
    
    	if-eqz v5, :cond_16
    
    	.line 10
    	invoke-interface {v2, v4}, Ljava/util/List;->add(Ljava/lang/Object;)Z
    
    	goto :goto_16
    
    	.line 12
    	:cond_30
    	return-object v2
    
    	.line 13
    	:cond_31
    	:goto_31
    	new-instance v0, Ljava/util/ArrayList;
    
    	invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
    
    	return-object v0
    .end method
    

    אפליקציות להורדה

  • להורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!
    L lilo159

    icon (1).png
    metrolist זו אפליקציית "לקוח" של יוטיוב מיוזיק. ניתן להתחבר עם החשבון גוגל שלכם.
    זה נראה לי fork של innertune, שבעבר מישהו כאן העלה ללא תמונות, אך כיום האפליקציה לא עובדת.
    יש מספר אתרים שמבצעים העברת פלייליסטים מספוטיפיי ליוטיוב, אולי בהמשך אעלה.
    עודכן לגרסה 12.6.0
    להורדה

    כנסו לספויילר כדי לראות את השינויים שעשיתי.

    לחסימת תמונות:
    בנתיב: com/metrolist/innertube/models/Thumbnail
    להוסיף בתוך:

    .method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V
        .registers 7
    
        .line 1
        and-int/lit8 v0, p1, 0x7
    
        .line 3
        const/4 v1, 0x7
    
        .line 4
        if-ne v1, v0, :cond_f
    
        .line 6
        invoke-direct {p0}, Ljava/lang/Object;-><init>()V
    
        .line 9
        iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String;
    
        .line 11
        iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer;
    
        .line 13
        iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer;
    
        .line 15
        return-void
    
        .line 16
        :cond_f
        sget-object p2, Lo9/d0;->a:Lo9/d0;
    
        .line 18
        invoke-virtual {p2}, Lo9/d0;->d()Lwe/g;
    
        .line 21
        move-result-object p2
    
        .line 22
        invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V
    
        .line 25
        const/4 p1, 0x0
    
        .line 26
        throw p1
    .end method
    

    את השורה הזו:

    .method public synthetic constructor <init>(ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V
        .registers 7
    
        .line 1
        and-int/lit8 v0, p1, 0x7
    
        .line 3
        const/4 v1, 0x7
    
        .line 4
        if-ne v1, v0, :cond_f
    
        .line 6
        invoke-direct {p0}, Ljava/lang/Object;-><init>()V
    
        const-string p2, "" #:להוסיף את זה
    
        .line 9
        iput-object p2, p0, Lcom/metrolist/innertube/models/Thumbnail;->a:Ljava/lang/String;
    
        .line 11
        iput-object p3, p0, Lcom/metrolist/innertube/models/Thumbnail;->b:Ljava/lang/Integer;
    
        .line 13
        iput-object p4, p0, Lcom/metrolist/innertube/models/Thumbnail;->c:Ljava/lang/Integer;
    
        .line 15
        return-void
    
        .line 16
        :cond_f
        sget-object p2, Lo9/d0;->a:Lo9/d0;
    
        .line 18
        invoke-virtual {p2}, Lo9/d0;->d()Lwe/g;
    
        .line 21
        move-result-object p2
    
        .line 22
        invoke-static {p1, v1, p2}, Lye/a1;->j(IILwe/g;)V
    
        .line 25
        const/4 p1, 0x0
    
        .line 26
        throw p1
    .end method
    

    לעריכת הWebview של הכניסה:
    לחפש בsmali (כי השם של הclass דינמי ובעתיד יכול להשתנות):
    const-string p1, "https://music.youtube.com"

    .class public final Lla/g2;
    .super Landroid/webkit/WebViewClient;
    .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e"
    
    
    # instance fields
    .field public final synthetic a:Landroid/webkit/WebView;
    
    .field public final synthetic b:Lge/x;
    
    .field public final synthetic c:Ly0/w0;
    
    .field public final synthetic d:Ly0/w0;
    
    .field public final synthetic e:Ly0/w0;
    
    .field public final synthetic f:Ly0/w0;
    
    
    # direct methods
    .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V
        .registers 7
    
        .line 1
        iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView;
    
        .line 3
        iput-object p2, p0, Lla/g2;->b:Lge/x;
    
        .line 5
        iput-object p3, p0, Lla/g2;->c:Ly0/w0;
    
        .line 7
        iput-object p4, p0, Lla/g2;->d:Ly0/w0;
    
        .line 9
        iput-object p5, p0, Lla/g2;->e:Ly0/w0;
    
        .line 11
        iput-object p6, p0, Lla/g2;->f:Ly0/w0;
    
        .line 13
        invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V
    
        .line 16
        return-void
    .end method
    
    
    # virtual methods
    .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V
        .registers 9
    
        .line 1
        const-string v0, "view"
    
        .line 3
        invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V
    
        .line 6
        const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)"
    
        .line 8
        iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView;
    
        .line 10
        invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
    
        .line 13
        const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)"
    
        .line 15
        invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
    
        .line 18
        if-eqz p2, :cond_42
    
        .line 20
        const-string p1, "https://music.youtube.com"
    
        .line 22
        const/4 v0, 0x0
    
        .line 23
        invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z
    
        .line 26
        move-result p1
    
        .line 27
        const/4 v0, 0x1
    
        .line 28
        if-ne p1, v0, :cond_42
    
        .line 30
        invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager;
    
        .line 33
        move-result-object p1
    
        .line 34
        invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String;
    
        .line 37
        move-result-object p1
    
        .line 38
        const-string p2, "getCookie(...)"
    
        .line 40
        invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V
    
        .line 43
        iget-object p2, p0, Lla/g2;->c:Ly0/w0;
    
        .line 45
        invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V
    
        .line 48
        new-instance v0, Lla/v1;
    
        .line 50
        iget-object v3, p0, Lla/g2;->f:Ly0/w0;
    
        .line 52
        const/4 v5, 0x1
    
        .line 53
        iget-object v1, p0, Lla/g2;->d:Ly0/w0;
    
        .line 55
        iget-object v2, p0, Lla/g2;->e:Ly0/w0;
    
        .line 57
        const/4 v4, 0x0
    
        .line 58
        invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V
    
        .line 61
        const/4 p1, 0x3
    
        .line 62
        iget-object p2, p0, Lla/g2;->b:Lge/x;
    
        .line 64
        invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1;
    
        .line 67
        :cond_42
        return-void
    .end method
    
    

    השינויים:

    .class public final Lla/g2;
    .super Landroid/webkit/WebViewClient;
    .source "r8-map-id-2a6a6c923824ab40ba6eb9af44cd87caf231110913720ddc8f6974f07061f26e"
    
    
    # instance fields
    .field public final synthetic a:Landroid/webkit/WebView;
    
    .field public final synthetic b:Lge/x;
    
    .field public final synthetic c:Ly0/w0;
    
    .field public final synthetic d:Ly0/w0;
    
    .field public final synthetic e:Ly0/w0;
    
    .field public final synthetic f:Ly0/w0;
    
    
    # direct methods
    .method public constructor <init>(Landroid/webkit/WebView;Lge/x;Ly0/w0;Ly0/w0;Ly0/w0;Ly0/w0;)V
        .registers 9 # לשנות ל9
    
        # להוסיף לפני שורה 1
        invoke-direct {p0}, Landroid/webkit/WebViewClient;-><init>()V
        # עד כאן
       
         .line 1
        iput-object p1, p0, Lla/g2;->a:Landroid/webkit/WebView;
    
        .line 3
        iput-object p2, p0, Lla/g2;->b:Lge/x;
    
        .line 5
        iput-object p3, p0, Lla/g2;->c:Ly0/w0;
    
        .line 7
        iput-object p4, p0, Lla/g2;->d:Ly0/w0;
    
        .line 9
        iput-object p5, p0, Lla/g2;->e:Ly0/w0;
    
        .line 11
        iput-object p6, p0, Lla/g2;->f:Ly0/w0;
    
        .line 13 # להחליף את השורה שהיתה מתחת לשורה 13
        # מכאן
        invoke-virtual {p1}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings;
        move-result-object v0
        const/4 v1, 0x0
        invoke-virtual {v0, v1}, Landroid/webkit/WebSettings;->setLoadsImagesAutomatically(Z)V
        # עד כאן
        .line 16
        return-void
    .end method
    
    
    # virtual methods
    .method public final onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V
        .registers 9
    
        .line 1
        const-string v0, "view"
    
        .line 3
        invoke-static {p1, v0}, Lud/j;->f(Ljava/lang/Object;Ljava/lang/String;)V
    
        # (!javascriptשימו לב לשורה שאחרי ה) להוסיף את זה 
        const-string v1, "javascript:(function(){function cleanPage(){const footer=document.querySelector('footer');if(footer)footer.remove();const langSelector=document.querySelector('[jscontroller=\"xiZRqc\"]');if(langSelector)langSelector.remove();const guestModeDiv=document.querySelector('.RDsYTb');if(guestModeDiv)guestModeDiv.remove();document.querySelectorAll('ytmusic-player-page, ytmusic-player-bar[slot=\"player-bar\"], #mini-guide, #guide, ytmusic-nav-bar .left-content, ytmusic-nav-bar .center-content').forEach(element=>{element.style.setProperty('display','none','important')});const navBarRight=document.querySelector('ytmusic-nav-bar .right-content');if(navBarRight){navBarRight.style.setProperty('margin-left','auto','important')}const popup=document.querySelector('tp-yt-iron-dropdown');if(popup&&popup.style.display!=='none'){const header=popup.querySelector('ytd-active-account-header-renderer');if(header)header.style.setProperty('display','none','important');popup.querySelectorAll('yt-multi-page-menu-section-renderer').forEach(section=>{if(!section.querySelector('a[href=\"/logout\"]')){section.style.setProperty('display','none','important')}else{section.querySelectorAll('ytd-compact-link-renderer').forEach(item=>{if(!item.contains(section.querySelector('a[href=\"/logout\"]'))){item.style.setProperty('display','none','important')}})}})}const immersiveBackground=document.querySelector('#background.immersive-background');if(immersiveBackground){immersiveBackground.style.setProperty('display','none','important')}const chipContainer=document.querySelector('ytmusic-chip-cloud-renderer');if(chipContainer){chipContainer.style.setProperty('display','none','important')}const allShelves=document.querySelectorAll('ytmusic-carousel-shelf-renderer');allShelves.forEach((shelf,index)=>{if(index===0){const carousel=shelf.querySelector('#ytmusic-carousel');if(carousel)carousel.style.setProperty('display','none','important');const header=shelf.querySelector('ytmusic-carousel-shelf-basic-header-renderer');if(header){const strapline=header.querySelector('.strapline');if(strapline)strapline.style.setProperty('display','none','important');const buttonGroup=header.querySelector('#button-group');if(buttonGroup)buttonGroup.style.setProperty('display','none','important')}const navButtons=shelf.querySelector('.button-group.style-scope.ytmusic-carousel-shelf-renderer');if(navButtons)navButtons.style.setProperty('display','none','important')}else{shelf.style.setProperty('display','none','important')}});const tastebuilder=document.querySelector('ytmusic-tastebuilder-shelf-renderer');if(tastebuilder){tastebuilder.style.setProperty('display','none','important')}const titleElement=document.querySelector('ytmusic-carousel-shelf-renderer yt-formatted-string.title');if(titleElement){const newText='אם זאת פעם ראשונה שאתם נכנסים, אתם יכולים לחזור כעת לאפליקציה (מומלץ לסגור לגמרי את האפליקציה ולפתוח מחדש, כדי שהיא תקלוט שנכנסתם), אם כבר הייתם מחוברים ואתם רוצים להחליף חשבון, צאו מהחשבון (לחיצה על העיגול) והתחילו מחדש את התהליך.';if(titleElement.textContent!==newText){titleElement.textContent=newText;titleElement.style.setProperty('direction','rtl','important');titleElement.style.setProperty('white-space','normal','important');titleElement.style.setProperty('text-overflow','clip','important');titleElement.style.setProperty('overflow','visible','important');titleElement.style.setProperty('height','auto','important');titleElement.style.setProperty('font-size','16px','important');titleElement.style.setProperty('font-weight','normal','important');titleElement.style.setProperty('line-height','1.5','important');titleElement.style.setProperty('color','white','important')}}}cleanPage();const observer=new MutationObserver(()=>{cleanPage()});observer.observe(document.body,{childList:true,subtree:true})})();"
       
        # עם הנתיב הנכון la/g2 שימו לב שכאן צריך להחליף את
        # (שבעוד כמה שורות .line 8 כמו נגיד אחרי) אפשר למצוא דוגמאות ברחבי הקוד
        iget-object v2, p0, Lla/g2;->a:Landroid/webkit/WebView;
        
        invoke-virtual {v2, v1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
    	
        # עד כאן
    	
        .line 6
        const-string p1, "javascript:Android.onRetrieveVisitorData(window.yt.config_.VISITOR_DATA)"
    	
        .line 8
        iget-object v0, p0, Lla/g2;->a:Landroid/webkit/WebView;
    
        .line 10
        invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
    
        .line 13
        const-string p1, "javascript:Android.onRetrieveDataSyncId(window.yt.config_.DATASYNC_ID)"
    
        .line 15
        invoke-virtual {v0, p1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
    
        .line 18
        if-eqz p2, :cond_42
    
        .line 20
        const-string p1, "https://music.youtube.com"
    
        .line 22
        const/4 v0, 0x0
    
        .line 23
        invoke-static {p2, p1, v0}, Lde/t;->b0(Ljava/lang/String;Ljava/lang/String;Z)Z
    
        .line 26
        move-result p1
    
        .line 27
        const/4 v0, 0x1
    
        .line 28
        if-ne p1, v0, :cond_42
    
        .line 30
        invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager;
    
        .line 33
        move-result-object p1
    
        .line 34
        invoke-virtual {p1, p2}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String;
    
        .line 37
        move-result-object p1
    
        .line 38
        const-string p2, "getCookie(...)"
    
        .line 40
        invoke-static {p1, p2}, Lud/j;->e(Ljava/lang/Object;Ljava/lang/String;)V
    
        .line 43
        iget-object p2, p0, Lla/g2;->c:Ly0/w0;
    
        .line 45
        invoke-interface {p2, p1}, Ly0/w0;->setValue(Ljava/lang/Object;)V
    	
        .line 48
        new-instance v0, Lla/v1;
    
        .line 50
        iget-object v3, p0, Lla/g2;->f:Ly0/w0;
    
        .line 52
        const/4 v5, 0x1
    
        .line 53
        iget-object v1, p0, Lla/g2;->d:Ly0/w0;
    
        .line 55
        iget-object v2, p0, Lla/g2;->e:Ly0/w0;
    
        .line 57
        const/4 v4, 0x0
    
        .line 58
        invoke-direct/range {v0 .. v5}, Lla/v1;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lid/c;I)V
    
        .line 61
        const/4 p1, 0x3
    
        .line 62
        iget-object p2, p0, Lla/g2;->b:Lge/x;
    
        .line 64
        invoke-static {p2, v4, v4, v0, p1}, Lge/a0;->z(Lge/x;Lid/h;Lge/y;Ltd/e;I)Lge/s1;
    
        .line 67
        :cond_42
        return-void
    .end method
    
    

    אפליקציות להורדה

  • להורדה | מכשיר אפליקציות חצי אוטומטי
    L lilo159

    בעזרת ד'

    לפניכם תוכנה די פשוטה, שהינה בסיס להכשרת אפליקציות מבוססות עדכונים (כמו ספוטיפיי לדוג').
    את התוכנה כמובן פיתח AI, אני רק תיווכתי...
    1303763b-6dda-4314-889e-5bd58c9369e8-image.png
    אם יש לכם JAVA אתם יכולים להוריד את הגרסה הזאת:
    להורדה
    אם אתם לא יודעים מה זה JAVA תורידו את הגרסה הזאת:
    להורדה

    אם אתם לא יודעים מה זה JAVA אבל בכל זאת רוצים להוריד גרסה ששוקלת טיפה פחות אז אתם יכולים להוריד JAVA מכאן.

    קבצי הכשרה:
    Spotify
    Metrolist
    BIT (לא בדיוק הכשרה, פשוט מאפשר התקנה שלא מהחנות)

    למעוניינים, אפליקציה לחילוץ APK.

    על תכולת התוכנה:

    התוכנה היא בעצם סקריפט של פייתון, ומשתמשת בAPKTOOL, APKEDITOR וב-UBER-SIGNER.

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

    התוכנה חצי אוטומטית, כיוון שבאופן ראשוני צריך לדעת (לא המשתמש, מי שיוצר את קובץ העריכה) איך בכלל עורכים ידנית את האפליקציה, ואחרי שיוצרים קובץ פאצ' (עם AI כמובן), כל הגרסאות הבאות יוכלו להיות מוכשרות באופן אוטומטי (כמובן בהנחה שלא השתנו הנתיבים המוחלטים שבתוך האפליקציה, מה שבדרך כלל לא אמור לקרות).

    כרגע יש לי שני קבצי הכשרה שמבוססות על המדריכים שלי, לספוטיפיי (כן, יש כאלה שמשלמים על פרימיום..) ולמטרוליסט.
    אך כמובן אני מאוד אשמח שתעלו רעיונות לעוד אפליקציות מבוססות עדכונים, או שתשתפו בעריכות קבועות שאתם יודעים לעשות באפליקציות שכאלה, כדי שניצור עוד קבצי הכשרה.
    בהצלחה!

    נ.ב
    האמת היא שגם התחלתי לבנות (AI) אפליקציה שתעשה זאת, אך נתקעתי בשלב החתימה. כל העריכה עובדת, אבל צריך לחתום ידנית. די הרמתי ידיים, מי שירצה להמשיך אותה, יבורך.
    אני מתלבט גם אולי לנסות ליצור קבצי פאצ' ללאקי פאצ'ר או לREVANCED מנג'ר, אם מישהו התעסק עם זה פעם אשמח לשמוע.

    כהתחלה חשבתי אולי על וואצפ, למרות שיש מישהו שכבר עושה את זה, אבל בשביל ההנגשה, שאלתי לפני שאני ניגש לזה, שכן אין לי וואצפ בכלל: האם ידוע לכם למה הוא לא עורך את הוואצפ הרגיל לשימוש כמכשיר מקושר? וכן אשמח לדעת איזה דברים צריך להכשיר. תודה.

    עזרה הדדית אפליקציות

  • שיתוף | סוף סוף זה הגיע, מדריך לעריכת ספוטיפיי ללא תמונות + גרסאות מוכנות
    L lilo159

    ספוטיפיי ללא תמונות רגיל.
    ספוטיפיי ללא תמונות - פרימיום (ע"י revenced manger)

    תקנו אותי אם אני טועה, נראה לי שיש יתרון (למי שצריך) בשימוש בגרסה זו על פני חסימת הוסטים/vpn, שההוסט חוסם את טעינת הסרטון כולו, משא"כ בגרסה זו, שהיא חוסמת רק את הצגת הוידאו, בעוד השמע ממשיך לעבוד. נפק"מ לפודקאסטים שהם סרטון.

    בMT manger:
    dex editor plus:

    1. חסימת כל התמונות:
      com->spotify->image.esperanto.proto->EsImage$ImageData:
      לשנות את השורה שמתחת ל-line 1:
    .method public final getData()Lp/xa7;
        .registers 2
    
        .line 1
        iget-object v0, p0, Lcom/spotify/image/esperanto/proto/EsImage$ImageData;->data_:Lp/xa7;
    
        .line 3
        return-object v0
    .end method
    
    

    לשנות ל- const/4 v0, 0x0:

    .method public final getData()Lp/xa7;
        .registers 2
    
        .line 1
        const/4 v0, 0x0
        .line 3
        return-object v0
    .end method
    
    
    1. חסימת הסרטונים:
      com->spotify->betamax->player->VideoSurfaceView:
      לשנות את השורה שמתחת ל-line 1:
    .method public getTextureView()Landroid/view/TextureView;
        .registers 2
    
        .line 1
        iget-object v0, p0, Lcom/spotify/betamax/player/VideoSurfaceView;->a:Landroid/view/TextureView;
    
        .line 3
        return-object v0
    .end method
    
    

    לשנות ל- const/4 v0, 0x0:

    .method public getTextureView()Landroid/view/TextureView;
        .registers 2
    
        .line 1
        const/4 v0, 0x0
        .line 3
        return-object v0
    .end method
    
    
    1. חסימת התמונה שבשיתוף:
      למחוק את הclass:
      com->spotify->share->housekeepingimpl->ShareHouseKeepingWorker

    2. אפשרי לפרוץ עם revenced manager.

    בהצלחה!

    אפליקציות להורדה

  • מדריך | Webview מסונן (רוט)
    L lilo159

    בין הזמנים וזה...
    תמיד הפרוייקטים האלו נראים יותר גדולים ממה שהם...
    2ef51794-89e2-4925-8a27-57fe998de8fb-image.png
    בקיצור,
    כמו תמיד, הAI הוא המתכנת, אבל האחריות עליכם...

    נתחיל מאיך זה מסנן:
    אתם מאחסנים קודם כל איפה שהוא באינטרנט (נגיד בגיטהאב, בתור קובץ RAW) קובץ JSON בפורמט הזה:

    {
      "global_whitelist":[
        "example.com",
        "more-example.com"
      ],
      "apps": {
        "com.example.blocked_app": {
          "policy": "blocked"
        },
        "com.tranzmate": {
          "policy": "open"
        },
        "com.waze": {
          "policy": "global"    
        },
        "com.example.custom_app": {
          "policy": "custom",
          "custom_whitelist":[
            "myspecial-api.com",
            "private-server.net"
          ]
        }
      }
    }
    

    יש כאן ארבעה מצבים:

    • blocked - חוסם את כל הקישורים באפליקציה
    • open - פותח את כל הקישורים באפליקציה
    • global - פותח רק את הקישורים שהוגדרו בתוך global_whitelist
    • custom - פותח רק את הקישורים שהוגדרו custom_whitelist

    באם אפליקציה לא הוגדרה בתוך הרשימה, היא כמובן פשוט תהיה על מצב גלובלי.
    וכן, אם לא הWEBVIEW לא יצליח לקבל את הרשימה, אז הכל יהיה חסום. (לומדים מטעויות, ע"ע אורורה סטור...)

    העריכה שאנחנו עושים לאפליקציה מוסיפה לה לוגים, כך שאפשר לראות את הקישור החסום שניסינו להכנס אליו לצורך פתיחה שלו.

    כמו כן ישנה תמיכה בקישורים מלאים, דהיינו, אם אנחנו רוצים לפתוח קישור מסויים, אבל פתיחה של הHOST תפתח גם קישור אחר שאנחנו לא רוצים, בשביל זה אפשר לציין את הנתיב המלא או היותר כולל, דהיינו:
    אם נזין את הקישור הזה:

    example.com/example
    

    אז הקישור הזה יהיה חסום:

    example.com/bad-example
    

    עכשיו לשינויים בתוך האפליקציה:
    למעשה לא ניסיתי את זה על הWEBVIEW של גוגל, כי אני משתמש בדאמבדרויד, שזה סוג של linageOS, שמשתמש בWEBVIEW משלו, אבל אולי זה אפשרי להשתמש איתו גם בגרסאות אחרות, איני יודע. אם יהיה ביקוש אני אנסה בלי נדר על של גוגל, אבל לכאורה יש להם הגנות. נראה.

    האפליקציה נמצאת בנתיב /product/app/webview/

    1. בנתיב com/android/webview/chromium
      ליצור את הקלאס UrlFetcher
      שזה תוכנו:
    .class public Lcom/android/webview/chromium/UrlFetcher;
    .super Ljava/lang/Thread;
    
    .field public static sJsonConfig:Lorg/json/JSONObject;
    
    .method static constructor <clinit>()V
        .registers 1
        const/4 v0, 0x0
        sput-object v0, Lcom/android/webview/chromium/UrlFetcher;->sJsonConfig:Lorg/json/JSONObject;
        return-void
    .end method
    
    .method public constructor <init>()V
        .registers 1
        invoke-direct {p0}, Ljava/lang/Thread;-><init>()V
        return-void
    .end method
    
    .method public static isAllowed(Ljava/lang/String;)Z
        .registers 11
        
        const/4 v0, 0x0
        const/4 v2, 0x1
        
        if-nez p0, :cond_0
        return v0
        
        :cond_0
        # === 1. הדפסת הכתובת המלאה והמקורית מיד כשהיא מגיעה ===
        const-string v1, "UrlFetcher"
        new-instance v3, Ljava/lang/StringBuilder;
        invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
        const-string v4, ">>> Intercepted URL: "
        invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v3, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v3
        invoke-static {v1, v3}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
    
        const-string v1, "javascript:"
        invoke-virtual {p0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
        move-result v1
        if-eqz v1, :cond_1
        return v2
        
        :cond_1
        const-string v1, "data:text/html"
        invoke-virtual {p0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
        move-result v1
        if-eqz v1, :cond_2
        return v2
        
        :cond_2
        # === 2. חילוץ ה-Host לצורך הדפסה בלוגקט (כמו שביקשת) ===
        invoke-static {p0}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
        move-result-object v3
        invoke-virtual {v3}, Landroid/net/Uri;->getHost()Ljava/lang/String;
        move-result-object v3
        
        if-nez v3, :print_host
        goto :host_done
        
        :print_host
        const-string v1, "UrlFetcher"
        new-instance v4, Ljava/lang/StringBuilder;
        invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
        const-string v5, ">>> Extracted Host: "
        invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v4, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v4
        invoke-static {v1, v4}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
        
        :host_done
        # הופך את הכתובת לאותיות קטנות למניעת בעיות Case Sensitivity (שומר במשתנה v3)
        invoke-virtual {p0}, Ljava/lang/String;->toLowerCase()Ljava/lang/String;
        move-result-object v3
    
        # === 3. המתנה לקובץ ה-JSON מגיטהאב ===
        const/4 v4, 0x0
        :wait_loop
        sget-object v1, Lcom/android/webview/chromium/UrlFetcher;->sJsonConfig:Lorg/json/JSONObject;
        if-nez v1, :after_wait
        const-wide/16 v5, 0x64
        :try_start_sleep
        invoke-static {v5, v6}, Ljava/lang/Thread;->sleep(J)V
        :try_end_sleep
        .catch Ljava/lang/Exception; {:try_start_sleep .. :try_end_sleep} :catch_sleep
        :catch_sleep
        add-int/lit8 v4, v4, 0x1
        const/16 v5, 0x1e
        if-lt v4, v5, :wait_loop
        
        :after_wait
        sget-object v1, Lcom/android/webview/chromium/UrlFetcher;->sJsonConfig:Lorg/json/JSONObject;
        if-nez v1, :config_ok
        const-string v1, "UrlFetcher"
        const-string v3, ">>> JSON is NULL! Blocking for safety."
        invoke-static {v1, v3}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
        return v0
        
        :config_ok
        # === 4. שליפת האפליקציה הנוכחית והמדיניות שלה מה-JSON ===
        invoke-static {}, Landroid/app/ActivityThread;->currentPackageName()Ljava/lang/String;
        move-result-object v4
        if-nez v4, :pkg_ok
        const-string v4, "unknown_package"
        :pkg_ok
        
        const-string v5, "apps"
        invoke-virtual {v1, v5}, Lorg/json/JSONObject;->optJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;
        move-result-object v5
        
        const-string v6, "global"
        
        if-nez v5, :check_app_node
        goto :policy_set
        
        :check_app_node
        invoke-virtual {v5, v4}, Lorg/json/JSONObject;->optJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;
        move-result-object v5
        if-nez v5, :get_policy
        goto :policy_set
        
        :get_policy
        const-string v7, "policy"
        invoke-virtual {v5, v7, v6}, Lorg/json/JSONObject;->optString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
        move-result-object v6
        
        :policy_set
        const-string v7, "UrlFetcher"
        new-instance v8, Ljava/lang/StringBuilder;
        invoke-direct {v8}, Ljava/lang/StringBuilder;-><init>()V
        const-string v9, ">>> App: "
        invoke-virtual {v8, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v8, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        const-string v4, " | Policy: "
        invoke-virtual {v8, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v8, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v8}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v4
        invoke-static {v7, v4}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
    
        # === 5. אכיפת המדיניות (פתוח/חסום/כללי/מותאם) ===
        const-string v4, "blocked"
        invoke-virtual {v6, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
        move-result v4
        if-eqz v4, :check_open
        return v0
        
        :check_open
        const-string v4, "open"
        invoke-virtual {v6, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
        move-result v4
        if-eqz v4, :check_custom
        return v2
        
        :check_custom
        const-string v4, "custom"
        invoke-virtual {v6, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
        move-result v4
        if-eqz v4, :check_global
        
        if-nez v5, :load_custom
        return v0
        
        :load_custom
        const-string v4, "custom_whitelist"
        invoke-virtual {v5, v4}, Lorg/json/JSONObject;->optJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;
        move-result-object v1
        goto :process_array
        
        :check_global
        const-string v4, "global_whitelist"
        invoke-virtual {v1, v4}, Lorg/json/JSONObject;->optJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;
        move-result-object v1
        
        :process_array
        if-nez v1, :array_loop_init
        return v0
        
        :array_loop_init
        invoke-virtual {v1}, Lorg/json/JSONArray;->length()I
        move-result v4
        const/4 v5, 0x0
        
        :array_loop
        if-ge v5, v4, :array_end
        invoke-virtual {v1, v5}, Lorg/json/JSONArray;->optString(I)Ljava/lang/String;
        move-result-object v6
        if-eqz v6, :array_next
        invoke-virtual {v6}, Ljava/lang/String;->isEmpty()Z
        move-result v7
        if-nez v7, :array_next
        
        # טריק ההתאמה המדויקת למניעת עקיפות!
        invoke-virtual {v6}, Ljava/lang/String;->toLowerCase()Ljava/lang/String;
        move-result-object v6
        
        # בדיקה 1: מתחיל ב- ://
        new-instance v7, Ljava/lang/StringBuilder;
        invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
        const-string v8, "://"
        invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v7, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v7
        invoke-virtual {v3, v7}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
        move-result v7
        if-eqz v7, :check_dot
        goto :found_match
        
        :check_dot
        # בדיקה 2: מתחיל ב- .
        new-instance v7, Ljava/lang/StringBuilder;
        invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
        const-string v8, "."
        invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v7, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v7
        invoke-virtual {v3, v7}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
        move-result v7
        if-eqz v7, :array_next
    
        :found_match
        # === 6. לוג מיוחד שמדפיס איזה חוק ספציפי אישר את הגישה ===
        const-string v0, "UrlFetcher"
        new-instance v1, Ljava/lang/StringBuilder;
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
        const-string v3, ">>> ALLOWED by rule: "
        invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v1
        invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
        return v2
        
        :array_next
        add-int/lit8 v5, v5, 0x1
        goto :array_loop
        
        :array_end
        const-string v1, "UrlFetcher"
        const-string v2, ">>> BLOCKED (Not in whitelist)"
        invoke-static {v1, v2}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
        return v0
    .end method
    .method public run()V
        .registers 4
        const-string v0, "UrlFetcher"
        const-string v1, ">>> Starting JSON config download..."
        invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
        :try_start_0
        new-instance v0, Ljava/net/URL;
        
        # =========================================================
        # הדבק כאן את כתובת ה-RAW של קובץ ה-JSON שלך
        # =========================================================
        const-string v1, "https://raw.githubusercontent.com/YOUR_USER/YOUR_REPO/main/config.json"
        
        invoke-direct {v0, v1}, Ljava/net/URL;-><init>(Ljava/lang/String;)V
        invoke-virtual {v0}, Ljava/net/URL;->openConnection()Ljava/net/URLConnection;
        move-result-object v0
        const/16 v1, 0x1388
        invoke-virtual {v0, v1}, Ljava/net/URLConnection;->setConnectTimeout(I)V
        invoke-virtual {v0, v1}, Ljava/net/URLConnection;->setReadTimeout(I)V
        invoke-virtual {v0}, Ljava/net/URLConnection;->getInputStream()Ljava/io/InputStream;
        move-result-object v0
        new-instance v1, Ljava/util/Scanner;
        invoke-direct {v1, v0}, Ljava/util/Scanner;-><init>(Ljava/io/InputStream;)V
        const-string v0, "\\A"
        invoke-virtual {v1, v0}, Ljava/util/Scanner;->useDelimiter(Ljava/lang/String;)Ljava/util/Scanner;
        move-result-object v0
        invoke-virtual {v0}, Ljava/util/Scanner;->hasNext()Z
        move-result v1
        if-eqz v1, :cond_empty
        invoke-virtual {v0}, Ljava/util/Scanner;->next()Ljava/lang/String;
        move-result-object v0
        new-instance v1, Lorg/json/JSONObject;
        invoke-direct {v1, v0}, Lorg/json/JSONObject;-><init>(Ljava/lang/String;)V
        sput-object v1, Lcom/android/webview/chromium/UrlFetcher;->sJsonConfig:Lorg/json/JSONObject;
        const-string v0, "UrlFetcher"
        const-string v1, ">>> JSON Config successfully parsed and loaded!"
        invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
        goto :goto_end
        :cond_empty
        const-string v0, "UrlFetcher"
        const-string v1, ">>> JSON file is EMPTY!"
        invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
        :goto_end
        :try_end_0
        .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
        return-void
        :catch_0
        move-exception v0
        const-string v1, "UrlFetcher"
        const-string v2, ">>> JSON Download FAILED!"
        invoke-static {v1, v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
        return-void
    .end method
    

    תסתכלו על שורה 260, שם אתם צריכים להדביק את הקישור לקובץ שלכם.

    1. באותו נתיב (com/android/webview/chromium)
      בקלאס WebViewChromium
      במתודה method public init(Ljava/util/Map;Z)V
      מיד אחרי השורה של הREGISTERS להדביק כך:
    .method public init(Ljava/util/Map;Z)V
        .registers 21
        #להדביק מכאן
        new-instance v0, Lcom/android/webview/chromium/UrlFetcher;
    
        invoke-direct {v0}, Lcom/android/webview/chromium/UrlFetcher;-><init>()V
    
        invoke-virtual {v0}, Lcom/android/webview/chromium/UrlFetcher;->start()V
        #עד כאן
        .line 1
        move-object/from16 v1, p0
    

    בשני המתודות שנקראות loadUrl
    להוסיף 5 רגיסטרים
    וג"כ באותו אופן להדביק את הקוד הבא אחרי השורה של הREGISTERS:

    # --- מנגנון חסימה חכם ---
        invoke-static {p1}, Lcom/android/webview/chromium/UrlFetcher;->isAllowed(Ljava/lang/String;)Z
        move-result v0
        
        # התיקון: אם הפונקציה החזירה אמת (1 - מורשה), קפוץ לאישור!
        if-nez v0, :allow_url_load
        
        # חסימה אלגנטית
        iget-object v0, p0, Lcom/android/webview/chromium/WebViewChromium;->a:Landroid/webkit/WebView;
        const-string v1, "http://blocked.local"
        const-string v2, "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><body dir=\"rtl\" style=\"display:flex;justify-content:center;align-items:center;height:100vh;background-color:rgb(248,215,218);color:rgb(114,28,36);font-family:sans-serif;margin:0;\"><div style=\"text-align:center;padding:20px;border:1px solid rgb(245,198,203);border-radius:10px;background-color:rgb(248,215,218);\"><h2>\u05e9\u05d2\u05d9\u05d0\u05ea \u05d2\u05d9\u05e9\u05d4</h2><p>\u05d0\u05ea\u05e8 \u05d6\u05d4 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e8\u05e9\u05d4</p></div></body>"
        const-string v3, "text/html"
        const-string v4, "utf-8"
        const/4 v5, 0x0
        invoke-virtual/range {v0 .. v5}, Landroid/webkit/WebView;->loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
        return-void
    
        :allow_url_load
    

    .method public loadUrl(Ljava/lang/String;)V
        .registers 10 # כאן הוספנו 5
    # --- מנגנון חסימה חכם ---
        invoke-static {p1}, Lcom/android/webview/chromium/UrlFetcher;->isAllowed(Ljava/lang/String;)Z
        move-result v0
        
        # התיקון: אם הפונקציה החזירה אמת (1 - מורשה), קפוץ לאישור!
        if-nez v0, :allow_url_load
        
        # חסימה אלגנטית
        iget-object v0, p0, Lcom/android/webview/chromium/WebViewChromium;->a:Landroid/webkit/WebView;
        const-string v1, "http://blocked.local"
        const-string v2, "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><body dir=\"rtl\" style=\"display:flex;justify-content:center;align-items:center;height:100vh;background-color:rgb(248,215,218);color:rgb(114,28,36);font-family:sans-serif;margin:0;\"><div style=\"text-align:center;padding:20px;border:1px solid rgb(245,198,203);border-radius:10px;background-color:rgb(248,215,218);\"><h2>\u05e9\u05d2\u05d9\u05d0\u05ea \u05d2\u05d9\u05e9\u05d4</h2><p>\u05d0\u05ea\u05e8 \u05d6\u05d4 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e8\u05e9\u05d4</p></div></body>"
        const-string v3, "text/html"
        const-string v4, "utf-8"
        const/4 v5, 0x0
        invoke-virtual/range {v0 .. v5}, Landroid/webkit/WebView;->loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
        return-void
        :allow_url_load
    
    .method public loadUrl(Ljava/lang/String;Ljava/util/Map;)V
        .registers 11 # גם כאן הוספנו 5
    # --- מנגנון חסימה חכם ---
        invoke-static {p1}, Lcom/android/webview/chromium/UrlFetcher;->isAllowed(Ljava/lang/String;)Z
        move-result v0
        
        # התיקון: אם הפונקציה החזירה אמת (1 - מורשה), קפוץ לאישור!
        if-nez v0, :allow_url_load
        
        # חסימה אלגנטית
        iget-object v0, p0, Lcom/android/webview/chromium/WebViewChromium;->a:Landroid/webkit/WebView;
        const-string v1, "http://blocked.local"
        const-string v2, "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><body dir=\"rtl\" style=\"display:flex;justify-content:center;align-items:center;height:100vh;background-color:rgb(248,215,218);color:rgb(114,28,36);font-family:sans-serif;margin:0;\"><div style=\"text-align:center;padding:20px;border:1px solid rgb(245,198,203);border-radius:10px;background-color:rgb(248,215,218);\"><h2>\u05e9\u05d2\u05d9\u05d0\u05ea \u05d2\u05d9\u05e9\u05d4</h2><p>\u05d0\u05ea\u05e8 \u05d6\u05d4 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e8\u05e9\u05d4</p></div></body>"
        const-string v3, "text/html"
        const-string v4, "utf-8"
        const/4 v5, 0x0
        invoke-virtual/range {v0 .. v5}, Landroid/webkit/WebView;->loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
        return-void
        :allow_url_load
    

    בנתיב org/chromium/android_webview
    בקלאס AwContentsClientBridge
    במתודה shouldOverrideUrlLoading
    אחרי השורה של הREGISTERS להוסיף את הקוד הבא:

    .method public final shouldOverrideUrlLoading(Ljava/lang/String;ZZ[Ljava/lang/String;[Ljava/lang/String;Z)Z
        .registers 16
    #להוסיף מכאן
    # יירוט ניווט פנימי
        invoke-static {p1}, Lcom/android/webview/chromium/UrlFetcher;->isAllowed(Ljava/lang/String;)Z
        move-result v0
        
        # התיקון: אם הפונקציה החזירה אמת (1 - מורשה), קפוץ לאישור!
        if-nez v0, :allow_url
    
        # חסימה אלגנטית: טעינת HTML תוך זיוף כתובת
        iget-object v0, p0, Lorg/chromium/android_webview/AwContentsClientBridge;->a:LWV/N5;
        check-cast v0, LWV/vD;
        iget-object v0, v0, LWV/vD;->e:Landroid/webkit/WebView;
        const-string v1, "http://blocked.local"
        const-string v2, "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><body dir=\"rtl\" style=\"display:flex;justify-content:center;align-items:center;height:100vh;background-color:rgb(248,215,218);color:rgb(114,28,36);font-family:sans-serif;margin:0;\"><div style=\"text-align:center;padding:20px;border:1px solid rgb(245,198,203);border-radius:10px;background-color:rgb(248,215,218);\"><h2>\u05e9\u05d2\u05d9\u05d0\u05ea \u05d2\u05d9\u05e9\u05d4</h2><p>\u05d0\u05ea\u05e8 \u05d6\u05d4 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e8\u05e9\u05d4</p></div></body>"
        const-string v3, "text/html"
        const-string v4, "utf-8"
        const/4 v5, 0x0
        invoke-virtual/range {v0 .. v5}, Landroid/webkit/WebView;->loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
        const/4 v0, 0x1
        return v0
    
        :allow_url
    #עד כאן
    

    שימו לב לשורות 12-14 שזה תלוי בגרסה שיש לכם, אז תוודאו את שורה 12, ע"י שתסתכלו בקוד של גרסתכם, מיד אחרי .line 29
    אמורה להיות שורה כזאת:

    iget-object v1, p0, Lorg/chromium/android_webview/AwContentsClientBridge;->a:LWV/N5;
    

    הסוף של השורה (a:LWV/N5) זה מה שאמור להיות בסוף שורה 12
    ואת שורה 13-14 תוודאו ע"י שתסתכלו על השורה שאחרי .line 91

    .line 91
        iget-object v4, v8, LWV/vD;->e:Landroid/webkit/WebView;
    

    מה שבערך באמצע השורה ( LWV/vD;) זה מה שצריך להיות בסוף של שורה 13
    ובשורה 14 גם מה שאחרי החץ (LWV/vD;->e).
    או יותר פשוט, תשאלו את הAI הקרוב לביתכם איך להתאים בדיוק את הקוד, ותשמשו במייצא השרשורים של @ nh.local, זה אחלה דבר!

    בהצלחה!

    עזרה הדדית - אנדרואיד

  • מדריך | הוספת תאריך עברי למסך הנעילה בדאמבדרויד
    L lilo159

    e092de0b-3079-4434-b489-9e1edeba5af1-image.png
    כמובן, הAI הוא המתכנת, ואני המתווך...
    על אחריותכם וכו'

    באפליקציית הsystemui
    שנמצאת כאן:
    system/system_ext/priv-app/SystemUI/SystemUI.apk

    בMT מנג'ר:
    לחיצה קצרה על האפליקציה
    c5104907-a607-4d20-a7a6-3d38f4141048-image.png
    ללחוץ על view
    8d55ee79-3e4b-4aa3-94a4-1c0935ba7ce4-image.png
    ללחוץ על classes.dex (אחד הקבצים הירוקים, לא משנה איזה)
    d10e1c3d-83b7-439b-a2fc-a858deadb30c-image.png
    ללחוץ על dex editor plus
    1557e24f-cd3a-4ede-a0fd-d9fc25188810-image.png
    ללחוץ על select all (כדי לבחור הכל)
    8ce27c13-a6cc-4508-b7ce-7c62a5d7c7d1-image.png
    ללחוץ על OK, כעת אנחנו בפנים.

    1. להוסיף את הקלאס HebrewDateHelper.smali בנתיב:
      com/android/systemui

    בתוך הטאב שנקרא explorer, לנווט:
    a859a496-343a-4a10-995a-ac0ae144801f-image.png
    לחיצה ארוכה על התיקייה systemui, ללחוץ על ADD.
    ab796c8a-cbcf-4af3-8c46-cc2c06c31c04-image.png
    בחלון שייפתח להדביק את שם הקלאס (HebrewDateHelper) וללחוץ ok
    39ca88ca-2cde-40e7-bd8c-9903abe22c40-image.png
    כעת נראה את הקלאס שיצרנו בירוק, נלחץ עליו.
    6f73c96a-e757-4f2b-a33f-bc6f97b6c967-image.png
    נחליף את כל התוכן עם הקוד שבבלוק הקוד המצורף.
    9ff87ee7-c921-4fd4-a518-584d243c6ca6-image.png
    b0f5117c-023e-4a9b-9cda-5c8766e18f21-image.png
    bc1e972e-24ac-4432-ae9b-956c4c96eb9c-image.png
    ונלחץ על כפתור השמירה. כעת אפשר לחזור למסך הקודם.

    # classes.dex
    
    .class public Lcom/android/systemui/HebrewDateHelper;
    .super Ljava/lang/Object;
    
    
    # direct methods
    .method public static getCombinedDateString(Ljava/lang/String;)Ljava/lang/String;
        .registers 12
    
        :try_start_0
        new-instance v0, Landroid/icu/util/HebrewCalendar;
    
        invoke-direct {v0}, Landroid/icu/util/HebrewCalendar;-><init>()V
    
        new-instance v1, Landroid/icu/util/ULocale;
    
        const-string v2, "he_IL@calendar=hebrew"
    
        invoke-direct {v1, v2}, Landroid/icu/util/ULocale;-><init>(Ljava/lang/String;)V
    
        const/4 v2, 0x0
    
        invoke-static {v2, v1}, Landroid/icu/text/DateFormat;->getDateInstance(ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
    
        move-result-object v2
    
        invoke-static {}, Lcom/android/systemui/HebrewDateHelper;->isAfterNightfall()Z
    
        move-result v3
    
        move v10, v3
    
        invoke-virtual {v0}, Landroid/icu/util/HebrewCalendar;->getTime()Ljava/util/Date;
    
        move-result-object v4
    
        invoke-virtual {v2, v4}, Landroid/icu/text/DateFormat;->format(Ljava/util/Date;)Ljava/lang/String;
    
        move-result-object v3
    
        if-eqz v3, :cond_bc
    
        const/4 v4, 0x7
    
        invoke-virtual {v0, v4}, Landroid/icu/util/HebrewCalendar;->get(I)I
    
        move-result v5
    
        if-ne v5, v4, :cond_33
    
        if-eqz v10, :cond_33
    
        const-string/jumbo v4, "יום שבת"
    
        const-string/jumbo v5, "מוצאי שבת"
    
        invoke-virtual {v3, v4, v5}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
    
        move-result-object v3
    
        :cond_33
        const/16 v4, 0x20
    
        invoke-virtual {v3, v4}, Ljava/lang/String;->lastIndexOf(I)I
    
        move-result v4
    
        const-string v8, ""
    
        const-string v9, ""
    
        const/4 v5, -0x1
    
        if-eq v4, v5, :cond_4b
    
        const/4 v5, 0x0
    
        invoke-virtual {v3, v5, v4}, Ljava/lang/String;->substring(II)Ljava/lang/String;
    
        move-result-object v8
    
        add-int/lit8 v4, v4, 0x1
    
        invoke-virtual {v3, v4}, Ljava/lang/String;->substring(I)Ljava/lang/String;
    
        move-result-object v9
    
        :cond_4b
        const/4 v3, 0x2
    
        invoke-virtual {v0, v3}, Landroid/icu/util/HebrewCalendar;->get(I)I
    
        move-result v4
    
        const/4 v5, 0x5
    
        const/4 v6, 0x1
    
        invoke-virtual {v0, v5, v6}, Landroid/icu/util/HebrewCalendar;->add(II)V
    
        invoke-virtual {v0}, Landroid/icu/util/HebrewCalendar;->getTime()Ljava/util/Date;
    
        move-result-object v5
    
        invoke-virtual {v2, v5}, Landroid/icu/text/DateFormat;->format(Ljava/util/Date;)Ljava/lang/String;
    
        move-result-object v6
    
        invoke-virtual {v0, v3}, Landroid/icu/util/HebrewCalendar;->get(I)I
    
        move-result v5
    
        const-string v0, ", "
    
        invoke-virtual {v6, v0}, Ljava/lang/String;->indexOf(Ljava/lang/String;)I
    
        move-result v0
    
        const/4 v7, -0x1
    
        if-eq v0, v7, :cond_70
    
        add-int/lit8 v0, v0, 0x2
    
        invoke-virtual {v6, v0}, Ljava/lang/String;->substring(I)Ljava/lang/String;
    
        move-result-object v6
    
        :cond_70
        const/16 v0, 0x20
    
        invoke-virtual {v6, v0}, Ljava/lang/String;->lastIndexOf(I)I
    
        move-result v0
    
        if-eq v0, v7, :cond_7d
    
        const/4 v2, 0x0
    
        invoke-virtual {v6, v2, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;
    
        move-result-object v6
    
        :cond_7d
        if-ne v4, v5, :cond_8c
    
        const/16 v0, 0x20
    
        invoke-virtual {v6, v0}, Ljava/lang/String;->indexOf(I)I
    
        move-result v0
    
        if-eq v0, v7, :cond_8c
    
        const/4 v2, 0x0
    
        invoke-virtual {v6, v2, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;
    
        move-result-object v6
    
        :cond_8c
        new-instance v0, Ljava/lang/StringBuilder;
    
        invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
    
        invoke-virtual {v0, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        if-eqz v10, :cond_a7
    
        const-string v2, " (אור ל-"
    
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        invoke-virtual {v0, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        const-string v2, ") "
    
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        invoke-virtual {v0, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        goto :goto_af
    
        :cond_a7
        const-string v2, " "
    
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        invoke-virtual {v0, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        :goto_af
        const-string v2, "\n"
    
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v0
    
        return-object v0
    
        :cond_bc
        new-instance v0, Ljava/lang/StringBuilder;
    
        invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
    
        invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        const-string v1, "\n"
    
        invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    
        move-result-object v0
    
        return-object v0
        :try_end_d1
        .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_d1} :catch_d1
    
        :catch_d1
        move-exception v0
    
        const-string v1, "HebrewDateHelper"
    
        const-string v2, "getCombinedDateString Exception"
    
        invoke-static {v1, v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
    
        return-object p0
    .end method
    
    .method private static isAfterNightfall()Z
        .registers 10
    
        invoke-static {}, Ljava/util/Calendar;->getInstance()Ljava/util/Calendar;
    
        move-result-object v0
    
        const/4 v1, 0x6
    
        invoke-virtual {v0, v1}, Ljava/util/Calendar;->get(I)I
    
        move-result v1
    
        const/16 v2, 0xb
    
        invoke-virtual {v0, v2}, Ljava/util/Calendar;->get(I)I
    
        move-result v2
    
        const/16 v3, 0xc
    
        invoke-virtual {v0, v3}, Ljava/util/Calendar;->get(I)I
    
        move-result v3
    
        invoke-virtual {v0}, Ljava/util/Calendar;->getTimeZone()Ljava/util/TimeZone;
    
        move-result-object v4
    
        invoke-virtual {v0}, Ljava/util/Calendar;->getTime()Ljava/util/Date;
    
        move-result-object v0
    
        invoke-virtual {v4, v0}, Ljava/util/TimeZone;->inDaylightTime(Ljava/util/Date;)Z
    
        move-result v0
    
        const-wide v4, 0x400921fb54442d18L  # Math.PI
    
        const-wide/high16 v6, 0x4000000000000000L  # 2.0
    
        mul-double/2addr v4, v6
    
        add-int/lit8 v6, v1, -0x50
    
        int-to-double v6, v6
    
        mul-double/2addr v4, v6
    
        const-wide v6, 0x4076d00000000000L  # 365.0
    
        div-double/2addr v4, v6
    
        invoke-static {v4, v5}, Ljava/lang/Math;->sin(D)D
    
        move-result-wide v4
    
        const-wide v6, 0x3ff0cccccccccccdL  # 1.05
    
        mul-double/2addr v4, v6
    
        const-wide v6, 0x403247ae147ae148L  # 18.28
    
        add-double/2addr v4, v6
    
        if-eqz v0, :cond_48
    
        const-wide/high16 v6, 0x3ff0000000000000L  # 1.0
    
        add-double/2addr v4, v6
    
        :cond_48
        double-to-int v0, v4
    
        int-to-double v6, v0
    
        sub-double/2addr v4, v6
    
        const-wide v6, 0x404e000000000000L  # 60.0
    
        mul-double/2addr v4, v6
    
        double-to-int v4, v4
    
        const/4 v5, 0x1
    
        if-le v2, v0, :cond_56
    
        return v5
    
        :cond_56
        if-ne v2, v0, :cond_5b
    
        if-lt v3, v4, :cond_5b
    
        return v5
    
        :cond_5b
        const/4 v0, 0x0
    
        return v0
    .end method
    
    
    1. בנתיב com/android/systemui/keyguard
      בקלאס KeyguardSliceProvider
      במתודה updateClockLocked()
      מיד אחרי:
        .line 38
        move-result-object v0
    

    להוסיף את הקוד הבא:

     const/16 v1, 0x2c
     invoke-virtual {v0, v1}, Ljava/lang/String;->indexOf(I)I
     move-result v1
     const/4 v2, -0x1
     if-eq v1, v2, :skip_trim
     add-int/lit8 v1, v1, 0x2
     invoke-virtual {v0, v1}, Ljava/lang/String;->substring(I)Ljava/lang/String;
     move-result-object v0
     :skip_trim
     invoke-static {v0}, Lcom/android/systemui/HebrewDateHelper;->getCombinedDateString(Ljava/lang/String;)Ljava/lang/String;
     move-result-object v0
    
    1. בנתיב com/android/keyguard
      בקלאס KeyguardSliceView
      במתודה showSlice
      להחליף את שני השורות:
        .line 153
        sget-object v10, Landroid/text/TextUtils$TruncateAt;->END:Landroid/text/TextUtils$TruncateAt;
    
        .line 155
        invoke-virtual {v9, v10}, Landroid/widget/TextView;->setEllipsize(Landroid/text/TextUtils$TruncateAt;)V
    

    בקוד הזה:

        const/4 v10, 0x2
    
        invoke-virtual {v9, v10}, Landroid/widget/TextView;->setMaxLines(I)V
    
        const/4 v10, 0x0
    
        invoke-virtual {v9, v10}, Landroid/widget/TextView;->setSingleLine(Z)V
    

    בהצלחה!

    עזרה הדדית - שיאומי f21 pro ו +f21 pro

  • שיתוף | וואצפ מסונן, כמעט להורדה
    L lilo159

    ב"ה נראה לי שהצלחתי לסנן את הוואצפ, ללא רוט.
    אפליקציית הבסיס שערכתי לקוחה מכאן: https://github.com/Schwartzblat/WhatsAppPatcher (תודה ל @דאלינאר שהפנה אותי לריפו הזה).
    בעזרת ד' היא תפורסם בהמשך, כשאסיים לעורכה.
    ופה אני צריך את עזרתכם:
    אין לי וואצפ, ואיני מכיר את כל מעלליו (לעריכה השתמשתי בוואצפ של חבר).
    לבינתיים חסמתי:

    • תמונות פרופיל
    • ערוצים (כולל חסימה של קישורים לערוץ)
    • סטטוסים (אם אין לסטטוס קישור שניתן לשתף, כי בזה לא התעסקתי)

    האם אתם מכירים עוד דברים שצריך לחסום (דפדפנים פנימיים, מרעין בישין אחרים)?
    תודה רבה.

    אפליקציות להורדה

  • מדריך | ווידג'טים בשיאומי f21/22 pro
    L lilo159

    למי שמעוניין, נתקלתי ממש במקרה (כמובן בסיעתא דשמיא גדולה...) בדרך להגיע לווידג'טים בF21/22 pro.
    אני מסכם עם מקלדת בלוטוס בשיאומי שלי, ואני משתמש באפליקציה של קיצורי מקשים (keymapper) כדי לפתוח את הוורד. הגדרתי שהקיצור הוא ctrl+shift+w. בעודי מנסה לפתוח את הוורד פתאום אני מוצא את עצמי בווידג'טים...
    לאחר קצת ניסוי וטעיה, מסתבר שהקיצור הוא ctrl+w.
    כדי לדמות את המקשים האלו, האפליקציות הנדרשות:
    shizuku (שיזוקו), keymapper (קי-מאפר).
    הקובץ להגדרת הקיצור דרך.
    כל הקבצים יחד: קבצים לווידג'טים.zip
    כדי שהקי-מאפר יוכל לדמות לחיצות של מקלדת, הוא נעזר בשיזוקו (דורש root, אבל יכול להיות שיש אפשרות דרך adb - לא בדקתי).
    בתוך שיזוקו, יש להפעיל אותו ע"י לחיצה על start:

    15986191-14bf-4c4f-babe-4f10f1d4f5ce-Screenshot_20241113-145007.png

    (אפשר לאפשר הפעלה אוטומטית של השיזוקו בboot דרך ההגדרות שלו, לי בדרך כלל לא עובד, אז צריך לוודא אחרי הפעלה מחדש שהוא דולק.)
    אחרי זה, בתוך הקי-מאפר, בהפעלה ראשונה צריך לתת לו הרשאות:

    fb0e45d4-3134-49f6-afee-12386eaf1ec1-Screenshot_20241113-150537.png

    לכבות אופטימיזציה של הסוללה:

    6b1e2fd3-1060-4fbe-a693-78c6051c0a19-Screenshot_20241113-150606.png

    ולתת הרשאה של שיזוקו:

    f7f8ce8b-c083-450e-8954-983792c83564-Screenshot_20241113-150721.png

    אחרי שסיימנו עם ההרשאות, לוחצים על השלוש פסים בצד ימין למטה:

    44d5ce79-3b62-4494-b5c4-d90671c1148a-Screenshot_20241113-151621.png

    ואחרי זה על restore, שם יש לבחור את הקובץ (שנקרא data.json) דרך סייר הקבצים:

    162dce19-af7e-4110-abc1-ce1f7b6f186a-Screenshot_20241113-151630.png

    בעיקרון זהו. אני הגדרתי את הטריגר ללחיצה ארוכה על מקש '1'. לנוחיותכם, אפשר להגדיר איזה מקשים שתירצו, שילוב שלהם, לחיצה ארוכה, קצרה, יחד, אחד אחרי השני וכו'. אפשר לשנות זאת ע"י מחיקה של מה שאני הגדרתי (ע"י לחיצה על x) והקלטה של טריגר חדש ללחוץ על הכפתור האדום:

    9f5effa0-6c7a-49a9-9b5c-ad638993eb77-Screenshot_20241113-195716.png

    אשמח לשמוע אם עובד לכם.

    מעבר לכך, באופן כללי ממש ממליץ על הקי-מאפר, ממש עושה נפלאות.
    אני משתמש איתו בנוסף כדי להחליף מצב שמע של צלצול (כללי, רטט, ושקט (בלי להפעיל מצב שינה – הצלחתי לסדר את זה)), לדמות לחיצות על המסך, או מקשים (כמו למשל לשלוח הודעה בגוגל הודעות ע"י לחיצה על המקש האמצעי), לשלוט במדיה כשהמסך נעול ועוד. אם זה מעניין מישהו, אשמח לשתף (דורש לפעמים גם שימוש במאקרו-דרויד, גם הוא כלי יעיל מאוד).
    בהצלחה!

    עזרה הדדית - שיאומי f21 pro ו +f21 pro

  • מדריך | VoLTE במכשיר Qin F21 Pro - בדרך פשוטה יותר ללא צורך במודול קבוע-אפשר להסיר רוט לאחר מכן (עודכן לעבוד גם עם HOT MOBILE)
    L lilo159

    @K.O.G אפליקצייה להפעלת VoLTE
    האפליקיצייה הזאת פשוט מבצעת את הסקריפט, ומוחקת את עצמה אח"כ. בהצלחה.

    עזרה הדדית - שיאומי f21 pro ו +f21 pro

  • מדריך | הוספת תאריך עברי למסך הבית בדאמבדרויד
    L lilo159

    בהמשך למדריך | הוספת תאריך עברי למסך הנעילה בדאמבדרויד.
    c4589d36-7fcf-4307-9a0b-f586ae9edb19-image.png
    למעשה את התוצאה נראה במסך הבית, אבל לא אותו אנחנו עורכים, אלא את הווידג'ט של השעון. (נפק"מ, שלכאורה הווידג'ט יהיה שונה גם בלאונצ'ר אחר).

    כמובן שנערך באמצעות AI וכו'.

    באפליקציית deskclock
    שנמצאת כאן:
    system/product/app/DeskClock/DeskClock.apk

    1. להוסיף את הקלאס HebrewDateHelper.smali בנתיב:
      com/android/deskclock
    .class public Lcom/android/deskclock/HebrewDateHelper;
    .super Ljava/lang/Object;
    
    # direct methods
    .method public static getCombinedDateString(Ljava/lang/String;)Ljava/lang/String;
        .registers 12
    
        # --- חיתוך היום בשבוע (עד הפסיק) מהתאריך הלועזי ---
        const/16 v0, 0x2c
        invoke-virtual {p0, v0}, Ljava/lang/String;->indexOf(I)I
        move-result v0
        const/4 v1, -0x1
        if-eq v0, v1, :skip_trim
        
        add-int/lit8 v0, v0, 0x2
        invoke-virtual {p0, v0}, Ljava/lang/String;->substring(I)Ljava/lang/String;
        move-result-object p0
        
        :skip_trim
        # ----------------------------------------------------
    
        :try_start_0
        new-instance v0, Landroid/icu/util/HebrewCalendar;
        invoke-direct {v0}, Landroid/icu/util/HebrewCalendar;-><init>()V
    
        new-instance v1, Landroid/icu/util/ULocale;
        const-string v2, "he_IL@calendar=hebrew"
        invoke-direct {v1, v2}, Landroid/icu/util/ULocale;-><init>(Ljava/lang/String;)V
    
        const/4 v2, 0x0
        invoke-static {v2, v1}, Landroid/icu/text/DateFormat;->getDateInstance(ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
        move-result-object v2
    
        invoke-static {}, Lcom/android/deskclock/HebrewDateHelper;->isAfterNightfall()Z
        move-result v3
        move v10, v3
    
        invoke-virtual {v0}, Landroid/icu/util/HebrewCalendar;->getTime()Ljava/util/Date;
        move-result-object v4
    
        invoke-virtual {v2, v4}, Landroid/icu/text/DateFormat;->format(Ljava/util/Date;)Ljava/lang/String;
        move-result-object v3
    
        if-eqz v3, :cond_bc
    
        const/4 v4, 0x7
        invoke-virtual {v0, v4}, Landroid/icu/util/HebrewCalendar;->get(I)I
        move-result v5
    
        if-ne v5, v4, :cond_33
    
        if-eqz v10, :cond_33
    
        const-string/jumbo v4, "יום שבת"
        const-string/jumbo v5, "מוצאי שבת"
        invoke-virtual {v3, v4, v5}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
        move-result-object v3
    
        :cond_33
        const/16 v4, 0x20
        invoke-virtual {v3, v4}, Ljava/lang/String;->lastIndexOf(I)I
        move-result v4
    
        const-string v8, ""
        const-string v9, ""
        const/4 v5, -0x1
    
        if-eq v4, v5, :cond_4b
    
        const/4 v5, 0x0
        invoke-virtual {v3, v5, v4}, Ljava/lang/String;->substring(II)Ljava/lang/String;
        move-result-object v8
    
        add-int/lit8 v4, v4, 0x1
        invoke-virtual {v3, v4}, Ljava/lang/String;->substring(I)Ljava/lang/String;
        move-result-object v9
    
        :cond_4b
        const/4 v3, 0x2
        invoke-virtual {v0, v3}, Landroid/icu/util/HebrewCalendar;->get(I)I
        move-result v4
    
        const/4 v5, 0x5
        const/4 v6, 0x1
        invoke-virtual {v0, v5, v6}, Landroid/icu/util/HebrewCalendar;->add(II)V
    
        invoke-virtual {v0}, Landroid/icu/util/HebrewCalendar;->getTime()Ljava/util/Date;
        move-result-object v5
        invoke-virtual {v2, v5}, Landroid/icu/text/DateFormat;->format(Ljava/util/Date;)Ljava/lang/String;
        move-result-object v6
    
        invoke-virtual {v0, v3}, Landroid/icu/util/HebrewCalendar;->get(I)I
        move-result v5
    
        const-string v0, ", "
        invoke-virtual {v6, v0}, Ljava/lang/String;->indexOf(Ljava/lang/String;)I
        move-result v0
    
        const/4 v7, -0x1
    
        if-eq v0, v7, :cond_70
    
        add-int/lit8 v0, v0, 0x2
        invoke-virtual {v6, v0}, Ljava/lang/String;->substring(I)Ljava/lang/String;
        move-result-object v6
    
        :cond_70
        const/16 v0, 0x20
        invoke-virtual {v6, v0}, Ljava/lang/String;->lastIndexOf(I)I
        move-result v0
    
        if-eq v0, v7, :cond_7d
    
        const/4 v2, 0x0
        invoke-virtual {v6, v2, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;
        move-result-object v6
    
        :cond_7d
        if-ne v4, v5, :cond_8c
    
        const/16 v0, 0x20
        invoke-virtual {v6, v0}, Ljava/lang/String;->indexOf(I)I
        move-result v0
    
        if-eq v0, v7, :cond_8c
    
        const/4 v2, 0x0
        invoke-virtual {v6, v2, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;
        move-result-object v6
    
        :cond_8c
        new-instance v0, Ljava/lang/StringBuilder;
        invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
    
        invoke-virtual {v0, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        if-eqz v10, :cond_a7
    
        const-string v2, " (אור ל-"
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        const-string v2, ") "
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        goto :goto_af
    
        :cond_a7
        const-string v2, " "
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        :goto_af
        const-string v2, "\n"
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v0
        return-object v0
    
        :cond_bc
        new-instance v0, Ljava/lang/StringBuilder;
        invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
        invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        const-string v1, "\n"
        invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v0
        return-object v0
        :try_end_d1
        .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_d1} :catch_d1
    
        :catch_d1
        move-exception v0
        return-object p0
    .end method
    
    .method private static isAfterNightfall()Z
        .registers 10
    
        invoke-static {}, Ljava/util/Calendar;->getInstance()Ljava/util/Calendar;
        move-result-object v0
        const/4 v1, 0x6
        invoke-virtual {v0, v1}, Ljava/util/Calendar;->get(I)I
        move-result v1
        const/16 v2, 0xb
        invoke-virtual {v0, v2}, Ljava/util/Calendar;->get(I)I
        move-result v2
        const/16 v3, 0xc
        invoke-virtual {v0, v3}, Ljava/util/Calendar;->get(I)I
        move-result v3
        invoke-virtual {v0}, Ljava/util/Calendar;->getTimeZone()Ljava/util/TimeZone;
        move-result-object v4
        invoke-virtual {v0}, Ljava/util/Calendar;->getTime()Ljava/util/Date;
        move-result-object v0
        invoke-virtual {v4, v0}, Ljava/util/TimeZone;->inDaylightTime(Ljava/util/Date;)Z
        move-result v0
    
        const-wide v4, 0x400921fb54442d18L
        const-wide/high16 v6, 0x4000000000000000L
        mul-double/2addr v4, v6
        add-int/lit8 v6, v1, -0x50
        int-to-double v6, v6
        mul-double/2addr v4, v6
        const-wide v6, 0x4076d00000000000L
        div-double/2addr v4, v6
        invoke-static {v4, v5}, Ljava/lang/Math;->sin(D)D
        move-result-wide v4
        const-wide v6, 0x3ff0cccccccccccdL
        mul-double/2addr v4, v6
        const-wide v6, 0x403247ae147ae148L
        add-double/2addr v4, v6
    
        if-eqz v0, :cond_48
        const-wide/high16 v6, 0x3ff0000000000000L
        add-double/2addr v4, v6
        :cond_48
    
        double-to-int v0, v4
        int-to-double v6, v0
        sub-double/2addr v4, v6
        const-wide v6, 0x404e000000000000L
        mul-double/2addr v4, v6
        double-to-int v4, v4
        const/4 v5, 0x1
    
        if-le v2, v0, :cond_56
        return v5
    
        :cond_56
        if-ne v2, v0, :cond_5b
        if-lt v3, v4, :cond_5b
        return v5
    
        :cond_5b
        const/4 v0, 0x0
        return v0
    .end method
    
    .method public static getNextUpdate(Ljava/util/Date;)Ljava/util/Date;
        .registers 14
    
        if-nez p0, :cond_not_null
        const/4 v0, 0x0
        return-object v0
    
        :cond_not_null
        invoke-static {}, Ljava/lang/System;->currentTimeMillis()J
        move-result-wide v0
    
        invoke-virtual {p0}, Ljava/util/Date;->getTime()J
        move-result-wide v2
    
        invoke-static {}, Ljava/util/Calendar;->getInstance()Ljava/util/Calendar;
        move-result-object v4
    
        invoke-virtual {v4, v0, v1}, Ljava/util/Calendar;->setTimeInMillis(J)V
    
        const/4 v5, 0x6
        invoke-virtual {v4, v5}, Ljava/util/Calendar;->get(I)I
        move-result v6
    
        invoke-virtual {v4}, Ljava/util/Calendar;->clone()Ljava/lang/Object;
        move-result-object v7
        check-cast v7, Ljava/util/Calendar;
    
        invoke-virtual {v7, v5, v6}, Ljava/util/Calendar;->set(II)V
    
        invoke-virtual {v7}, Ljava/util/Calendar;->getTimeZone()Ljava/util/TimeZone;
        move-result-object v5
        invoke-virtual {v7}, Ljava/util/Calendar;->getTime()Ljava/util/Date;
        move-result-object v8
        invoke-virtual {v5, v8}, Ljava/util/TimeZone;->inDaylightTime(Ljava/util/Date;)Z
        move-result v5
    
        const-wide v8, 0x400921fb54442d18L
        const-wide/high16 v10, 0x4000000000000000L
        mul-double/2addr v8, v10
        add-int/lit8 v6, v6, -0x50
        int-to-double v10, v6
        mul-double/2addr v8, v10
        const-wide v10, 0x4076d00000000000L
        div-double/2addr v8, v10
        invoke-static {v8, v9}, Ljava/lang/Math;->sin(D)D
        move-result-wide v8
        const-wide v10, 0x3ff0cccccccccccdL
        mul-double/2addr v8, v10
        const-wide v10, 0x403247ae147ae148L
        add-double/2addr v8, v10
    
        if-eqz v5, :skip_dst
        const-wide/high16 v10, 0x3ff0000000000000L
        add-double/2addr v8, v10
    
        :skip_dst
        double-to-int v5, v8
        int-to-double v10, v5
        sub-double/2addr v8, v10
        const-wide v10, 0x404e000000000000L
        mul-double/2addr v8, v10
        double-to-int v6, v8
    
        const/16 v8, 0xb
        invoke-virtual {v7, v8, v5}, Ljava/util/Calendar;->set(II)V
        const/16 v5, 0xc
        invoke-virtual {v7, v5, v6}, Ljava/util/Calendar;->set(II)V
        const/16 v5, 0xd
        const/4 v6, 0x0
        invoke-virtual {v7, v5, v6}, Ljava/util/Calendar;->set(II)V
        const/16 v5, 0xe
        invoke-virtual {v7, v5, v6}, Ljava/util/Calendar;->set(II)V
    
        invoke-virtual {v7}, Ljava/util/Calendar;->getTimeInMillis()J
        move-result-wide v5
    
        const-wide/16 v8, 0x1388
        add-long/2addr v8, v0
        cmp-long v7, v5, v8
        if-lez v7, :skip_set
    
        cmp-long v7, v5, v2
        if-gez v7, :skip_set
    
        move-wide v2, v5
    
        :skip_set
        new-instance v0, Ljava/util/Date;
        invoke-direct {v0, v2, v3}, Ljava/util/Date;-><init>(J)V
        return-object v0
    .end method
    
    1. בקלאס DigitalAppWidgetProvider
      שנמצא בנתיב com/android/alarmclock
      א. להחליף את כל המתודה clinit, או להוסיף/ לשנות ע"פ הקוד המצורף:
    .method static constructor <clinit>()V
        .registers 4 #להחליף ל4
    
        .line 101
        new-instance v0, Lcom/android/deskclock/LogUtils$Logger;
    
        const-string v1, "DigitalWidgetProvider"
    
        invoke-direct {v0, v1}, Lcom/android/deskclock/LogUtils$Logger;-><init>(Ljava/lang/String;)V
    
        sput-object v0, Lcom/android/alarmclock/DigitalAppWidgetProvider;->LOGGER:Lcom/android/deskclock/LogUtils$Logger;
    
        .line 113
        new-instance v0, Landroid/content/Intent;
    
        const-string v1, "com.android.deskclock.ON_DAY_CHANGE"
    
        invoke-direct {v0, v1}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
        #להוסיף מכאן
        new-instance v1, Landroid/content/ComponentName;
    
        const-string v2, "com.android.deskclock"
    
        const-string v3, "com.android.alarmclock.DigitalAppWidgetProvider"
    
        invoke-direct {v1, v2, v3}, Landroid/content/ComponentName;-><init>(Ljava/lang/String;Ljava/lang/String;)V
    
        invoke-virtual {v0, v1}, Landroid/content/Intent;->setComponent(Landroid/content/ComponentName;)Landroid/content/Intent;
        #עד כאן
        sput-object v0, Lcom/android/alarmclock/DigitalAppWidgetProvider;->DAY_CHANGE_INTENT:Landroid/content/Intent;
    
        return-void
    .end method
    

    ב. במתודה updateDayChangeCallback
    בערך בשורה .line 387
    להוסיף כך:

        .line 387
        invoke-interface {v1}, Ljava/util/List;->isEmpty()Z
    
        move-result v3
    
        const/4 v3, 0x0    #  להוסיף את השורה הזאת
    
        if-eqz v3, :cond_18
    

    ב. במתודה getDateFormat
    כמעט בסופה, להוסיף את השורות הבאות:

    .line 500
            invoke-static {v0, p0}, Landroid/text/format/DateFormat;->getBestDateTimePattern(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;
        
            move-result-object p0
            # להוסיף מכאן
            invoke-static {p0}, Lcom/android/deskclock/HebrewDateHelper;->getCombinedDateString(Ljava/lang/String;)Ljava/lang/String;
        
            move-result-object p0
            # עד כאן
            return-object p0
        .end method
    
    1. בקלאס Utils
      שנמצא באותו נתיב (com/android/deskclock)
      במתודה getNextDay
      כמעט בסופה, להוסיף את השורות הבאות:
    invoke-virtual {v1}, Ljava/util/Calendar;->getTime()Ljava/util/Date;
    
        move-result-object v0
    
        :goto_44
        # להוסיף מכאן
        invoke-static {v0}, Lcom/android/deskclock/HebrewDateHelper;->getNextUpdate(Ljava/util/Date;)Ljava/util/Date;
        
        move-result-object v0
        # עד כאן
        return-object v0
    
    1. ועכשיו לעריכת XML, למרות שמשום מה אני לא אוהב את זה..
      בנתיב /res/layout/
      בקובץ digital_widget.xml
      להוסיף/לשנות את השורות הבאות, או פשוט להחליף את התוכן עם הקוד הבא:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:gravity="0x00000011"
        android:orientation="1"
        android:id="@01020000"
        android:background="@7F08010A"
        android:padding="@7F0702BA"
        android:layout_width="-1"
        android:layout_height="-1"
        android:backgroundTint="?7F04003C">
        
        <TextClock
            android:textAppearance="?7F040042"
            android:ellipsize="0"
            android:layout_gravity="0x00000001"
            android:id="@7F0A009C"
            android:layout_width="-2"
            android:layout_height="-2"
            android:singleLine="true"
            android:includeFontPadding="false"
            android:format12Hour="@7F130210"
            android:format24Hour="@7F130211"/>
            
        <LinearLayout
            android:gravity="0x00000001"           <--- הוספה: מרכוז הפריטים בתוך הקונטיינר
            android:orientation="1"               <--- הוספה: הגדרת כיוון אנכי (אחד מתחת לשני)
            android:id="@7F0A0074"
            android:layout_width="-2"
            android:layout_height="-2"
            android:layout_marginTop="-10.0dip">
            
            <TextClock
                android:textAppearance="?7F040043"
                android:ellipsize="0"
                android:gravity="0x00000011"       <--- הוספה: יישור הטקסט למרכז
                android:layout_gravity="0x00000011" <--- הוספה: מיקום השעון במרכז
                android:id="@7F0A00B8"
                android:layout_width="-2"
                android:layout_height="-2"
                android:maxLines="2"               <--- הוספה: מאפשר לשעון לגלוש ל-2 שורות
                android:singleLine="false"         <--- שינוי: במקור היה true, שונה ל-false
                android:includeFontPadding="false"/>
                
            <LinearLayout                          <--- הוספה: תחילת קונטיינר חדש לתמונה והטקסט
                android:gravity="0x00000001"       <--- הוספה: יישור למרכז האופקי
                android:layout_gravity="0x00000001" <--- הוספה: מיקום הקונטיינר במרכז
                android:orientation="0"            <--- הוספה: כיוון אופקי (תמונה וטקסט באותה שורה)
                android:layout_width="-2"          <--- הוספה: רוחב לפי התוכן
                android:layout_height="-2"         <--- הוספה: גובה לפי התוכן
                android:layout_marginTop="2.0dip"> <--- הוספה: מרווח קטן מלמעלה (מהשעון)
                
                <ImageView
                    android:layout_gravity="0x00000011"
                    android:id="@7F0A019C"
                    android:layout_width="-2"
                    android:layout_height="-2"
                    android:src="@7F08007D"
                    android:scaleType="3"
                    android:adjustViewBounds="true"
                    android:tint="?7F040041"
                    app:tint="?7F040041"
                    android:contentDescription="@00000000"/>
                    
                <TextView
                    android:textAppearance="?7F040043"
                    android:ellipsize="0"
                    android:layout_gravity="0x00000011"
                    android:id="@7F0A019B"
                    android:layout_width="-2"
                    android:layout_height="-2"
                    android:singleLine="true"
                    android:includeFontPadding="false"/>
                    
            </LinearLayout>                        <--- הוספה: סגירת הקונטיינר החדש של התמונה והטקסט
            
        </LinearLayout>
        
        <ListView
            android:layout_gravity="0x00000031"
            android:id="@7F0A029D"
            android:visibility="2"
            android:layout_width="-1"
            android:layout_height="-2"
            android:layout_marginTop="10.0dip"
            android:divider="@00000000"/>
            
    </LinearLayout>
    

    בהצלחה!

    עזרה הדדית - שיאומי f21 pro ו +f21 pro

  • מדריך | הוספת תאריך עברי למסך הבית בגרסה הרגילה של f21 pro
    L lilo159

    בהמשך למדריך | הוספת תאריך עברי למסך הבית בדאמבדרויד
    b7d05bf9-70c4-46c4-8782-188973bae653-image.png
    אז משום מה, אתם עדיין משתמשים בגרסה הרגילה של F21 PRO..
    לא נורא, מתי שהוא גם אתם תתקדמו..

    בכל מקרה, לבינתיים:

    כרגיל, הAI הוא המתכנת, אבל האחריות אצלו היא לא טעות סופר..

    לשינויים:
    האפליקציה שאנחנו עורכים היא הלאנצ'ר, שנמצא בנתיב:
    /system_ext/priv-app/Launcher3QuickStep

    כל הקלאסים שנערכים או נוספים, נמצאים בנתיב:
    com/android/launcher3

    1. להוסיף את הקלאס HebrewDateHelper (בנתיב com/android/launcher3):
    .class public Lcom/android/launcher3/HebrewDateHelper;
    .super Ljava/lang/Object;
    
    # direct methods
    .method public static getCombinedDateString(Ljava/lang/String;)Ljava/lang/String;
        .registers 12
    
        :try_start_0
        new-instance v0, Landroid/icu/util/HebrewCalendar;
        invoke-direct {v0}, Landroid/icu/util/HebrewCalendar;-><init>()V
    
        new-instance v1, Landroid/icu/util/ULocale;
        const-string v2, "he_IL@calendar=hebrew"
        invoke-direct {v1, v2}, Landroid/icu/util/ULocale;-><init>(Ljava/lang/String;)V
    
        const/4 v2, 0x1
        invoke-static {v2, v1}, Landroid/icu/text/DateFormat;->getDateInstance(ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
        move-result-object v2
    
        invoke-static {}, Lcom/android/launcher3/HebrewDateHelper;->isAfterNightfall()Z
        move-result v3
        move v10, v3
    
        invoke-virtual {v0}, Landroid/icu/util/HebrewCalendar;->getTime()Ljava/util/Date;
        move-result-object v4
    
        invoke-virtual {v2, v4}, Landroid/icu/text/DateFormat;->format(Ljava/util/Date;)Ljava/lang/String;
        move-result-object v3
    
        if-eqz v3, :cond_bc
    
        const/4 v4, 0x7
        invoke-virtual {v0, v4}, Landroid/icu/util/HebrewCalendar;->get(I)I
        move-result v5
    
        if-ne v5, v4, :cond_33
    
        if-eqz v10, :cond_33
    
        const-string/jumbo v4, "יום שבת"
        const-string/jumbo v5, "מוצאי שבת"
        invoke-virtual {v3, v4, v5}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
        move-result-object v3
    
        :cond_33
        const/16 v4, 0x20
        invoke-virtual {v3, v4}, Ljava/lang/String;->lastIndexOf(I)I
        move-result v4
    
        const-string v8, ""
        const-string v9, ""
        const/4 v5, -0x1
    
        if-eq v4, v5, :cond_4b
    
        const/4 v5, 0x0
        invoke-virtual {v3, v5, v4}, Ljava/lang/String;->substring(II)Ljava/lang/String;
        move-result-object v8
    
        add-int/lit8 v4, v4, 0x1
        invoke-virtual {v3, v4}, Ljava/lang/String;->substring(I)Ljava/lang/String;
        move-result-object v9
    
        :cond_4b
        const/4 v3, 0x2
        invoke-virtual {v0, v3}, Landroid/icu/util/HebrewCalendar;->get(I)I
        move-result v4
    
        const/4 v5, 0x5
        const/4 v6, 0x1
        invoke-virtual {v0, v5, v6}, Landroid/icu/util/HebrewCalendar;->add(II)V
    
        invoke-virtual {v0}, Landroid/icu/util/HebrewCalendar;->getTime()Ljava/util/Date;
        move-result-object v5
        invoke-virtual {v2, v5}, Landroid/icu/text/DateFormat;->format(Ljava/util/Date;)Ljava/lang/String;
        move-result-object v6
    
        invoke-virtual {v0, v3}, Landroid/icu/util/HebrewCalendar;->get(I)I
        move-result v5
    
        const-string v0, ", "
        invoke-virtual {v6, v0}, Ljava/lang/String;->indexOf(Ljava/lang/String;)I
        move-result v0
    
        const/4 v7, -0x1
    
        if-eq v0, v7, :cond_70
    
        add-int/lit8 v0, v0, 0x2
        invoke-virtual {v6, v0}, Ljava/lang/String;->substring(I)Ljava/lang/String;
        move-result-object v6
    
        :cond_70
        const/16 v0, 0x20
        invoke-virtual {v6, v0}, Ljava/lang/String;->lastIndexOf(I)I
        move-result v0
    
        if-eq v0, v7, :cond_7d
    
        const/4 v2, 0x0
        invoke-virtual {v6, v2, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;
        move-result-object v6
    
        :cond_7d
        if-ne v4, v5, :cond_8c
    
        const/16 v0, 0x20
        invoke-virtual {v6, v0}, Ljava/lang/String;->indexOf(I)I
        move-result v0
    
        if-eq v0, v7, :cond_8c
    
        const/4 v2, 0x0
        invoke-virtual {v6, v2, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;
        move-result-object v6
    
        :cond_8c
        new-instance v0, Ljava/lang/StringBuilder;
        invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
    
        invoke-virtual {v0, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        if-eqz v10, :cond_a7
    
        const-string v2, " (אור ל-"
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        const-string v2, ") "
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        goto :goto_af
    
        :cond_a7
        const-string v2, " "
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        :goto_af
        const-string v2, "\n"
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v0
        return-object v0
    
        :cond_bc
        new-instance v0, Ljava/lang/StringBuilder;
        invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
        invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        const-string v1, "\n"
        invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v0
        return-object v0
        :try_end_d1
        .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_d1} :catch_d1
    
        :catch_d1
        move-exception v0
        return-object p0
    .end method
    
    .method private static isAfterNightfall()Z
        .registers 10
    
        invoke-static {}, Ljava/util/Calendar;->getInstance()Ljava/util/Calendar;
        move-result-object v0
        const/4 v1, 0x6
        invoke-virtual {v0, v1}, Ljava/util/Calendar;->get(I)I
        move-result v1
        const/16 v2, 0xb
        invoke-virtual {v0, v2}, Ljava/util/Calendar;->get(I)I
        move-result v2
        const/16 v3, 0xc
        invoke-virtual {v0, v3}, Ljava/util/Calendar;->get(I)I
        move-result v3
        invoke-virtual {v0}, Ljava/util/Calendar;->getTimeZone()Ljava/util/TimeZone;
        move-result-object v4
        invoke-virtual {v0}, Ljava/util/Calendar;->getTime()Ljava/util/Date;
        move-result-object v0
        invoke-virtual {v4, v0}, Ljava/util/TimeZone;->inDaylightTime(Ljava/util/Date;)Z
        move-result v0
    
        const-wide v4, 0x400921fb54442d18L
        const-wide/high16 v6, 0x4000000000000000L
        mul-double/2addr v4, v6
        add-int/lit8 v6, v1, -0x50
        int-to-double v6, v6
        mul-double/2addr v4, v6
        const-wide v6, 0x4076d00000000000L
        div-double/2addr v4, v6
        invoke-static {v4, v5}, Ljava/lang/Math;->sin(D)D
        move-result-wide v4
        const-wide v6, 0x3ff0cccccccccccdL
        mul-double/2addr v4, v6
        const-wide v6, 0x403247ae147ae148L
        add-double/2addr v4, v6
    
        if-eqz v0, :cond_48
        const-wide/high16 v6, 0x3ff0000000000000L
        add-double/2addr v4, v6
        :cond_48
    
        double-to-int v0, v4
        int-to-double v6, v0
        sub-double/2addr v4, v6
        const-wide v6, 0x404e000000000000L
        mul-double/2addr v4, v6
        double-to-int v4, v4
        const/4 v5, 0x1
    
        if-le v2, v0, :cond_56
        return v5
    
        :cond_56
        if-ne v2, v0, :cond_5b
        if-lt v3, v4, :cond_5b
        return v5
    
        :cond_5b
        const/4 v0, 0x0
        return v0
    .end method
    

    אם אתם מעדיפים שהתאריך הלועזי יהיה למעלה, אז תקחו את הקוד שבספויילר במקום:

    .class public Lcom/android/launcher3/HebrewDateHelper;
    .super Ljava/lang/Object;
    
    # direct methods
    .method public static getCombinedDateString(Ljava/lang/String;)Ljava/lang/String;
        .registers 12
    
        :try_start_0
        new-instance v0, Landroid/icu/util/HebrewCalendar;
        invoke-direct {v0}, Landroid/icu/util/HebrewCalendar;-><init>()V
    
        new-instance v1, Landroid/icu/util/ULocale;
        const-string v2, "he_IL@calendar=hebrew"
        invoke-direct {v1, v2}, Landroid/icu/util/ULocale;-><init>(Ljava/lang/String;)V
    
        const/4 v2, 0x1
        invoke-static {v2, v1}, Landroid/icu/text/DateFormat;->getDateInstance(ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
        move-result-object v2
    
        invoke-static {}, Lcom/android/launcher3/HebrewDateHelper;->isAfterNightfall()Z
        move-result v3
        move v10, v3
    
        invoke-virtual {v0}, Landroid/icu/util/HebrewCalendar;->getTime()Ljava/util/Date;
        move-result-object v4
    
        invoke-virtual {v2, v4}, Landroid/icu/text/DateFormat;->format(Ljava/util/Date;)Ljava/lang/String;
        move-result-object v3
    
        if-eqz v3, :cond_bc
    
        const/4 v4, 0x7
        invoke-virtual {v0, v4}, Landroid/icu/util/HebrewCalendar;->get(I)I
        move-result v5
    
        if-ne v5, v4, :cond_33
    
        if-eqz v10, :cond_33
    
        const-string/jumbo v4, "יום שבת"
        const-string/jumbo v5, "מוצאי שבת"
        invoke-virtual {v3, v4, v5}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
        move-result-object v3
    
        :cond_33
        const/16 v4, 0x20
        invoke-virtual {v3, v4}, Ljava/lang/String;->lastIndexOf(I)I
        move-result v4
    
        const-string v8, ""
        const-string v9, ""
        const/4 v5, -0x1
    
        if-eq v4, v5, :cond_4b
    
        const/4 v5, 0x0
        invoke-virtual {v3, v5, v4}, Ljava/lang/String;->substring(II)Ljava/lang/String;
        move-result-object v8
    
        add-int/lit8 v4, v4, 0x1
        invoke-virtual {v3, v4}, Ljava/lang/String;->substring(I)Ljava/lang/String;
        move-result-object v9
    
        :cond_4b
        const/4 v3, 0x2
        invoke-virtual {v0, v3}, Landroid/icu/util/HebrewCalendar;->get(I)I
        move-result v4
    
        const/4 v5, 0x5
        const/4 v6, 0x1
        invoke-virtual {v0, v5, v6}, Landroid/icu/util/HebrewCalendar;->add(II)V
    
        invoke-virtual {v0}, Landroid/icu/util/HebrewCalendar;->getTime()Ljava/util/Date;
        move-result-object v5
        invoke-virtual {v2, v5}, Landroid/icu/text/DateFormat;->format(Ljava/util/Date;)Ljava/lang/String;
        move-result-object v6
    
        invoke-virtual {v0, v3}, Landroid/icu/util/HebrewCalendar;->get(I)I
        move-result v5
    
        const-string v0, ", "
        invoke-virtual {v6, v0}, Ljava/lang/String;->indexOf(Ljava/lang/String;)I
        move-result v0
    
        const/4 v7, -0x1
    
        if-eq v0, v7, :cond_70
    
        add-int/lit8 v0, v0, 0x2
        invoke-virtual {v6, v0}, Ljava/lang/String;->substring(I)Ljava/lang/String;
        move-result-object v6
    
        :cond_70
        const/16 v0, 0x20
        invoke-virtual {v6, v0}, Ljava/lang/String;->lastIndexOf(I)I
        move-result v0
    
        if-eq v0, v7, :cond_7d
    
        const/4 v2, 0x0
        invoke-virtual {v6, v2, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;
        move-result-object v6
    
        :cond_7d
        if-ne v4, v5, :cond_8c
    
        const/16 v0, 0x20
        invoke-virtual {v6, v0}, Ljava/lang/String;->indexOf(I)I
        move-result v0
    
        if-eq v0, v7, :cond_8c
    
        const/4 v2, 0x0
        invoke-virtual {v6, v2, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String;
        move-result-object v6
    
        :cond_8c
        new-instance v0, Ljava/lang/StringBuilder;
        invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
    
        invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        const-string v2, "\n"
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        invoke-virtual {v0, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        if-eqz v10, :cond_a7
    
        const-string v2, " (אור ל-"
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        const-string v2, ") "
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        goto :goto_af
    
        :cond_a7
        const-string v2, " "
        invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        :goto_af
        invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v0
        return-object v0
    
        :cond_bc
        new-instance v0, Ljava/lang/StringBuilder;
        invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
    
        invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        const-string v1, "\n"
        invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    
        invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v0
        return-object v0
        :try_end_d1
        .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_d1} :catch_d1
    
        :catch_d1
        move-exception v0
        return-object p0
    .end method
    
    .method private static isAfterNightfall()Z
        .registers 10
    
        invoke-static {}, Ljava/util/Calendar;->getInstance()Ljava/util/Calendar;
        move-result-object v0
        const/4 v1, 0x6
        invoke-virtual {v0, v1}, Ljava/util/Calendar;->get(I)I
        move-result v1
        const/16 v2, 0xb
        invoke-virtual {v0, v2}, Ljava/util/Calendar;->get(I)I
        move-result v2
        const/16 v3, 0xc
        invoke-virtual {v0, v3}, Ljava/util/Calendar;->get(I)I
        move-result v3
        invoke-virtual {v0}, Ljava/util/Calendar;->getTimeZone()Ljava/util/TimeZone;
        move-result-object v4
        invoke-virtual {v0}, Ljava/util/Calendar;->getTime()Ljava/util/Date;
        move-result-object v0
        invoke-virtual {v4, v0}, Ljava/util/TimeZone;->inDaylightTime(Ljava/util/Date;)Z
        move-result v0
    
        const-wide v4, 0x400921fb54442d18L
        const-wide/high16 v6, 0x4000000000000000L
        mul-double/2addr v4, v6
        add-int/lit8 v6, v1, -0x50
        int-to-double v6, v6
        mul-double/2addr v4, v6
        const-wide v6, 0x4076d00000000000L
        div-double/2addr v4, v6
        invoke-static {v4, v5}, Ljava/lang/Math;->sin(D)D
        move-result-wide v4
        const-wide v6, 0x3ff0cccccccccccdL
        mul-double/2addr v4, v6
        const-wide v6, 0x403247ae147ae148L
        add-double/2addr v4, v6
    
        if-eqz v0, :cond_48
        const-wide/high16 v6, 0x3ff0000000000000L
        add-double/2addr v4, v6
        :cond_48
    
        double-to-int v0, v4
        int-to-double v6, v0
        sub-double/2addr v4, v6
        const-wide v6, 0x404e000000000000L
        mul-double/2addr v4, v6
        double-to-int v4, v4
        const/4 v5, 0x1
    
        if-le v2, v0, :cond_56
        return v5
    
        :cond_56
        if-ne v2, v0, :cond_5b
        if-lt v3, v4, :cond_5b
        return v5
    
        :cond_5b
        const/4 v0, 0x0
        return v0
    .end method
    

    1. להוסיף את הקלאס (באותו נתיב):
      WorkspaceDateReceiver
    .class public Lcom/android/launcher3/WorkspaceDateReceiver;
    .super Landroid/content/BroadcastReceiver;
    
    .field private final mWorkspace:Lcom/android/launcher3/Workspace;
    
    .method public constructor <init>(Lcom/android/launcher3/Workspace;)V
        .registers 2
    
        .line 1
        invoke-direct {p0}, Landroid/content/BroadcastReceiver;-><init>()V
    
        .line 2
        iput-object p1, p0, Lcom/android/launcher3/WorkspaceDateReceiver;->mWorkspace:Lcom/android/launcher3/Workspace;
    
        .line 3
        return-void
    .end method
    
    .method public onReceive(Landroid/content/Context;Landroid/content/Intent;)V
        .registers 3
    
        .line 1
        iget-object p1, p0, Lcom/android/launcher3/WorkspaceDateReceiver;->mWorkspace:Lcom/android/launcher3/Workspace;
    
        if-eqz p1, :cond_end
    
        .line 2
        invoke-virtual {p1}, Lcom/android/launcher3/Workspace;->refreshTime()V
    
        :cond_end
        return-void
    .end method
    
    1. בקלאס Workspace (שנמצא בנתיב כדלעיל):
      יחסית בתחילת הקלאס (בערך שורה 46)
      אחרי השורה
    # static fields
    

    להוסיף את השורה הזאת:

    .field private mDateReceiver:Lcom/android/launcher3/WorkspaceDateReceiver;
    
    1. באותו קלאס
      במתודה insertNewWorkspaceScreen (הראשונה, נראית כך):
    .method public insertNewWorkspaceScreen(II)Lcom/android/launcher3/CellLayout;
    

    מתחת לשורה .line 728 ישנה השורה:

    invoke-virtual {v6, v5}, Landroid/widget/TextClock;->setFocusable(Z)V
    

    מיד אחריה להוסיף את השורות:

    # הזרקה: 2 שורות ומרכוז
        invoke-virtual {v6, v5}, Landroid/widget/TextClock;->setSingleLine(Z)V
        const/4 v7, 0x2
        invoke-virtual {v6, v7}, Landroid/widget/TextClock;->setMaxLines(I)V
        const/16 v7, 0x11
        invoke-virtual {v6, v7}, Landroid/widget/TextClock;->setGravity(I)V
    


    אמור להראות כך:

        .line 728
        invoke-virtual {v6, v5}, Landroid/widget/TextClock;->setFocusable(Z)V
        # הזרקה: 2 שורות ומרכוז
        invoke-virtual {v6, v5}, Landroid/widget/TextClock;->setSingleLine(Z)V
        const/4 v7, 0x2
        invoke-virtual {v6, v7}, Landroid/widget/TextClock;->setMaxLines(I)V
        const/16 v7, 0x11
        invoke-virtual {v6, v7}, Landroid/widget/TextClock;->setGravity(I)V
    

    1. באותו קלאס
      במתודה refreshTime
      א. לשנות את המתודה לpublic
      ב. לחפש את השורה הזאת:
    invoke-direct/range {p0 .. p0}, Lcom/android/launcher3/Workspace;->refreshTime()V
    

    ולהחליף עם זאת:

    invoke-virtual/range {p0 .. p0}, Lcom/android/launcher3/Workspace;->refreshTime()V
    

    ג. מיד אחרי השורה הזאת (היא נמצאת פעמיים, לבצע על שני השורות שתמצאו):

    sget-object v1, Lcom/android/launcher3/Workspace$Patterns;->dateView:Ljava/lang/String;
    
    

    להוסיף את הקוד:

    invoke-static {v1}, Lcom/android/launcher3/HebrewDateHelper;->getCombinedDateString(Ljava/lang/String;)Ljava/lang/String;
        move-result-object v1
    


    בסוף המתודה אמורה להראות כך:

    .method public refreshTime()V
        .registers 4
    
        .line 779
        invoke-virtual {p0}, Lcom/android/launcher3/Workspace;->getContext()Landroid/content/Context;
    
        move-result-object v0
    
        invoke-static {v0}, Lcom/android/launcher3/Workspace$Patterns;->update(Landroid/content/Context;)V
    
        .line 780
        iget-object v0, p0, Lcom/android/launcher3/Workspace;->mDateView:Landroid/widget/TextClock;
    
        sget-object v1, Lcom/android/launcher3/Workspace$Patterns;->dateView:Ljava/lang/String;
    
        # הזרקת התאריך העברי לפורמט 24 שעות
        invoke-static {v1}, Lcom/android/launcher3/HebrewDateHelper;->getCombinedDateString(Ljava/lang/String;)Ljava/lang/String;
        move-result-object v1
    
        invoke-virtual {v0, v1}, Landroid/widget/TextClock;->setFormat24Hour(Ljava/lang/CharSequence;)V
    
        .line 781
        iget-object v0, p0, Lcom/android/launcher3/Workspace;->mDateView:Landroid/widget/TextClock;
    
        sget-object v1, Lcom/android/launcher3/Workspace$Patterns;->dateView:Ljava/lang/String;
    
        # הזרקת התאריך העברי לפורמט 12 שעות
        invoke-static {v1}, Lcom/android/launcher3/HebrewDateHelper;->getCombinedDateString(Ljava/lang/String;)Ljava/lang/String;
        move-result-object v1
    
        invoke-virtual {v0, v1}, Landroid/widget/TextClock;->setFormat12Hour(Ljava/lang/CharSequence;)V
    
        .line 783
        iget-object v0, p0, Lcom/android/launcher3/Workspace;->mClockView:Landroid/widget/TextClock;
    
        .line 784
        invoke-virtual {p0}, Lcom/android/launcher3/Workspace;->getResources()Landroid/content/res/Resources;
    
        move-result-object v1
    
        sget v2, Lcom/android/launcher3/R$dimen;->am_pm_widget_font_size:I
    
        invoke-virtual {v1, v2}, Landroid/content/res/Resources;->getDimension(I)F
    
        move-result v1
    
        float-to-int v1, v1
    
        sget-object v2, Lcom/android/launcher3/Workspace$Patterns;->clockView12:Ljava/lang/String;
    
        .line 783
        invoke-virtual {p0, v1, v2}, Lcom/android/launcher3/Workspace;->updateAmPmTextSize(ILjava/lang/String;)Ljava/lang/CharSequence;
    
        move-result-object v1
    
        invoke-virtual {v0, v1}, Landroid/widget/TextClock;->setFormat12Hour(Ljava/lang/CharSequence;)V
    
        .line 785
        iget-object v0, p0, Lcom/android/launcher3/Workspace;->mClockView:Landroid/widget/TextClock;
    
        sget-object v1, Lcom/android/launcher3/Workspace$Patterns;->clockView24:Ljava/lang/String;
    
        invoke-virtual {v0, v1}, Landroid/widget/TextClock;->setFormat24Hour(Ljava/lang/CharSequence;)V
    
        .line 788
        return-void
    .end method
    

    1. במתודה onAttachedToWindow
      א. להוסיף רגיסטר אחד (להחליף מ3 ל4).
      ב. בסוף המתודה ממש לפני return-void, להוסיף את הקוד:
    # הזרקה: רישום המאזין
        new-instance v0, Lcom/android/launcher3/WorkspaceDateReceiver;
        invoke-direct {v0, p0}, Lcom/android/launcher3/WorkspaceDateReceiver;-><init>(Lcom/android/launcher3/Workspace;)V
        iput-object v0, p0, Lcom/android/launcher3/Workspace;->mDateReceiver:Lcom/android/launcher3/WorkspaceDateReceiver;
    
        new-instance v1, Landroid/content/IntentFilter;
        invoke-direct {v1}, Landroid/content/IntentFilter;-><init>()V
    
        const-string v2, "android.intent.action.TIME_TICK"
        invoke-virtual {v1, v2}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
    
        const-string v2, "android.intent.action.TIME_SET"
        invoke-virtual {v1, v2}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
    
        const-string v2, "android.intent.action.TIMEZONE_CHANGED"
        invoke-virtual {v1, v2}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
    
        const-string v2, "android.intent.action.DATE_CHANGED"
        invoke-virtual {v1, v2}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
    
        invoke-virtual {p0}, Lcom/android/launcher3/Workspace;->getContext()Landroid/content/Context;
        move-result-object v2
        invoke-virtual {v2, v0, v1}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;
    


    בסוף המתודה אמורה להראות כך:

    .method protected onAttachedToWindow()V
        .registers 4
    
        .line 1490
        invoke-super {p0}, Lcom/android/launcher3/PagedView;->onAttachedToWindow()V
    
        .line 1491
        iget-object v0, p0, Lcom/android/launcher3/Workspace;->mWallpaperOffset:Lcom/android/launcher3/util/WallpaperOffsetInterpolator;
    
        invoke-virtual {p0}, Lcom/android/launcher3/Workspace;->getWindowToken()Landroid/os/IBinder;
    
        move-result-object v1
    
        invoke-virtual {v0, v1}, Lcom/android/launcher3/util/WallpaperOffsetInterpolator;->setWindowToken(Landroid/os/IBinder;)V
    
        .line 1492
        invoke-virtual {p0}, Lcom/android/launcher3/Workspace;->computeScroll()V
    
        # רישום המאזין לאירועי שעון
        new-instance v0, Lcom/android/launcher3/WorkspaceDateReceiver;
        invoke-direct {v0, p0}, Lcom/android/launcher3/WorkspaceDateReceiver;-><init>(Lcom/android/launcher3/Workspace;)V
        iput-object v0, p0, Lcom/android/launcher3/Workspace;->mDateReceiver:Lcom/android/launcher3/WorkspaceDateReceiver;
    
        new-instance v1, Landroid/content/IntentFilter;
        invoke-direct {v1}, Landroid/content/IntentFilter;-><init>()V
    
        const-string v2, "android.intent.action.TIME_TICK"
        invoke-virtual {v1, v2}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
    
        const-string v2, "android.intent.action.TIME_SET"
        invoke-virtual {v1, v2}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
    
        const-string v2, "android.intent.action.TIMEZONE_CHANGED"
        invoke-virtual {v1, v2}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
    
        const-string v2, "android.intent.action.DATE_CHANGED"
        invoke-virtual {v1, v2}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
    
        invoke-virtual {p0}, Lcom/android/launcher3/Workspace;->getContext()Landroid/content/Context;
        move-result-object v2
        invoke-virtual {v2, v0, v1}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;
    
        .line 1493
        return-void
    .end method
    

    1. במתודה onDetachedFromWindow (נמצאת ממש אחרי המתודה הקודמת)
      כמו קודם, בסוף המתודה ממש לפני הreturn-void, להוסיף את הקוד הבא:
    # הזרקה: ביטול המאזין
        iget-object v0, p0, Lcom/android/launcher3/Workspace;->mDateReceiver:Lcom/android/launcher3/WorkspaceDateReceiver;
        if-eqz v0, :cond_unregister_end
    
        invoke-virtual {p0}, Lcom/android/launcher3/Workspace;->getContext()Landroid/content/Context;
        move-result-object v1
        invoke-virtual {v1, v0}, Landroid/content/Context;->unregisterReceiver(Landroid/content/BroadcastReceiver;)V
    
        const/4 v0, 0x0
        iput-object v0, p0, Lcom/android/launcher3/Workspace;->mDateReceiver:Lcom/android/launcher3/WorkspaceDateReceiver;
    
        :cond_unregister_end
    


    בסוף המתודה אמורה להראות כך:

    .method protected onDetachedFromWindow()V
        .registers 3
    
        .line 1496
        invoke-super {p0}, Lcom/android/launcher3/PagedView;->onDetachedFromWindow()V
    
        .line 1497
        iget-object v0, p0, Lcom/android/launcher3/Workspace;->mWallpaperOffset:Lcom/android/launcher3/util/WallpaperOffsetInterpolator;
    
        const/4 v1, 0x0
    
        invoke-virtual {v0, v1}, Lcom/android/launcher3/util/WallpaperOffsetInterpolator;->setWindowToken(Landroid/os/IBinder;)V
    
        # מחיקת המאזין כדי למנוע דליפת זיכרון
        iget-object v0, p0, Lcom/android/launcher3/Workspace;->mDateReceiver:Lcom/android/launcher3/WorkspaceDateReceiver;
        if-eqz v0, :cond_unregister_end
    
        invoke-virtual {p0}, Lcom/android/launcher3/Workspace;->getContext()Landroid/content/Context;
        move-result-object v1
        invoke-virtual {v1, v0}, Landroid/content/Context;->unregisterReceiver(Landroid/content/BroadcastReceiver;)V
    
        const/4 v0, 0x0
        iput-object v0, p0, Lcom/android/launcher3/Workspace;->mDateReceiver:Lcom/android/launcher3/WorkspaceDateReceiver;
    
        :cond_unregister_end
    
        .line 1498
        return-void
    .end method
    

    בהצלחה!

    עזרה הדדית - שיאומי f21 pro ו +f21 pro

  • להורדה | תוסף לכרום למעקב משלוחים מאליאקספרס באתר PackageRadar | נוצר ע"י AI
    L lilo159

    בדף ההזמנות באליאקספרס יופיע כפתור חדש מתחת למעקב אחרי משלוח:
    25e3c852-9adb-44b6-af51-fecc1fe394b0-image.png
    לחיצה עליו תעתיק באופן אוטומטי את מספר המעקב, ותדביק אותו (תפתח אוטו' חלונית חדשה) באתר PackageRadar.
    להורדה

    לחלץ את הזיפ, בתוספים להפעיל מצב פיתוח, ללחוץ על טעינת פריט Unpacked, ולבחור את התיקייה המחולצת.
    בהצלחה!
    אשמח לשמוע אם עובד לכם.

    רשתות

  • מדריך | מדריך | הוספת החלפת פרופילים ע"י לחיצה על סולמית ב -f21 pro - עם שורות קוד בלבד!
    L lilo159

    בס"ד

    קודם כל, אם אתם לא יודעים איך לבצע את השינויים להלן, אז אל!
    וכמובן על אחריותכם וכו'.

    אחרי הוספת הקוד, יהיה ניתן להחליף פרופילים (רגיל->רטט->שקט) במסך הבית ומסך הנעילה, ע"י לחיצה על סולמית (ארוכה וקצרה, בהתאמה). אם מישהו רוצה רק למסך הנעילה שיכתוב בתגובות.

    בmt manager:

    system/system_ext-/priv-app/MtkSystemUI/MtkSystemUI.apk

    בDEX EDITOR PLUS:

    בCLASS:
    com/android/systemui/statusbar/phone/NotificationShadeWindowViewController$2
    להחליף את הMETHOD:
    dispatchKeyEvent
    עם זה:

    .method public dispatchKeyEvent(Landroid/view/KeyEvent;)Z
        .registers 12  # Changed from 11 to 12 registers
        .param p1, "event"    # Landroid/view/KeyEvent;
    
        .line 346
        invoke-virtual {p1}, Landroid/view/KeyEvent;->getAction()I
    
        move-result v0
    
        const/4 v1, 0x0
    
        const/4 v2, 0x1
    
        if-nez v0, :cond_a
    
        move v0, v2
    
        goto :goto_b
    
        :cond_a
        move v0, v1
    
        .line 347
        .local v0, "isDown":Z
        :goto_b
        invoke-virtual {p1}, Landroid/view/KeyEvent;->getKeyCode()I
    
        move-result v3
    
        .line 349
        .local v3, "keyCode":I
        const/16 v4, 0x12
    
        if-ne v3, v4, :cond_8c  # Changed to :cond_8c
        if-nez v0, :cond_8c  # Changed to :cond_8c
        iget-object v4, p0, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController$2;->this$0:Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;
    
        invoke-static {v4}, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;->access$300(Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;)Lcom/android/systemui/statusbar/phone/StatusBar;
    
        move-result-object v4
    
        invoke-virtual {v4}, Lcom/android/systemui/statusbar/phone/StatusBar;->isDeviceInteractive()Z
    
        move-result v4
    
        if-eqz v4, :cond_8c  # Changed to :cond_8c
    
        # New keyguard check added here
        iget-object v4, p0, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController$2;->this$0:Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;
    
        invoke-static {v4}, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;->access$300(Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;)Lcom/android/systemui/statusbar/phone/StatusBar;
    
        move-result-object v4
    
        invoke-virtual {v4}, Lcom/android/systemui/statusbar/phone/StatusBar;->isKeyguardShowing()Z
    
        move-result v4
    
        if-nez v4, :cond_2d
    
        goto/16 :goto_8c  # Skip if not on keyguard
    
        .line 350
        :cond_2d
        iget-object v4, p0, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController$2;->this$0:Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;
    
        invoke-static {v4}, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;->access$200(Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;)Lcom/android/systemui/statusbar/phone/NotificationShadeWindowView;
    
        move-result-object v4
    
        invoke-virtual {v4}, Landroid/widget/FrameLayout;->getContext()Landroid/content/Context;
    
        move-result-object v4
    
        .line 351
        .local v4, "context":Landroid/content/Context;
        const-string v5, "audio"
    
        invoke-virtual {v4, v5}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
    
        move-result-object v5
    
        check-cast v5, Landroid/media/AudioManager;
    
        .line 352
        .local v5, "audioManager":Landroid/media/AudioManager;
        invoke-virtual {v5}, Landroid/media/AudioManager;->getRingerMode()I
    
        move-result v6
    
        .line 354
        .local v6, "currentMode":I
        const/4 v7, 0x2
    
        if-ne v6, v7, :cond_4a
    
        .line 355
        invoke-virtual {v5, v2}, Landroid/media/AudioManager;->setRingerMode(I)V
    
        goto/16 :goto_8b
    
        :cond_4a
        if-ne v6, v2, :cond_87
    
        .line 359
        invoke-virtual {v5, v7}, Landroid/media/AudioManager;->setRingerMode(I)V
    
        .line 360
        invoke-virtual {v5, v1}, Landroid/media/AudioManager;->setRingerMode(I)V
    
        .line 362
        const-string v8, "notification"
    
        invoke-virtual {v4, v8}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
    
        move-result-object v8
    
        check-cast v8, Landroid/app/NotificationManager;
    
        .line 364
        .local v8, "notificationManager":Landroid/app/NotificationManager;
        invoke-virtual {v8, v2}, Landroid/app/NotificationManager;->setInterruptionFilter(I)V
    
        .line 366
        const-wide/16 p0, 0x64
    
        :try_start_5f
        invoke-static {p0, p1}, Ljava/lang/Thread;->sleep(J)V
        :try_end_62
        .catch Ljava/lang/InterruptedException; {:try_start_5f .. :try_end_62} :catch_63
    
        .line 368
        goto :goto_64
    
        .line 367
        :catch_63
        move-exception p0
    
        .line 370
        :goto_64
        invoke-virtual {v5}, Landroid/media/AudioManager;->getRingerMode()I
    
        move-result p0
    
        .line 371
        .local p0, "newMode":I
        if-eqz p0, :cond_8b
    
        if-ne p0, v2, :cond_6f
    
        if-ne p0, v7, :cond_7c
    
        goto :goto_8b
    
        :cond_6f
        new-instance v0, Landroid/content/Intent;
    
        const-string v8, "com.custom.ringer.TOGGLE_RINGER"
    
        invoke-direct {v0, v8}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
    
        invoke-virtual {v4, v0}, Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;)V
    
        new-instance v0, Landroid/content/Intent;
    
        const-string v8, "com.custom.ringer.TOGGLE_RINGER"
    
        invoke-direct {v0, v8}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
    
        invoke-virtual {v4, v0}, Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;)V
    
        goto :goto_8b
    
        :cond_7c
        new-instance v0, Landroid/content/Intent;
    
        const-string v8, "com.custom.ringer.TOGGLE_RINGER"
    
        invoke-direct {v0, v8}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
    
        invoke-virtual {v4, v0}, Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;)V
    
        .line 375
        .end local v8    # "notificationManager":Landroid/app/NotificationManager;
        .end local p0    # "newMode":I
        .end local p1    # "event":Landroid/view/KeyEvent;
        goto :goto_8b
    
        .line 380
        :cond_87
        invoke-virtual {v5, v7}, Landroid/media/AudioManager;->setRingerMode(I)V
    
        goto :goto_8b
    
        .line 389
        .end local v4    # "context":Landroid/content/Context;
        .end local v5    # "audioManager":Landroid/media/AudioManager;
        .end local v6    # "currentMode":I
        :cond_8b
        :goto_8b
        return v2
    
        .line 389
        :cond_8c  # New label for skipped cases
        :goto_8c
        const/4 v4, 0x4
    
        if-eq v3, v4, :cond_db
    
        const/16 v4, 0x3e
    
        if-eq v3, v4, :cond_cd
    
        const/16 v4, 0x52
    
        if-eq v3, v4, :cond_c0
    
        const/16 v0, 0x18
    
        if-eq v3, v0, :cond_a0
    
        const/16 v0, 0x19
    
        if-eq v3, v0, :cond_a0
    
        goto :goto_da
    
        .line 365
        :cond_a0
        iget-object v0, p0, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController$2;->this$0:Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;
    
        invoke-static {v0}, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;->access$1400(Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;)Lcom/android/systemui/statusbar/SysuiStatusBarStateController;
    
        move-result-object v0
    
        invoke-interface {v0}, Lcom/android/systemui/plugins/statusbar/StatusBarStateController;->isDozing()Z
    
        move-result v0
    
        if-eqz v0, :cond_da
    
        .line 366
        iget-object p0, p0, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController$2;->this$0:Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;
    
        invoke-static {p0}, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;->access$200(Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;)Lcom/android/systemui/statusbar/phone/NotificationShadeWindowView;
    
        move-result-object p0
    
        invoke-virtual {p0}, Landroid/widget/FrameLayout;->getContext()Landroid/content/Context;
    
        move-result-object p0
    
        invoke-static {p0}, Landroid/media/session/MediaSessionLegacyHelper;->getHelper(Landroid/content/Context;)Landroid/media/session/MediaSessionLegacyHelper;
    
        move-result-object p0
    
        const/high16 v0, -0x80000000
    
        .line 367
        invoke-virtual {p0, p1, v0, v2}, Landroid/media/session/MediaSessionLegacyHelper;->sendVolumeKeyEvent(Landroid/view/KeyEvent;IZ)V
    
        return v2
    
        :cond_c0
        if-nez v0, :cond_da
    
        .line 355
        iget-object p0, p0, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController$2;->this$0:Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;
    
        invoke-static {p0}, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;->access$300(Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;)Lcom/android/systemui/statusbar/phone/StatusBar;
    
        move-result-object p0
    
        invoke-virtual {p0}, Lcom/android/systemui/statusbar/phone/StatusBar;->onMenuPressed()Z
    
        move-result p0
    
        return p0
    
        :cond_cd
        if-nez v0, :cond_da
    
        .line 360
        iget-object p0, p0, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController$2;->this$0:Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;
    
        invoke-static {p0}, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;->access$300(Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;)Lcom/android/systemui/statusbar/phone/StatusBar;
    
        move-result-object p0
    
        invoke-virtual {p0}, Lcom/android/systemui/statusbar/phone/StatusBar;->onSpacePressed()Z
    
        move-result p0
    
        return p0
    
        :cond_da
        :goto_da
        return v1
    
        :cond_db
        if-nez v0, :cond_e6
    
        .line 350
        iget-object p0, p0, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController$2;->this$0:Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;
    
        invoke-static {p0}, Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;->access$300(Lcom/android/systemui/statusbar/phone/NotificationShadeWindowViewController;)Lcom/android/systemui/statusbar/phone/StatusBar;
    
        move-result-object p0
    
        invoke-virtual {p0}, Lcom/android/systemui/statusbar/phone/StatusBar;->onBackPressed()Z
    
        :cond_e6
        return v2
    .end method
    

    בCLASS:
    com/android/systemui/statusbar/phone/qs/tiles/RingerModeTile
    בתוך הMETHOD:
    handleSetListening
    להוסיף לפני line 92. את השורה:

    .line 90
    new-instance p1, Landroid/content/IntentFilter;
    invoke-direct {p1}, Landroid/content/IntentFilter;-><init>()V
    const-string v0, "android.media.RINGER_MODE_CHANGED"
    .line 91
    invoke-virtual {p1, v0}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
    
    # להוסיף את השורה הזו
    const-string v0, "com.custom.ringer.TOGGLE_RINGER"
    invoke-virtual {p1, v0}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
    # עד כאן
    
    .line 92
    invoke-virtual {p0}, Lcom/android/systemui/qs/tileimpl/QSTileImpl;->getHost()Lcom/android/systemui/qs/QSHost;
    
    
    

    בCLASS:
    com/android/systemui/statusbar/phone/qs/tiles/RingerModeTile$1
    להחליף את הMETHOD:
    onReceive
    עם זה:

    .method public onReceive(Landroid/content/Context;Landroid/content/Intent;)V
        .registers 5
    
        .line 101
        invoke-virtual {p2}, Landroid/content/Intent;->getAction()Ljava/lang/String;
        move-result-object p1
    
        const-string v0, "com.custom.ringer.TOGGLE_RINGER"
        invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
        move-result v0
    
        if-eqz v0, :cond_15
    
        .line 102
        iget-object p0, p0, Lcom/android/systemui/qs/tiles/RingerModeTile$1;->this$0:Lcom/android/systemui/qs/tiles/RingerModeTile;
        invoke-virtual {p0}, Lcom/android/systemui/qs/tiles/RingerModeTile;->handleClick()V
        return-void
    
        :cond_15
        const-string v0, "android.media.RINGER_MODE_CHANGED"
        invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
        move-result p1
    
        if-eqz p1, :cond_23
    
        .line 106
        iget-object p0, p0, Lcom/android/systemui/qs/tiles/RingerModeTile$1;->this$0:Lcom/android/systemui/qs/tiles/RingerModeTile;
        invoke-virtual {p0}, Lcom/android/systemui/qs/tileimpl/QSTileImpl;->refreshState()V
    
        :cond_23
        return-void
    .end method
    

    לשמור (בלי לחתום כמובן).

    system/system_ext-/priv-app/Launcher3QuickStep/Launcher3QuickStep.apk

    בDEX EDITOR PLUS:

    בCLASS:
    com/android/launcher3/util/KeyCodeEventUtil
    בתוך הMETHOD:
    longPressKeyEventForMainActivity
    להוסיף מתחת לשורות:

     .line 179
        :pswitch_f  #0x12
    

    את זה:

    const-string v1, "audio"
    
        invoke-virtual {p0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
    
        move-result-object v1
    
        check-cast v1, Landroid/media/AudioManager;
    
        invoke-virtual {v1}, Landroid/media/AudioManager;->getRingerMode()I
    
        move-result v2
    
        const/4 v3, 0x2
    
        const/4 v4, 0x1
    
        const/4 v5, 0x0
    
        if-ne v2, v3, :cond_24
    
        invoke-virtual {v1, v4}, Landroid/media/AudioManager;->setRingerMode(I)V
    
        goto :goto_6a
    
        :cond_24
        if-ne v2, v4, :cond_67
    
        invoke-virtual {v1, v3}, Landroid/media/AudioManager;->setRingerMode(I)V
    
        invoke-virtual {v1, v5}, Landroid/media/AudioManager;->setRingerMode(I)V
    
        const-string v2, "notification"
    
        invoke-virtual {p0, v2}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
    
        move-result-object v2
    
        check-cast v2, Landroid/app/NotificationManager;
    
        invoke-virtual {v2, v4}, Landroid/app/NotificationManager;->setInterruptionFilter(I)V
    
        const-wide v6, 0x64
    
        :try_start_3c
        invoke-static {v6, v7}, Ljava/lang/Thread;->sleep(J)V
        :try_end_3f
        .catch Ljava/lang/InterruptedException; {:try_start_3c .. :try_end_3f} :catch_3f
    
        :catch_3f
        invoke-virtual {v1}, Landroid/media/AudioManager;->getRingerMode()I
    
        move-result v2
    
        if-nez v2, :cond_46
    
        goto :goto_6a
    
        :cond_46
        if-ne v2, v4, :cond_4b
    
        const-string v3, "su 0 u:r:su:s0 -c sh -c \"/system/bin/service call statusbar 1; /system/bin/sleep 0.1; /system/bin/am broadcast -a com.custom.ringer.TOGGLE_RINGER -p com.android.systemui; /system/bin/service call statusbar 2\""
    
        goto :goto_4d
    
        :cond_4b
        const-string v3, "su 0 u:r:su:s0 -c sh -c \"/system/bin/service call statusbar 1; /system/bin/sleep 0.1; /system/bin/am broadcast -a com.custom.ringer.TOGGLE_RINGER -p com.android.systemui; /system/bin/am broadcast -a com.custom.ringer.TOGGLE_RINGER -p com.android.systemui; /system/bin/service call statusbar 2\""
    
        :goto_4d
        invoke-static {}, Ljava/lang/Runtime;->getRuntime()Ljava/lang/Runtime;
    
        move-result-object v2
    
        invoke-virtual {v2, v3}, Ljava/lang/Runtime;->exec(Ljava/lang/String;)Ljava/lang/Process;
    
        move-result-object v2
    
        invoke-virtual {v2}, Ljava/lang/Process;->waitFor()I
    
        move-result v2
    
        if-nez v2, :cond_5c
    
        goto :goto_6a
    
        :cond_5c
        const-string v2, "החלף באופן ידני ונסה שוב"
    
        const/4 v3, 0x1
    
        invoke-static {p0, v2, v3}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
    
        move-result-object v2
    
        invoke-virtual {v2}, Landroid/widget/Toast;->show()V
    
        goto :goto_6a
    
        :cond_67
        invoke-virtual {v1, v3}, Landroid/media/AudioManager;->setRingerMode(I)V
    
        :goto_6a
    

    לשמור (וכנ"ל).

    בהגדרות->הודעות ויישומים->מתקדם->גישה מיוחדת לאפליקציות->נא לא להפריע לגישה->Quickstep: לתת הרשאה שיהיה מותר.

    להפעיל מחדש.

    מי שרוצה להכין מדריך יותר מפורט יבורך, אין לי כ"כ זמן.

    בהצלחה!

    (הבהרה: בוודאי שנעזרתי בAI, כמו כולם היום נראה לי...
    ובוודאי שהקוד עובד (לי לפחות, שמתי כבר לארבעה טלפונים), אחרת לא הייתי מביא אותו...)

    עזרה הדדית - שיאומי f21 pro ו +f21 pro

  • להורדה | aurora store כשר - אתם בוחרים איזה אפליקציות יהיו!
    L lilo159

    בעזרת ד' סיימתי לעבוד על ממשק נוח לעריכת הקובץ (כולל חיפוש אפליקציות, אונליין). אם זה מעניין מישהו, בעזרת ד' אעדכן בפוסט הראשון.

    אפליקציות להורדה

  • שיתוף | וואצפ מסונן, כמעט להורדה
    L lilo159

    בעזרת ד' זה יהיה בחנות של@cfopuser עם עדכונים אוטומטיים..

    אפליקציות להורדה

  • בקשה | עקיפת דרישת גוגל פליי באפליקציות
    L lilo159

    @נוחעם-FM קישור לשיחה בסטודיו AI
    my-passwords-25.12.21_apks.apk

    עזרה הדדית - בניית ופיתוח אפליקציות

  • שיתוף | מאקרו לניתוק שיחה באמצעות מקש ניתוק שיחה...
    L lilo159

    הכותרת אולי נשמעת מגוחכת, אבל:
    אם אתם לא משתמשים בחייגן המובנה, אז לחיצה על ניתוק שיחה מחזירה אותם למסך הבית, ולא מנתקת את השיחה...
    המאקרו הזה אמור לפתור זאת.
    המאקרו להורדה

    ניתוק שיחה.png

    על המאקרו: טכנית, עד כמה שידוע לי, אי אפשר לשנות את פעולת המקש הזה ע"י אפליקציות כדוגמת key-mapper וכו' (יכול להיות שבאפליקציה הזו ספציפית זה אפשרי בתשלום, לא ניסיתי), כיוון שבעצם זה מקש הכיבוי.
    המאקרו הזה מבוסס על מאקרו שמצאתי בתבניות של מאקרו דרויד, שהטריגר שלו הוא intent של סגירת דיאלוג מערכת. באופן רגיל, ברגע שלוחצים ארוך (כ2 שניות) על מקש הכיבוי, נפתח דיאלוג לבחירה האם לכבות את הטלפון. המאקרו מזהה את זה, סוגר מיידית את הדיאלוג, ואז אפשר לבצע כל פעולה שנבחר.

    בהתחלה חששתי קצת שזה לא יהיה נוח ללחוץ ארוך בשביל לנתק, אבל באמת זה ממש לא מורגש...
    אשמח לשמוע אם עובד לכם, בהצלחה!

    עזרה הדדית - שיאומי f21 pro ו +f21 pro

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

    בהמשך למדריך הישן שלי כאן, כעת לפני מעבר שלי לדאמבדוריד, היה חשוב לי שתהיה האפשרות הזו.
    מסך.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;
    

    בהצלחה!

    עזרה הדדית - שיאומי f21 pro ו +f21 pro

  • להורדה | פפר בנק דיגיטלי ללא תמונת הכניסה
    L lilo159

    תגובה: בירור | האם יש אפשרות לאפליקציית פפר בנק דיגיטלי ללא תמונות
    בעזרת ד'
    לכל מאן דבעי, הסרתי את תמונת השער של הכניסה לפפר. יש מגבלות על שיתוף הapk כאן? ואם כן, באיזו דרך כן אפשר לשתף?
    דבר נוסף, כיוון שאני די חדש בפפר לא ידוע לי על עוד תמונות בעייתיות, אשמח להערתכם.

    עזרה הדדית אפליקציות

  • להורדה | נמאס לכם מספוטיפיי? תורידו את metrolist (ללא תמונות)!
    L lilo159

    עודכן לגרסה 12.6.0

    אפליקציות להורדה
  • התחברות

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

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