From 1ba1d775f75ee969d82ca32d9d61b5aa683bafd6 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 22 May 2016 09:24:20 -0400 Subject: [PATCH 1/8] Bump version to 1.5.3 --- app/src/main/AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e8d4dc86d..7eeedca29 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,8 +21,8 @@ + android:versionCode="19" + android:versionName="1.5.3"> From 8aade2f14524b502e8192574c2ae014b963c7d78 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 22 May 2016 09:33:30 -0400 Subject: [PATCH 2/8] Fix crash when habits with reminders have short names Fixes #109 --- .../java/org/isoron/uhabits/helpers/ReminderHelper.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/isoron/uhabits/helpers/ReminderHelper.java b/app/src/main/java/org/isoron/uhabits/helpers/ReminderHelper.java index 07b113f15..35e1a92a1 100644 --- a/app/src/main/java/org/isoron/uhabits/helpers/ReminderHelper.java +++ b/app/src/main/java/org/isoron/uhabits/helpers/ReminderHelper.java @@ -93,9 +93,9 @@ public class ReminderHelper else manager.set(AlarmManager.RTC_WAKEUP, reminderTime, pendingIntent); - Log.d("ReminderHelper", String.format("Setting alarm (%s): %s...", - DateFormat.getDateTimeInstance().format(new Date(reminderTime)), - habit.name.substring(0, 3))); + String name = habit.name.substring(0, Math.min(3, habit.name.length())); + Log.d("ReminderHelper", String.format("Setting alarm (%s): %s", + DateFormat.getDateTimeInstance().format(new Date(reminderTime)), name)); } @Nullable From e0888a9b4d9103b2278fa15479ca094053566cca Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 22 May 2016 10:27:27 -0400 Subject: [PATCH 3/8] Remove fields from BaseWidgetProvider This caused a bug when multiple widgets had different sizes. The size of the last widget would be used in all of them. --- .../uhabits/widgets/BaseWidgetProvider.java | 53 ++++++++++++------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java b/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java index 6490084f7..dd49d5452 100644 --- a/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java +++ b/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java @@ -42,12 +42,15 @@ import org.isoron.uhabits.tasks.BaseTask; import java.io.FileOutputStream; import java.io.IOException; +import java.util.Arrays; public abstract class BaseWidgetProvider extends AppWidgetProvider { - - private int portraitWidth, portraitHeight; - private int landscapeWidth, landscapeHeight; + private class WidgetDimensions + { + public int portraitWidth, portraitHeight; + public int landscapeWidth, landscapeHeight; + } protected abstract int getDefaultHeight(); @@ -98,7 +101,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider private void updateWidget(Context context, AppWidgetManager manager, int widgetId, Bundle options) { - updateWidgetSize(context, options); + WidgetDimensions dim = getWidgetDimensions(context, options); Context appContext = context.getApplicationContext(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext); @@ -113,7 +116,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider return; } - new RenderWidgetTask(widgetId, context, habit, manager).execute(); + new RenderWidgetTask(widgetId, context, habit, dim, manager).execute(); } private void drawErrorWidget(Context context, AppWidgetManager manager, int widgetId) @@ -159,7 +162,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider } } - private void updateWidgetSize(Context context, Bundle options) + private WidgetDimensions getWidgetDimensions(Context context, Bundle options) { int maxWidth = getDefaultWidth(); int minWidth = getDefaultWidth(); @@ -178,11 +181,12 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT)); } - portraitWidth = minWidth; - portraitHeight = maxHeight; - - landscapeWidth = maxWidth; - landscapeHeight = minHeight; + WidgetDimensions ws = new WidgetDimensions(); + ws.portraitWidth = minWidth; + ws.portraitHeight = maxHeight; + ws.landscapeWidth = maxWidth; + ws.landscapeHeight = minHeight; + return ws; } private void measureCustomView(Context context, int w, int h, View customView) @@ -212,16 +216,18 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider private final Context context; private final Habit habit; private final AppWidgetManager manager; - public RemoteViews portraitRemoteViews, landscapeRemoteViews; - public View portraitWidgetView, landscapeWidgetView; + private RemoteViews portraitRemoteViews, landscapeRemoteViews; + private View portraitWidgetView, landscapeWidgetView; + private WidgetDimensions dim; - public RenderWidgetTask(int widgetId, Context context, Habit habit, + public RenderWidgetTask(int widgetId, Context context, Habit habit, WidgetDimensions ws, AppWidgetManager manager) { this.widgetId = widgetId; this.context = context; this.habit = habit; this.manager = manager; + this.dim = ws; } @Override @@ -232,11 +238,12 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider portraitRemoteViews = new RemoteViews(context.getPackageName(), getLayoutId()); portraitWidgetView = buildCustomView(context, habit); - measureCustomView(context, portraitWidth, portraitHeight, portraitWidgetView); + measureCustomView(context, dim.portraitWidth, dim.portraitHeight, portraitWidgetView); landscapeRemoteViews = new RemoteViews(context.getPackageName(), getLayoutId()); landscapeWidgetView = buildCustomView(context, habit); - measureCustomView(context, landscapeWidth, landscapeHeight, landscapeWidgetView); + measureCustomView(context, dim.landscapeWidth, dim.landscapeHeight, + landscapeWidgetView); } private void updateAppWidget() @@ -260,8 +267,10 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider { try { - buildRemoteViews(portraitWidgetView, portraitRemoteViews, portraitWidth, portraitHeight); - buildRemoteViews(landscapeWidgetView, landscapeRemoteViews, landscapeWidth, landscapeHeight); + buildRemoteViews(portraitWidgetView, portraitRemoteViews, + dim.portraitWidth, dim.portraitHeight); + buildRemoteViews(landscapeWidgetView, landscapeRemoteViews, + dim.landscapeWidth, dim.landscapeHeight); updateAppWidget(); } catch (Exception e) @@ -273,8 +282,12 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider super.onPostExecute(aVoid); } - private void buildRemoteViews(View widgetView, RemoteViews remoteViews, int width, int height) + private void buildRemoteViews(View widgetView, RemoteViews remoteViews, int width, + int height) { + if(habit.getId() == 4) + Log.d("BaseWidgetProvider", String.format("width=%d height=%d\n", width, height)); + widgetView.invalidate(); widgetView.setDrawingCacheEnabled(true); widgetView.buildDrawingCache(true); @@ -287,7 +300,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider int imageWidth = widgetView.getMeasuredWidth(); int imageHeight = widgetView.getMeasuredHeight(); int p[] = getPadding(width, height, imageWidth, imageHeight); - + if(habit.getId() == 4) Log.d("BaseWidgetProvider", Arrays.toString(p)); remoteViews.setViewPadding(R.id.buttonOverlay, p[0], p[1], p[2], p[3]); } From 9ec1afc2084d82ad3fd569bd0164aa2231d702d0 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 22 May 2016 10:28:58 -0400 Subject: [PATCH 4/8] Remove associated preference after deleting widget --- .../java/org/isoron/uhabits/widgets/BaseWidgetProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java b/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java index dd49d5452..ece46e3d8 100644 --- a/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java +++ b/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java @@ -74,7 +74,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(appContext); for(Integer id : appWidgetIds) - prefs.edit().remove(getHabitIdKey(id)); + prefs.edit().remove(getHabitIdKey(id)).apply(); } @Override From 38024d71cef4000722015fef3acf9472167cc0f5 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 22 May 2016 12:24:28 -0400 Subject: [PATCH 5/8] Allow checkmark widget to be resized to very small sizes --- .../uhabits/views/CheckmarkWidgetView.java | 16 +++++++++++++++- .../java/org/isoron/uhabits/views/RingView.java | 5 +++++ app/src/main/res/values/dimens.xml | 2 ++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/isoron/uhabits/views/CheckmarkWidgetView.java b/app/src/main/java/org/isoron/uhabits/views/CheckmarkWidgetView.java index 01cf98a19..869c91afe 100644 --- a/app/src/main/java/org/isoron/uhabits/views/CheckmarkWidgetView.java +++ b/app/src/main/java/org/isoron/uhabits/views/CheckmarkWidgetView.java @@ -23,6 +23,7 @@ import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.AttributeSet; +import android.util.TypedValue; import android.widget.TextView; import org.isoron.uhabits.R; @@ -40,7 +41,6 @@ public class CheckmarkWidgetView extends HabitWidgetView implements HabitDataVie @Nullable private String name; - @Nullable private RingView ring; private TextView label; private int checkmarkValue; @@ -147,8 +147,22 @@ public class CheckmarkWidgetView extends HabitWidgetView implements HabitDataVie w *= scale; h *= scale; + if(h < getResources().getDimension(R.dimen.checkmarkWidget_heightBreakpoint)) + ring.setVisibility(GONE); + else + ring.setVisibility(VISIBLE); + widthMeasureSpec = MeasureSpec.makeMeasureSpec((int) w, MeasureSpec.EXACTLY); heightMeasureSpec = MeasureSpec.makeMeasureSpec((int) h, MeasureSpec.EXACTLY); + + float textSize = 0.15f * h; + float maxTextSize = getResources().getDimension(R.dimen.smallerTextSize); + textSize = Math.min(textSize, maxTextSize); + + label.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); + ring.setTextSize(textSize); + ring.setThickness(0.15f * textSize); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); } diff --git a/app/src/main/java/org/isoron/uhabits/views/RingView.java b/app/src/main/java/org/isoron/uhabits/views/RingView.java index 1ab2a9024..cac641a22 100644 --- a/app/src/main/java/org/isoron/uhabits/views/RingView.java +++ b/app/src/main/java/org/isoron/uhabits/views/RingView.java @@ -109,6 +109,11 @@ public class RingView extends View postInvalidate(); } + public void setTextSize(float textSize) + { + this.textSize = textSize; + } + @Override public void setBackgroundColor(int backgroundColor) { diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 42c044142..51147ef4c 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -26,7 +26,9 @@ @dimen/regularTextSize 16sp 14sp + 12sp 10sp 160dp -10dp + 55dp \ No newline at end of file From ff9d50b32a9b17030b10a68c3df3050b33c1ff21 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 22 May 2016 12:29:37 -0400 Subject: [PATCH 6/8] Remove debug code --- .../java/org/isoron/uhabits/widgets/BaseWidgetProvider.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java b/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java index ece46e3d8..9c36fe398 100644 --- a/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java +++ b/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java @@ -42,7 +42,6 @@ import org.isoron.uhabits.tasks.BaseTask; import java.io.FileOutputStream; import java.io.IOException; -import java.util.Arrays; public abstract class BaseWidgetProvider extends AppWidgetProvider { @@ -285,9 +284,6 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider private void buildRemoteViews(View widgetView, RemoteViews remoteViews, int width, int height) { - if(habit.getId() == 4) - Log.d("BaseWidgetProvider", String.format("width=%d height=%d\n", width, height)); - widgetView.invalidate(); widgetView.setDrawingCacheEnabled(true); widgetView.buildDrawingCache(true); @@ -300,7 +296,6 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider int imageWidth = widgetView.getMeasuredWidth(); int imageHeight = widgetView.getMeasuredHeight(); int p[] = getPadding(width, height, imageWidth, imageHeight); - if(habit.getId() == 4) Log.d("BaseWidgetProvider", Arrays.toString(p)); remoteViews.setViewPadding(R.id.buttonOverlay, p[0], p[1], p[2], p[3]); } From 007996c69ed19a29c2c2051b860ee1cea16d0d55 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 22 May 2016 12:49:49 -0400 Subject: [PATCH 7/8] Update translations --- app/src/main/res/values-ar/strings.xml | 28 ++++++++++++++++++++++ app/src/main/res/values-cs/strings.xml | 32 +++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 40edb95e7..b17e91e8b 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -159,4 +159,32 @@ "فشل في توليد تقرير الاعطال" "توليد تقرير الاعطال" "استكشاف الأخطاء وإصلاحها" +"المساعدة في ترجمة هذا البرنامج" +"الوضع الليلي" +"استخدام أسود نقي في الوضع الليلي" +"يستبدل خلفيات رمادية مع أسود نقي في الوضع الليلي. يقلل من استهلاك البطارية في الهواتف مع شاشة AMOLED." +"السطح البيني" +"ترتيب عكسي أيام" +"عرض أيام في ترتيب عكسي على الشاشة الرئيسية" +"يوم" +"أسبوع" +"شهر" + + +"ربع سنه" +"عام" + + + +"مرات في" +"كل %d أيام" +"كل %d أسابيع" +"كل %d أشهر" + + +"النقاط" +"صوت تذكير" + + +"صامت" \ No newline at end of file diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index c5a9e73f4..62be2912f 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1,6 +1,8 @@ -"Loop Habit Tracker + + +"Loop Habit Tracker" "Zvyky" "Nastavení" "Upravit" @@ -150,4 +152,32 @@ Upomínky mohou být potvrzen, odloženy nebo smazány přímo z tvého zaříze "Generace výpisu chyb selhala." "Generovat výpis chyb" "Řešení problémů" +"Pomozte s překladem aplikace" +"Noční téma" +"Zobrazit čistě černou v nočním tématu" +"Nahradí šedé pozadí čistou černou v nočním tématu. Snižuje spotřebu baterie v telefonech s AMOLED displejem." +"Rozhraní" +"Otočit pořadí dnů" +"Zobrazí dny na úvodní stránce v obráceném pořadí" +"Den" +"Týden" +"Měsíc" + + +"Čtvrtletí" +"Rok" + + + +"krát za" +"Každých %d dní" +"Každých %d týdnů" +"Každých %d měsíců" + + +"Skóre" +"Zvuk upomínky" + + +"Žádný" \ No newline at end of file From 0f223f85040df8c4b8596e01c281d58c486e1a12 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 22 May 2016 12:56:15 -0400 Subject: [PATCH 8/8] Update changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7dea3b708..e98a9e609 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +### 1.5.3 (May 22, 2016) + +* Complete Arabic and Czech translations +* Fix crash at startup +* Fix checkmark widget on custom launchers + ### 1.5.2 (May 19, 2016) * Fix missing attachment on bug reports