מדריך | הוספת תאריך עברי למסך הבית בדאמבדרויד
עזרה הדדית - שיאומי f21 pro ו +f21 pro
1
פוסטים
1
כותבים
37
צפיות
2
עוקבים
-
בהמשך למדריך | הוספת תאריך עברי למסך הנעילה בדאמבדרויד.

למעשה את התוצאה נראה במסך הבית, אבל לא אותו אנחנו עורכים, אלא את הווידג'ט של השעון. (נפק"מ, שלכאורה הווידג'ט יהיה שונה גם בלאונצ'ר אחר).כמובן שנערך באמצעות AI וכו'.
באפליקציית deskclock
שנמצאת כאן:
system/product/app/DeskClock/DeskClock.apk- להוסיף את הקלאס 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- בקלאס 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- בקלאס 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- ועכשיו לעריכת 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>בהצלחה!
- להוסיף את הקלאס HebrewDateHelper.smali בנתיב:
-
L lilo159 התייחס לנושא זה