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

פוסטים

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

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

    @מחנה-ידידים הוספתי בספויילר.
    לא ניסיתי, אבל זה אמור לעבוד.

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

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

    @מחנה-ידידים ההחלטה של מי שערך..
    אם זה חשוב לך אפשר לשנות, לי היה חשוב שהתאריך העברי יהיה מעל..

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

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

    @מחנה-ידידים
    https://mitmachim.top/topic/95097/מדריך-הוספת-תאריך-עברי-למסך-הבית-בגרסה-הרגילה-של-f21-pro

    עזרה הדדית - שיאומי 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

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

    @נוחעם-FM חשבתי על זה שוב, למה בעצם זה יהיה לך נוח?
    הרי בשביל כל שינוי קטן תצטרך להוריד שוב 150 מ"ב של אפליקציה..
    חוץ מזה שהאתר משתמש בAPI של גוגל לצורך חיפוש, וזה ייגמר מאוד מהר אם אני אפרסם את זה..
    ממליץ לך כן ללכת על הגישה שכתבתי, אני יכול אפילו להביא לך קובץ מוכן, ואני אעזור לך בהגדרה של האתר של השליטה על הקובץ..

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

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

    @נוחעם-FM כוונתך לקובץ חיצוני (נגיד בassets), שפשוט יהיה שם בלי צורך בקובץ באינטרנט?
    עריכה: עכשיו ראיתי למה הגבת.
    אמור להיות אפשרי.

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

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

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

    24c53a6d-f394-446e-96a0-a4976e21acf2-image.png

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

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

  • בעיה | רוט לא תקין בדאמבדרואיד
    L lilo159

    @reemzed123 כתב בבעיה | רוט לא תקין בדאמבדרואיד:

    המדריך להוספת תאריך עברי

    שמח לשמוע שמישהו באמת מנסה לעשות את המדריך..

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

  • מדריך | 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

    https://mitmachim.top/topic/94896/מדריך-הוספת-תאריך-עברי-למסך-הבית-בדאמבדרויד

    עזרה הדדית - שיאומי 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

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

    @שניאור-שמח נכון, אבל על פניו זה כרגע עובד, לכן אולי המשתמש מעדיף לחכות עם העדכון, זה בכל זאת משהו כמו 90 מ"ב כל פעם..
    עם הזמן גם נראה כמה זמן הגרסה הערוכה מחזיקה בלי עדכון..

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

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

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

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

  • בקשה | העברה של הוואטסאפ משיאומי F21 לשיאומי F25 תמורת תשלום סביר
    L lilo159

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

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

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

    @שניאור-שמח עד כעת, הוואצפ עבר עוד עריכה חוץ מעריכת סמאלי, ע"י HOOKING, שתלוי בפרוייקט בגיטהאב, ותלוי בתחזוקה שלו ע"י בעל הפרוייקט. כעת ניסיתי להעביר את הלוגיקה שלו לסמאלי, עם עוד כמה תיקונים, ולראות כמה מים זה יחזיק... כרגע זה עובד..

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

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

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

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

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

    @אלוף-תימן

    אם תרצה אני עדיין יכול להוסיף תמונות או לעשות סרטון.


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

    ראית איזה יופי? ב-MTK אנדרואיד 13 של אלוף תימן, המהנדסים שינו את המבנה בשני מקומות קריטיים:

    1. ב-KeyguardSliceProvider: הם הוציאו את פרמוט התאריך למתודה נפרדת בשם getFormattedDateLocked()! אם היינו מחפשים את ה-mDateFormat->format בתוך updateClockLocked כמו בדאמבדרויד, לא היינו מוצאים אותו.
    2. ב-KeyguardSliceView: הם בכלל לא קוראים ל-setEllipsize בקוד ה-Smali (כנראה שזה מוגדר ב-XML או בקלאס KeyguardSliceTextView עצמו). לכן אין לנו שורות להחליף, אלא רק שורות להוסיף.

    בנוסף, עשיתי לך כאן טריק קטן של אופטימיזציה ברגיסטרים: במקום להשתמש ברגיסטר v2 בשביל לבדוק אם indexOf שווה ל-(1-), השתמשתי בפקודה if-ltz (שבודקת אם התוצאה קטנה מ-0). למה? כי המתודה מוגדרת עם .registers 3, מה שאומר ש-v2 הוא בעצם p0 (ה-this של הקלאס). אם היינו דורסים את v2, המכשיר היה קורס מיד לאחר מכן כשהיה מנסה לשמור את ה-mLastText.

    הנה ההוראות המדויקות לפורטינג עבור הנגן של אלוף תימן:

    שלב 1: הזרקת הלוגיקה ב-KeyguardSliceProvider

    בנתיב com/android/systemui/keyguard/KeyguardSliceProvider.smali, חפש את המתודה updateClockLocked()V.
    תמצא שם את השורות הבאות:

        .line 406
        invoke-virtual {p0}, Lcom/android/systemui/keyguard/KeyguardSliceProvider;->getFormattedDateLocked()Ljava/lang/String;
    
        move-result-object v0
    

    מיד אחריהן (ולפני ה-iget-object v1), הוסף את הקוד שלנו. השתמשתי ב-v1 בתור רגיסטר זמני כי המערכת במילא דורסת אותו שורה אחת למטה. הדבק את זה:

        # --- הוספת התאריך העברי ---
        const/16 v1, 0x2c
        invoke-virtual {v0, v1}, Ljava/lang/String;->indexOf(I)I
        move-result v1
        if-ltz v1, :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
        # --- סוף הוספה ---
    

    שלב 2: הגדרת 2 שורות במסך הנעילה ב-KeyguardSliceView

    בנתיב com/android/keyguard/KeyguardSliceView.smali, חפש את המתודה showSlice.
    תמצא שם את יצירת ה-TextView (סביבות שורה 168):

        new-instance v9, Lcom/android/keyguard/KeyguardSliceView$KeyguardSliceTextView;
    
        iget-object v10, p0, Landroid/widget/LinearLayout;->mContext:Landroid/content/Context;
    
        invoke-direct {v9, v10}, Lcom/android/keyguard/KeyguardSliceView$KeyguardSliceTextView;-><init>(Landroid/content/Context;)V
    

    מיד אחרי ה-<init> (לפני ה-setTextColor), אנחנו נזריק את ההגדרות שלנו למספר שורות. גם כאן השתמשתי ב-v10 כי הוא פנוי לחלוטין ברגע הזה. הוסף את השורות הבאות:

        # --- לאפשר תצוגת 2 שורות לתאריך ---
        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
        # --- סוף הוספה ---
    

    שלב 3: הוספת ה-Class

    כמובן, את השלב הראשון במדריך שלך – יצירת הקובץ HebrewDateHelper.smali בנתיב com/android/systemui עם כל הלוגיקה בפנים – צריך לעשות בדיוק כמו בדאמבדרויד, ללא שום שינוי.

    זהו זה! שמור, קמפל חזרה ותתקין. הקוד עכשיו תפור ברמת הפיקסל ל-MTK 13. תעביר את זה לאלוף תימן, וזה אמור לעבוד לו חלק לגמרי. עבודה מעולה שלך על המדריך המקורי!

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

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

    @אלוף-תימן פשוט תגלול עד לסוף השיחה, זה כמעט אותם עריכות פשוט להדביק איפה שהסטודיו מכוון..

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

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

    @אלוף-תימן https://aistudio.google.com/app/prompts?state={"ids":["1iha709r2k0z7WMQFgCyxAqfCEeDeYA9a"],"action":"open","userId":"104874418095163097764","resourceKeys":{}}&usp=sharing
    אתה מעדיף אולי שאני אוסיף את זה במדריך?

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

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

    @אלוף-תימן בהמשך, אני פשוט לא ליד מחשב. זה עובד לך?

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

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

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