From 55da0759d45405956764c1f81628bfd97459d50c Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 11 Apr 2017 16:58:35 -0400 Subject: [PATCH 01/10] Bump version --- 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 33ab12704..2a9260417 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,8 +21,8 @@ + android:versionCode="28" + android:versionName="1.7.1"> From 5c8e52264686ac34829984a054259ba1cb217398 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 11 Apr 2017 17:14:25 -0400 Subject: [PATCH 02/10] Fix header labels for RTL languages such as Arabic --- .../habits/list/views/HeaderView.java | 19 +++++++++++++++---- .../isoron/uhabits/utils/InterfaceUtils.java | 8 ++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java index e4863cd54..4eb1f4317 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java @@ -50,8 +50,6 @@ public class HeaderView extends ScrollableChart private RectF rect; - private int maxDataOffset; - public HeaderView(Context context, AttributeSet attrs) { super(context, attrs); @@ -76,7 +74,6 @@ public class HeaderView extends ScrollableChart Resources res = context.getResources(); setScrollerBucketSize((int) res.getDimension(R.dimen.checkmarkWidth)); - setDirection(shouldReverseCheckmarks() ? 1 : -1); StyledResources sr = new StyledResources(context); paint = new TextPaint(); @@ -99,7 +96,7 @@ public class HeaderView extends ScrollableChart @Override public void onCheckmarkOrderChanged() { - setDirection(shouldReverseCheckmarks() ? 1 : -1); + updateDirection(); postInvalidate(); } @@ -112,11 +109,20 @@ public class HeaderView extends ScrollableChart @Override protected void onAttachedToWindow() { + updateDirection(); super.onAttachedToWindow(); if (prefs != null) prefs.addListener(this); if (midnightTimer != null) midnightTimer.addListener(this); } + private void updateDirection() + { + int direction = -1; + if (shouldReverseCheckmarks()) direction *= -1; + if (InterfaceUtils.isLayoutRtl(this)) direction *= -1; + setDirection(direction); + } + @Override protected void onDetachedFromWindow() { @@ -145,6 +151,7 @@ public class HeaderView extends ScrollableChart float width = res.getDimension(R.dimen.checkmarkWidth); float height = res.getDimension(R.dimen.checkmarkHeight); boolean reverse = shouldReverseCheckmarks(); + boolean isRtl = InterfaceUtils.isLayoutRtl(this); day.add(GregorianCalendar.DAY_OF_MONTH, -getDataOffset()); float em = paint.measureText("m"); @@ -153,9 +160,13 @@ public class HeaderView extends ScrollableChart { rect.set(0, 0, width, height); rect.offset(canvas.getWidth(), 0); + if(reverse) rect.offset(- (i + 1) * width, 0); else rect.offset((i - buttonCount) * width, 0); + if (isRtl) rect.set(canvas.getWidth() - rect.right, rect.top, + canvas.getWidth() - rect.left, rect.bottom); + String text = DateUtils.formatHeaderDate(day).toUpperCase(); String[] lines = text.split("\n"); diff --git a/app/src/main/java/org/isoron/uhabits/utils/InterfaceUtils.java b/app/src/main/java/org/isoron/uhabits/utils/InterfaceUtils.java index e22118b2b..8fdc5fc9f 100644 --- a/app/src/main/java/org/isoron/uhabits/utils/InterfaceUtils.java +++ b/app/src/main/java/org/isoron/uhabits/utils/InterfaceUtils.java @@ -22,7 +22,9 @@ package org.isoron.uhabits.utils; import android.content.*; import android.content.res.*; import android.graphics.*; +import android.support.v4.view.*; import android.util.*; +import android.view.*; public abstract class InterfaceUtils { @@ -49,4 +51,10 @@ public abstract class InterfaceUtils DisplayMetrics metrics = resources.getDisplayMetrics(); return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, metrics); } + + public static boolean isLayoutRtl(View view) + { + return ViewCompat.getLayoutDirection(view) == + ViewCompat.LAYOUT_DIRECTION_RTL; + } } From 4c58b084c63f1680efb7962a8a21971ff3487536 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 11 Apr 2017 17:19:18 -0400 Subject: [PATCH 03/10] Fix missing dialog title --- .../isoron/uhabits/activities/habits/edit/BaseDialog.java | 6 ++++++ app/src/main/res/values/styles.xml | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/BaseDialog.java b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/BaseDialog.java index b4c228876..5d2db5a55 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/BaseDialog.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/BaseDialog.java @@ -62,6 +62,12 @@ public abstract class BaseDialog extends AppCompatDialogFragment private ColorPickerDialogFactory colorPickerDialogFactory; + @Override + public int getTheme() + { + return R.style.DialogWithTitle; + } + @Override public void onActivityCreated(Bundle savedInstanceState) { diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index a456262a8..86435f56f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -256,4 +256,8 @@ + + From 6855ef9d5e23090bd3ac3e518d68c468edae24be Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 11 Apr 2017 17:26:06 -0400 Subject: [PATCH 04/10] Update translations --- app/src/main/res/layout/about.xml | 4 ++++ app/src/main/res/values-hi/strings.xml | 18 +++++++++++++++--- app/src/main/res/values-id/strings.xml | 2 ++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/about.xml b/app/src/main/res/layout/about.xml index 5fe1b1a2f..2869631df 100644 --- a/app/src/main/res/layout/about.xml +++ b/app/src/main/res/layout/about.xml @@ -317,6 +317,10 @@ + + diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 45158aac6..c37f603f3 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -91,6 +91,7 @@ 2 घंटा 4 घंटा 8 घंटा + 24 घंटे टॉगल पुनरावृत्ति हल्का दबाने से \" अधिक सुविधाजनक है, लेकिन आकस्मिक टॉगल हो सकता है ।\" @@ -179,7 +180,7 @@ repetitions की संख्या\" इस फ़ाइल में वापस आयात नहीं किया जा सकता है।\" ऐसी फाइल्स उत्पन्न करता है जिसमे आपका सारा डेटा रहता है इस फ़ाइल को वापस आयात किया जा सकता है। बग रिपोर्ट जनरेट करने मे असफल - बग रिपोर्ट जनरेट करने मे सफल + बग रिपोर्ट जनरेट करें \" समस्या निवारण\" \" @@ -198,15 +199,26 @@ repetitions की संख्या\" तिमाही साल - समय शुरू + समय में \" हर %d दिन\" \" हर %d हफ्ते\" \" -हर %d साल\" +हर %d महीने\" स्कोर अनुस्मारक ध्वनि \" कोई आवाज नहीं\" + फिल्टर + डेटाबेस को रिपेयर करें + डेटाबेस रिपेयर सफल + आदत + सॉर्ट करें + मैन्यूअली + नाम द्वारा + रंग द्वारा + स्कोर से + डाउनलोड + एक्सपोर्ट करे diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index cc808293f..4602cbfd6 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -19,6 +19,7 @@ ~ with this program. If not, see . --> + Loop Habit Tracker Kebiasaan Pengaturan Ubah @@ -73,6 +74,7 @@ 2 jam 4 jam 8 jam + 24 jam Tandai dengan cepat. Lebih nyaman namun memungkinkan kesalahan. Durasi tunda sejenak pada pengingat From 65cc99dbf7bf53d8a292482c60122cc84ef7cce1 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 11 Apr 2017 17:49:55 -0400 Subject: [PATCH 05/10] Switch from View.BaseSavedState to Support Library's AbsSavedState See https://code.google.com/p/android/issues/detail?id=196430 --- .../uhabits/activities/common/views/BundleSavedState.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java b/app/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java index 9f61d88f0..fe33993d1 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java +++ b/app/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java @@ -20,9 +20,8 @@ package org.isoron.uhabits.activities.common.views; import android.os.*; -import android.view.*; -public class BundleSavedState extends View.BaseSavedState +public class BundleSavedState extends android.support.v4.view.AbsSavedState { public static final Parcelable.Creator CREATOR = new Parcelable.Creator() @@ -51,7 +50,7 @@ public class BundleSavedState extends View.BaseSavedState public BundleSavedState(Parcel source) { super(source); - this.bundle = source.readBundle(); + this.bundle = source.readBundle(getClass().getClassLoader()); } @Override From 0d6ad265054dcf668407acc1ba3211e07c34cda9 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 11 Apr 2017 21:19:03 -0400 Subject: [PATCH 06/10] Ignore exception when habit is not found --- .../uhabits/preferences/WidgetPreferences.java | 3 ++- .../isoron/uhabits/widgets/BaseWidgetProvider.java | 13 +++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java b/app/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java index f7830e2ba..56566f639 100644 --- a/app/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java +++ b/app/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java @@ -23,6 +23,7 @@ import android.content.*; import android.preference.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; import javax.inject.*; @@ -48,7 +49,7 @@ public class WidgetPreferences public long getHabitIdFromWidgetId(int widgetId) { Long habitId = prefs.getLong(getHabitIdKey(widgetId), -1); - if (habitId < 0) throw new RuntimeException("widget not found"); + if (habitId < 0) throw new HabitNotFoundException(); return habitId; } 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 6c6008d36..e0a188851 100644 --- a/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java +++ b/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java @@ -25,6 +25,8 @@ import android.os.*; import android.support.annotation.*; import android.widget.*; +import com.activeandroid.util.*; + import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; @@ -76,8 +78,15 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider for (int id : ids) { - BaseWidget widget = getWidgetFromId(context, id); - widget.delete(); + try + { + BaseWidget widget = getWidgetFromId(context, id); + widget.delete(); + } + catch (HabitNotFoundException e) + { + Log.e("BaseWidgetProvider", e); + } } } From 140ab34a76f7fb8d467c9ada000a1bbab6ea3a13 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 11 Apr 2017 22:03:16 -0400 Subject: [PATCH 07/10] Verify database version before importing --- .../org/isoron/uhabits/HabitsApplication.java | 13 +++++- .../org/isoron/uhabits/io/LoopDBImporter.java | 41 +++++++++++++------ .../InvalidDatabaseVersionException.java | 24 +++++++++++ .../isoron/uhabits/utils/DatabaseUtils.java | 12 +++++- 4 files changed, 74 insertions(+), 16 deletions(-) create mode 100644 app/src/main/java/org/isoron/uhabits/models/sqlite/InvalidDatabaseVersionException.java diff --git a/app/src/main/java/org/isoron/uhabits/HabitsApplication.java b/app/src/main/java/org/isoron/uhabits/HabitsApplication.java index bad1c4ee5..8e2e1e8ad 100644 --- a/app/src/main/java/org/isoron/uhabits/HabitsApplication.java +++ b/app/src/main/java/org/isoron/uhabits/HabitsApplication.java @@ -21,10 +21,10 @@ package org.isoron.uhabits; import android.app.*; import android.content.*; -import android.support.annotation.*; import com.activeandroid.*; +import org.isoron.uhabits.models.sqlite.*; import org.isoron.uhabits.notifications.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.tasks.*; @@ -88,7 +88,16 @@ public class HabitsApplication extends Application if (db.exists()) db.delete(); } - DatabaseUtils.initializeActiveAndroid(context); + try + { + DatabaseUtils.initializeActiveAndroid(context); + } + catch (InvalidDatabaseVersionException e) + { + File db = DatabaseUtils.getDatabaseFile(context); + db.renameTo(new File(db.getAbsolutePath() + ".invalid")); + DatabaseUtils.initializeActiveAndroid(context); + } widgetUpdater = component.getWidgetUpdater(); widgetUpdater.startListening(); diff --git a/app/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java b/app/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java index a3ebcf882..bfcf5886f 100644 --- a/app/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java +++ b/app/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java @@ -19,20 +19,20 @@ package org.isoron.uhabits.io; -import android.content.Context; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.support.annotation.NonNull; +import android.content.*; +import android.database.*; +import android.database.sqlite.*; +import android.support.annotation.*; +import android.util.*; -import com.activeandroid.ActiveAndroid; +import com.activeandroid.*; -import org.isoron.uhabits.AppContext; +import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.utils.DatabaseUtils; -import org.isoron.uhabits.utils.FileUtils; +import org.isoron.uhabits.utils.*; -import java.io.File; -import java.io.IOException; +import java.io.*; import javax.inject.*; @@ -45,7 +45,8 @@ public class LoopDBImporter extends AbstractImporter private Context context; @Inject - public LoopDBImporter(@NonNull @AppContext Context context, @NonNull HabitList habits) + public LoopDBImporter(@NonNull @AppContext Context context, + @NonNull HabitList habits) { super(habits); this.context = context; @@ -59,15 +60,29 @@ public class LoopDBImporter extends AbstractImporter SQLiteDatabase db = SQLiteDatabase.openDatabase(file.getPath(), null, SQLiteDatabase.OPEN_READONLY); + boolean canHandle = true; + Cursor c = db.rawQuery( "select count(*) from SQLITE_MASTER where name=? or name=?", - new String[]{"Checkmarks", "Repetitions"}); + new String[]{ "Checkmarks", "Repetitions" }); + + if (!c.moveToFirst() || c.getInt(0) != 2) + { + Log.w("LoopDBImporter", "Cannot handle file: tables not found"); + canHandle = false; + } - boolean result = (c.moveToFirst() && c.getInt(0) == 2); + if (db.getVersion() > BuildConfig.databaseVersion) + { + Log.w("LoopDBImporter", String.format( + "Cannot handle file: incompatible version: %d > %d", + db.getVersion(), BuildConfig.databaseVersion)); + canHandle = false; + } c.close(); db.close(); - return result; + return canHandle; } @Override diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/InvalidDatabaseVersionException.java b/app/src/main/java/org/isoron/uhabits/models/sqlite/InvalidDatabaseVersionException.java new file mode 100644 index 000000000..6fb417cc4 --- /dev/null +++ b/app/src/main/java/org/isoron/uhabits/models/sqlite/InvalidDatabaseVersionException.java @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2016 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.models.sqlite; + +public class InvalidDatabaseVersionException extends RuntimeException +{ +} diff --git a/app/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java b/app/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java index 5e6d9e97a..4db87a8db 100644 --- a/app/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java +++ b/app/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java @@ -25,6 +25,7 @@ import android.support.annotation.*; import com.activeandroid.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.models.sqlite.*; import org.isoron.uhabits.models.sqlite.records.*; import java.io.*; @@ -76,7 +77,16 @@ public abstract class DatabaseUtils RepetitionRecord.class, ScoreRecord.class, StreakRecord.class) .create(); - ActiveAndroid.initialize(dbConfig); + try + { + ActiveAndroid.initialize(dbConfig); + } + catch (RuntimeException e) + { + if(e.getMessage().contains("downgrade")) + throw new InvalidDatabaseVersionException(); + else throw e; + } } @SuppressWarnings("ResultOfMethodCallIgnored") From 57296745b3a524e93336d1d6c8a3a635a32f0f5e Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Wed, 19 Apr 2017 14:33:59 -0400 Subject: [PATCH 08/10] Improve performance of CheckmarkButtonView --- app/build.gradle | 2 +- .../list/views/CheckmarkButtonViewTest.java | 4 +- .../list/views/CheckmarkButtonView.java | 112 ++++++++++++------ .../habits/list/views/HabitCardView.java | 1 + .../uhabits/utils/AttributeSetUtils.java | 10 ++ 5 files changed, 87 insertions(+), 42 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 93d60fe16..8c816c10e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,7 +25,7 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } debug { - testCoverageEnabled = true + testCoverageEnabled = false } } diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.java b/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.java index b8bbc0bac..53c5fbeeb 100644 --- a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.java +++ b/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.java @@ -46,12 +46,12 @@ public class CheckmarkButtonViewTest extends BaseViewTest public void setUp() { super.setUp(); - setSimilarityCutoff(0.03f); + setSimilarityCutoff(0.015f); latch = new CountDownLatch(1); view = new CheckmarkButtonView(targetContext); view.setValue(Checkmark.UNCHECKED); - view.setColor(ColorUtils.getAndroidTestColor(7)); + view.setColor(ColorUtils.getAndroidTestColor(5)); measureView(view, dpToPixels(40), dpToPixels(40)); } diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.java index 97d0c9fca..818ccb615 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.java @@ -20,21 +20,34 @@ package org.isoron.uhabits.activities.habits.list.views; import android.content.*; +import android.content.res.*; +import android.graphics.*; +import android.support.annotation.*; +import android.text.*; +import android.util.*; import android.view.*; -import android.widget.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.controllers.*; -import org.isoron.uhabits.models.*; import org.isoron.uhabits.utils.*; -public class CheckmarkButtonView extends TextView +import static android.view.View.MeasureSpec.*; +import static org.isoron.uhabits.models.Checkmark.*; +import static org.isoron.uhabits.utils.AttributeSetUtils.*; + +public class CheckmarkButtonView extends View { private int color; private int value; - private StyledResources res; + private StyledResources styledRes; + + private TextPaint paint; + + private int lowContrastColor; + + private RectF rect; public CheckmarkButtonView(Context context) { @@ -42,6 +55,21 @@ public class CheckmarkButtonView extends TextView init(); } + public CheckmarkButtonView(@Nullable Context ctx, @Nullable AttributeSet attrs) + { + super(ctx, attrs); + init(); + + if(ctx == null) throw new IllegalStateException(); + if(attrs == null) throw new IllegalStateException(); + + int paletteColor = getIntAttribute(ctx, attrs, "color", 0); + setColor(ColorUtils.getAndroidTestColor(paletteColor)); + + int value = getIntAttribute(ctx, attrs, "value", 0); + setValue(value); + } + public void setColor(int color) { this.color = color; @@ -57,54 +85,60 @@ public class CheckmarkButtonView extends TextView public void setValue(int value) { this.value = value; - updateText(); + postInvalidate(); } public void toggle() { - value = (value == Checkmark.CHECKED_EXPLICITLY ? Checkmark.UNCHECKED : - Checkmark.CHECKED_EXPLICITLY); - + value = (value == CHECKED_EXPLICITLY ? UNCHECKED : CHECKED_EXPLICITLY); performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); - updateText(); + postInvalidate(); } - private void init() + @Override + protected void onDraw(Canvas canvas) { - res = new StyledResources(getContext()); + super.onDraw(canvas); + Resources resources = getResources(); + + paint.setColor(value == CHECKED_EXPLICITLY ? color : lowContrastColor); + int id = (value == UNCHECKED ? R.string.fa_times : R.string.fa_check); + String label = resources.getString(id); + float em = paint.measureText("m"); - setWillNotDraw(false); + rect.set(0, 0, getWidth(), getHeight()); + rect.offset(0, 0.4f * em); + canvas.drawText(label, rect.centerX(), rect.centerY(), paint); + } - setMinHeight( - getResources().getDimensionPixelSize(R.dimen.checkmarkHeight)); - setMinWidth( - getResources().getDimensionPixelSize(R.dimen.checkmarkWidth)); + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) + { + Resources res = getResources(); + int height = res.getDimensionPixelSize(R.dimen.checkmarkHeight); + int width = res.getDimensionPixelSize(R.dimen.checkmarkWidth); - setFocusable(false); - setGravity(Gravity.CENTER); - setTypeface(InterfaceUtils.getFontAwesome(getContext())); + widthMeasureSpec = makeMeasureSpec(width, EXACTLY); + heightMeasureSpec = makeMeasureSpec(height, EXACTLY); + + super.onMeasure(widthMeasureSpec, heightMeasureSpec); } - private void updateText() + private void init() { - int lowContrastColor = res.getColor(R.attr.lowContrastTextColor); - - if (value == Checkmark.CHECKED_EXPLICITLY) - { - setText(R.string.fa_check); - setTextColor(color); - } - - if (value == Checkmark.CHECKED_IMPLICITLY) - { - setText(R.string.fa_check); - setTextColor(lowContrastColor); - } - - if (value == Checkmark.UNCHECKED) - { - setText(R.string.fa_times); - setTextColor(lowContrastColor); - } + setFocusable(false); + + Resources res = getResources(); + styledRes = new StyledResources(getContext()); + + paint = new TextPaint(); + paint.setTypeface(InterfaceUtils.getFontAwesome(getContext())); + paint.setAntiAlias(true); + paint.setTextAlign(Paint.Align.CENTER); + paint.setTextSize(res.getDimension(R.dimen.regularTextSize)); + + rect = new RectF(); + color = ColorUtils.getAndroidTestColor(0); + lowContrastColor = styledRes.getColor(R.attr.lowContrastTextColor); } } diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java index d57e0a71c..8aeba9685 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java @@ -214,6 +214,7 @@ public class HabitCardView extends FrameLayout scoreRing.setPercentage(rand.nextFloat()); checkmarkPanel.setColor(color); checkmarkPanel.setCheckmarkValues(values); + checkmarkPanel.setButtonCount(5); } private void refresh() diff --git a/app/src/main/java/org/isoron/uhabits/utils/AttributeSetUtils.java b/app/src/main/java/org/isoron/uhabits/utils/AttributeSetUtils.java index c633a9b72..67c9de531 100644 --- a/app/src/main/java/org/isoron/uhabits/utils/AttributeSetUtils.java +++ b/app/src/main/java/org/isoron/uhabits/utils/AttributeSetUtils.java @@ -74,4 +74,14 @@ public class AttributeSetUtils if (number != null) return Float.parseFloat(number); else return defaultValue; } + + public static int getIntAttribute(@NonNull Context context, + @NonNull AttributeSet attrs, + @NonNull String name, + int defaultValue) + { + String number = getAttribute(context, attrs, name, null); + if (number != null) return Integer.parseInt(number); + else return defaultValue; + } } From 471c5d341faa5a0516a92f3cf3c8ebd1b7780848 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 21 May 2017 10:03:13 -0400 Subject: [PATCH 09/10] Update translations --- app/src/main/res/layout/about.xml | 5 + app/src/main/res/values-bg/strings.xml | 25 +++- app/src/main/res/values-cs/strings.xml | 12 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 52 ++++++--- app/src/main/res/values-eu/strings.xml | 44 +++++++ app/src/main/res/values-fr/strings.xml | 56 ++++++--- app/src/main/res/values-hr/strings.xml | 10 +- app/src/main/res/values-hu/strings.xml | 5 +- app/src/main/res/values-iw/strings.xml | 154 +++++++++++++++++++++++++ app/src/main/res/values-nl/strings.xml | 27 +++++ 11 files changed, 346 insertions(+), 46 deletions(-) diff --git a/app/src/main/res/layout/about.xml b/app/src/main/res/layout/about.xml index 2869631df..2f7ca5cb0 100644 --- a/app/src/main/res/layout/about.xml +++ b/app/src/main/res/layout/about.xml @@ -321,6 +321,11 @@ + + + diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index eb6df7df4..fc043bc6a 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -57,7 +57,7 @@ Позволено е до едно повторение на ден. Създаване на навик Редактиране на навик - Потвърди + Поставяне на отметка По-късно Добре дошли @@ -74,6 +74,7 @@ 2 часа 4 часа 8 часа + 24 часа Маркиране с кратко натискане Поставяне на отметки с кратко натискане вместо с натискане и задържане. По-удобно, но може да доведе до неволно маркиране. Интервал на напомняне след отлагане @@ -91,6 +92,7 @@ Може да виждате повече дни като обърнете телефона си в хоризонтално положение. Изтриване на навици Навиците ще се изтрият перманентно. Това действие не може да бъде отменено. + Навикът е изтрит / не е намерен Събота и неделя От понеделник до петък Всеки ден от седмицата @@ -100,7 +102,7 @@ Изчистване Избиране на час Избиране на минута - Информация + За приложението Преводачи Разработчици Версия %s @@ -146,6 +148,7 @@ Месец Тримесечие Година + Общо път в период от На всеки %d дни @@ -154,4 +157,22 @@ Сила Звук за напомняне Няма + Филтър + Скриване на завършените + Скриване на архивираните + Направи нотификациите постоянни + Предотвратява изчистването на нотификацията с плъзване настрани. + Поправка на базата данни + Базата данни е поправена. + Премахване на отметка + Смяна + Действие + Навик + Сортиране + Ръчно + По име + По цвят + По сила + Изтегляне + Експортиране diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 22eea828f..14b5a64ff 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -19,7 +19,7 @@ ~ with this program. If not, see . --> - Sledování zvyků + Loop Habit Tracker Zvyky Nastavení Upravit @@ -45,11 +45,11 @@ Opakovat krát za dní - Připomenout + Připomenutí Zrušit Uložit Serie - Nemáš žádné aktivní zvyky + Nemáte žádné nedokončené zvyky Stiskni a drž pro označení Vyp. Jméno musíte vyplnit. @@ -91,13 +91,13 @@ Přeřazení záznamů proveď stisknutím a podržením názvu zvyku a poté přesunutím na správné místo. Můžeš vidět více dnů otočením telefonu na šířku. Smazat zvyky - Zvyky budou navždy odstraněny. Toto nelze vzít zpět. + Označené zvyky budou navždy odstraněny. Toto nelze vzít zpět. Zvyk smazán / nenalezen Víkendy Pondělí až pátek Jakýkoliv den v týdnu Vyber dny - Exportuj CSV + Exportovat CSV Hotovo Smazat Vyber hodiny @@ -169,7 +169,7 @@ Akce Zvyk Řadit - Manuálně + Ručně Abecedně Podle barvy Podle skóre diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 98ed18401..61d6bada5 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -19,7 +19,7 @@ ~ with this program. If not, see . --> - Loop Habit Tracker + Loop \"Gewohnheiten Tracking\" Gewohnheiten Einstellungen Bearbeiten diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 8907c7b19..2131e3d22 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -34,14 +34,14 @@ Nada que deshacer. Nada que rehacer. Hábito cambiado. - Hábito cambiado devuelta. + Hábito cambiado nuevamente. Hábitos archivados. Hábitos desarchivados. - Visión general + Resumen Fuerza del hábito Historial - Borrar - Pregunta (Has ... hoy?) + Eliminar + Pregunta (Has ___ hoy?) Repetir veces cada días @@ -52,8 +52,8 @@ No tienes hábitos activos Mantener apretado para marcar o desmarcar Apagado - Nombre no puede estar en blanco. - Número debe ser positivo. + El nombre no puede quedar en blanco. + El número debe ser positivo. Puedes tener como máximo una repetición por día Crear hábito Editar hábito @@ -63,24 +63,25 @@ Bienvenido Loop Analizador de Hábitos te ayuda a crear y mantener buenos hábitos. Crea algunos hábitos nuevos - Cada día, después de realizar tu hábito, pon una marca en la app. + Cada día, después de realizar tu hábito, pon una marca en la aplicación. Sigue haciéndolo. Los hábitos realizados consistentemente por un largo tiempo ganarán una estrella completa. Haz un seguimiento de tu progreso - Detallados gráficos muestran como han mejorado tus hábitos con el tiempo. + Gráficos detallados muestran cómo mejoraron sus hábitos con el tiempo. 15 minutos 30 minutos 1 hora 2 horas 4 horas 8 horas - Marca las repeticiones con una corta pulsación. + 24 horas + Marca las repeticiones con una pulsación corta. Más cómodo, pero puede causar marcas accidentales. Tiempo de espera al aplazar recordatorios. - Valora esta app en Google Play + Valora esta aplicación en Google Play Enviar sugerencias al desarrollador Ver código fuente en GitHub - Ver la introducción de la app + Ver la introducción de la aplicación Enlaces Comportamiento Nombre @@ -91,6 +92,7 @@ Puedes ver más días al poner tu teléfono en modo horizontal. Eliminar Hábitos Los hábitos serán eliminados permanentemente. Esta acción no se puede deshacer. + Hábito eliminado / no encontrado Fines de semana Días laborables Cada día @@ -105,6 +107,7 @@ Desarrolladores Versión %s Frecuencia + Marca de verificación Fuerza Mejores rachas Racha actual @@ -120,8 +123,8 @@ 5 veces por semana Personalizado... Ayuda & FAQ - Fallo al exportar datos. - Fallo al importar datos. + Error al exportar datos. + Error al importar datos. Archivo no reconocido. Hábitos importados exitosamente. Copia de seguridad exportada exitosamente. @@ -130,8 +133,8 @@ Soporta exportar copias de seguridad completas, así como archivos generados por Tickmate, HabitBull o Rewire. Mira el FAQ para más información. Genera archivos que pueden ser abiertos por programas de hojas de cálculo como Microsoft Excel o OpenOffice Calc. Este archivo no puede volver a importarse. Genera un archivo que contiene todos tus datos. Este archivo puede volver a importarse. - Fallo al generar el informe del bug. - Generar informe de bug + Error al generar el reporte de error. + Generar reporte de errores Solución de problemas Ayuda a traducir esta app Modo nocturno @@ -145,6 +148,7 @@ Mes Cuatrimestre Año + Total veces en Cada %d días @@ -153,4 +157,22 @@ Puntuación Sonido de recordatorio Ninguno + Filtrar + Ocultar completos + Ocultar archivados + Hacer notificaciones fijas + Evita que las notificaciones sean descartadas. + Reparar base de datos + Base de datos reparada. + Desmarcar + Alternar + Acción + Hábito + Ordenar + Manualmente + Por nombre + Por color + Por puntuación + Descargar + Exportar diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 40d7cd827..d95d59bfe 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -37,6 +37,7 @@ Ohiturak artxibatu dira. Ohiturak ezartxibatu dira. Ikuspegi orokorra + Ohituraren indarra Historia Garbitu Galdera (... al duzu gaur?) @@ -46,6 +47,7 @@ Oroigarria Baztertu Gorde + Boladak Ez duzu ohitura aktiborik Sakatu eta mantendu markatu edo desmarkatzeko Itzalita @@ -54,12 +56,15 @@ Gehienez errepikapen bat eguneko izan dezakezu Ohitura sortu Ohitura editatu + Markatu Beranduago Ongi etorri + Loop Habit Trackerek ohitura onak hartzen eta mantentzen laguntzen dizu. Sor itzazu ohitura berri batzuk Egunero, zure ohitura egin ostean, jarri ezazu egiaztatze marka bat aplikazioan. Jarrai ezazu ohitura egiten + Denbora luzean zehar trinkotasunez egindako ohiturek izar oso bat irabaziko dute. Jarrai ezazu zure aurrerapena Grafiko zehatzen bitartez denboran zehar zure ohiturak nola hobetu diren ikus ditzakezu 15 minutu @@ -68,6 +73,10 @@ 2 ordu 4 ordu 8 ordu + 24 ordu + Ukitze laburrarekin markatu + Ukitze bakar batekin marka jartzen du ukitu eta mantendu egin beharrean. Erosoagoa, baina nahi gabeko markak ekar litzake. + Atzeratze tartea gogorarazpenetan Aplikazio hau Google Playen puntuatu Zure iritzia garatzaileari bidali Iturburu kodea GitHuben ikusi @@ -76,11 +85,13 @@ Portaera Izena Ezarpenak + Atzeratze tartea Ba al zenekien? Sarrerak berrantolatzeko, sakatu eta mantendu ohituraren izena, ondoren mugi ezazu leku aproposera. Egun gehiago ikus ditzakezu zure gailua paisai moduan jarriz. Ohiturak ezabatu Ohiturak betirako ezabatuko dira. Ekintza hau ezin da desegin. + Ohitura ezabatua / ez aurkitua Asteburuak Astelehenetik ostiralera Astearen edozen egun @@ -96,6 +107,9 @@ %s bertsioa Maiztasuna Egiaztatze marka + Indarra + Bolada onenak + Uneko bolada Errepikapenen kopurua Azken %d egunak Azken %d asteak @@ -115,18 +129,48 @@ Babes kopia osoa ondo esportatu da. Datuak inportatu Babes kopia osoa esportatu + Aplikazio honek esportatutako babes kopia osoak onartzen dira, baita Tickmate, HabitBull edo Rewirek sortutako fitxategiak ere. Ikusi ohito galderak informazio gehiago lortzeko. + Microsoft Excel edo OpenOffice Calc bezalako kalkulu orrietarako softwareak ireki dezaketen fitxategiak sortzen ditu. Fitxategi hau ezin da berriz inportatu. + Zure datu guztiak dituen fitxategi bat sortzen du. Fitxategi hau ezin da berriz inportatu. Huts akats txostena sortzerakoan. Akats txostena sortu + Arazoen konponketa Lagundu aplikazio hau itzultzen Gau modua Benetazko beltza erabili gau moduan + Atzeko plano grisak beltz hutsez aldatzen ditu gau moduan. Bateriaren erabilera gutxitzen du AMOLED duten gailuetan. Interfazea + Egunak atzekoz aurrera ordenatu + Pantaila nagusian egunak atzekoz aurrera ikusi Eguna Astea Hilabetea Hiruhilekoa Urtea + Guztira + %d egunero + %d astero + %d hilabetero + Puntuak Oroigarriaren soinua Bat ere ez + Iragazkia + Lortutakoak ezkutatu + Artxibatutakoak ezkutatu + Jakinarazpenak itsaskorrak bihurtu + Jakinarazpenak keinu batez ezabatzea sahiesten du. + Datu basea konpondu + Datu basea konpondu da. + Desmarkatu + Aldatu + Ekintza + Ohitura + Ordenatu + Eskuz + Izenaren arabera + Kolorearen arabera + Puntuen arabera + Deskargatu + Esportatu diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index b54644a76..3892fc1ee 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -28,20 +28,20 @@ Désarchiver Ajouter une habitude Changer la couleur - Habitude créée. - Habitude supprimée. - Habitude rétablie. - Rien à annuler. - Rien à refaire. - Habitude changée. - Habitude restaurée. - Habitudes archivées. - Habitudes désarchivées. + Habitude créée + Habitude supprimée + Habitude rétablie + Rien à annuler + Rien à refaire + Habitude changée + Habitude restaurée + Habitudes archivées + Habitudes désarchivées Vue d\'ensemble Force de l\'habitude Historique Supprimer - Question (As-tu ... aujourd\'hui?) + Question (As-tu ... aujourd\'hui ?) Répéter fois en jours @@ -51,6 +51,7 @@ Séries Vous n\'avez pas d\'habitudes actives Appuyez longtemps pour cocher ou décocher + Aucun Le nom ne peut être vide. Le nombre doit être positif. Vous pouvez avoir au plus une répétition par jour @@ -67,27 +68,31 @@ Les habitudes régulières pendant une période de temps étendue gagneront une étoile complète. Suivez votre progrès Des graphiques détaillés vous montrent comment vos habitudes évoluent au fil du temps. + 15 minutes + 30 minutes 1 heure 2 heures 4 heures 8 heures + 24 heures Activer les répétitions avec un appui court - Plus pratique, mais peut causer des activations accidentelles. + Pointe l\'habitude avec un appui court plutôt qu\'un appuie long. Plus pratique, mais peut causer des activations accidentelles. Intervalle de report des rappels Notez cette app sur le Google Play Store Envoyez un avis au développeur Voir le code source sur GitHub - Voir l\'intro de l\'app + Voir l\'introduction de l\'app Liens Comportement Nom Paramètres Intervalle de report Le saviez-vous ? - Pour réarranger les habitudes, faites un appui long sur le nom de l\'habitude et placez la à la bonne place. + Pour réordonner les habitudes, faites un appui long sur le nom de l\'habitude et placez-la à la bonne place. Vous pouvez voir plus de jours en mettant votre téléphone en mode paysage. Supprimer des habitudes Les habitudes seront supprimées définitivement. Cette action ne peut être annulée. + Habitude supprimée / introuvable Fin de semaine Jours de la semaine N\'importe quel jour @@ -100,6 +105,7 @@ À propos Traducteurs Développeurs + Version %s Fréquence Croix Force @@ -132,8 +138,9 @@ Résolution de problèmes Aider à traduire cette application Mode Nuit - Utiliser un noir pure dans le mode nuit. - Remplacer le fond gris par un noir pure dans le mode nuit; ça réduit l’usage de la batterie d\'un appareil ayant un écran AMOLED. + Utiliser un noir pur dans le mode nuit + Remplacer le fond gris par un noir pur dans le mode nuit ; ça réduit l’usage de la batterie des appareils ayant un écran AMOLED. + Interface Inverser l\'ordre des jours Montrer les jours dans l\'ordre inversé sur l\'écran principal Jour @@ -141,6 +148,7 @@ Mois Trimestre Année + Total fois tous les Tous les %d jours @@ -149,4 +157,22 @@ Pointage Son de rappel Aucun + Filtre + Cacher les habitudes complétées + Cacher les habitudes archivées + Rendre les notifications persistantes + Évite que les notifications ne soient enlevées. + Réparer le base de données + Base de données réparée. + Décocher + Basculer + Action + Habitude + Trier + Manuellement + Par nom + Par couleur + Par score + Télécharger + Exporter diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index ea52a55ca..aed537cbb 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -78,9 +78,9 @@ Označi ponavljanja sa kratkim pritisk. Zgodnije je, no može uzrokovati slučajna označavanja. Interval odgađanja na podsjetnicima - Ocijenite ovu aplikaciju na Google Playu - Pošaljite povratne informacije raz. programeru - Pogledajte izvorni kod na GitHubu + Ocijeni ovu aplikaciju na Google Playu + Pošalji povratne informacije raz. programeru + Pogledaj izvorni kod na GitHubu Prikaži uvod u aplikaciju Poveznice Ponašanje @@ -136,13 +136,13 @@ Generiranje izvješća o pogrešci nije uspjelo. Generiraj izvješće o pogreški Rješavanje problema - Pomozite prevesti ovu aplikaciju + Pomozi prevesti ovu aplikaciju Noćni način Koristi crnu boju za noćni način Zamjenjuje sivu pozadinu sa crnom u noćnom načinu. To smanjuje potrošnju bateriju na uređajima s AMOLED zaslonima. Sučelje Obrnuti poredak dana - Prikaži dane obrnutim redom na glavnom zaslonu + Prikažite dane obrnutim redom na glavnom zaslonu Dan Tjedan Mjesec diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index f2e8c7bd9..2526f3607 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -19,7 +19,8 @@ ~ with this program. If not, see . --> - Habits + Loop Szokásrögzítő + Szokások Beállítások Szerkesztés Törlés @@ -31,7 +32,7 @@ Szokás törölve Szokás visszaállítva Nincs mit visszavonni - \"Mégis\" nem lehetséges + Nincs mit újraalkalmazni Szokás módosítva Szokás visszaállítva Szokás archiválva diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index d994b3aca..786dca1c5 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -19,6 +19,160 @@ ~ with this program. If not, see . --> + Loop Habit Tracker + הרגלים + הגדרות + עריכה + מחיקה + ארכיון + הוצא מארכיון + הרגל חדש + שינוי צבע + הרגל נוצר + הרגלים נמחקו + הרגלים שוחזרו + אין מה לבטל + אין מה לבצע שוב + הרגל השתנה + הרגל השתנה בחזרה + הרגלים הועברו לארכיון + הרגלים הוצאו מארכיון + מבט על + חוזק ההרגל + היסטוריה + נקה + שאלה (האם ... היום?) + חזור + פעמים ב- + ימים + תזכורת + ביטול + שמירה + רצפים + אין לך הרגלים פעילים + לחץ והחזק לסימון או ביטול הסימון + כבוי + השם אינו יכול להישאר ריק. + מספר חייב להיות חיובי. + לא ניתן להגדיר יותר מחזרה אחת ביום + צור הרגל + ערוך הרגל + בוצע + מאוחר יותר + ברוכים הבאים + Loop Habit Tracker מסייע ליצור ולשמר הרגלים טובים. + צרו הרגלים חדשים + כל יום, אחרי ביצוע ההרגל סמנו זאת באפליקציה. + המשיכו לעשות זאת + הרגלים שיבוצעו בעקביות לאורך זמן רב יזכו בכוכב מלא. + מעקב התקדמות + גרפים מפורטים מציגים כיצד ההרגלים שלך משתפרים לאורך זמן. + 15 דקות + 30 דקות + 1 שעה + 2 שעות + 4 שעות + 8 שעות + 24 שעות + החלפה להפעלה עם לחיצה קצרה + סמנו יעדים בהקשה קצרה במקום לחיצה ממושכת. נוח יותר, אך יכול להוביל ללחיצות לא מכוונות. + מרווח נדנוד לתזכורות + דרג/י אותנו ב- Google Play + שליחת משוב למפתחים + צפייה בקוד המקור ב-GitHub + צפייה בפרטים אודות האפליקציה + קישורים + התנהגות + שם + הגדרות + זמן בין נדנודים + הידעת? + לשינוי סדר הההרגלים, לחצו לחיצה ארוכה על ההרגל וגררו אותו למקום הרצוי. + ניתן לראות ימים נוספים ע\"י סיבוב המסך לתצוגה רוחבית. + מחיקת הרגלים + ההרגלים יימחקו לצמיתות. פעולה זו אינה ניתנת לביטול. + הרגל נמחק / לא נמצא + סופי שבוע + ימי חול + כל יום בשבוע + בחירת ימים + ייצוא כקובץ CSV + בוצע + נקה + בחר שעות + בחר דקות + אודות + מתרגמים + מפתחים + גרסה %s + תדירות + סימן + חוזק + רצף שיא + רצף נוכחי + מספר חזרות + %d הימים האחרונים + %d השבועות האחרונים + %d החודשים האחרונים + %d השנים האחרונות + בכל הזמנים + כל יום + כל שבוע + פעמיים בשבוע + 5 פעמים בשבוע + מותאם אישית… + עזרה ושאלות נפוצות + ייצוא נתונים נכשל. + ייבוא נתונים נכשל. + קובץ לא מזוהה. + הרגלים יובאו בהצלחה. + גיבוי מלא יוצאה בהצלחה. + ייבוא נתונים + ייצוא גיבוי מלא + תומך בכל הגיבויים שיוצאו ע\"י האפליקציה. כמו גם קבצים שנוצרו ע\"י Tickmate, HabitBull או Rewire. לפרטים נוספים ראו שאלות נפוצות. + יוצר קבצים שניתן לפתוח על-ידי תוכנות גיליון אלקטרוני כגון Microsoft Excel או OpenOffice. אין אפשרות לייבא את הקובץ בחזרה. + יוצר קובץ המכיל את כל הנתונים שלך. קובץ זה ניתן לייבא בחזרה. + הפקת דוח שגיאות נכשלה. + הפקת דוח שגיאות + פתרון תקלות + עזרו לנו לתרגם את האפליקציה + מצב לילה + רקע שחור למצב לילה + החלפת הרקע האפור במצב לילה לשחור מוחלט. מפחית בזבוז סוללה במכשירים עם תצוגת AMOLED. + ממשק + הפיכת סדר הימים + מציג ימים בסדר הפוך במסך הראשי + יום + שבוע + חודש + רבעון + שנה + סה\"כ + פעמים ב- + כל %d ימים + כל %d שבועות + כל %d חודשים + ציון + צליל תזכורת + ללא + סינון + הסתר יעדים שהושלמו + הסתר ארכיון + צור תזכורות \"דביקות\" + מונע החלקת וביטול תזכורות. + תיקון מסד נתונים + מאגר נתונים תוקן. + ביטול סימון + הפעלה \ כיבוי + פעולה + הרגל + מיון + באופן ידני + לפי שם + לפי צבע + לפי ציון + הורדה + ייצוא diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index d92eb2c6e..e268a137e 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -19,6 +19,7 @@ ~ with this program. If not, see . --> + Loop Gewoonte tracker Gewoontes Instellingen Wijzig @@ -58,6 +59,7 @@ Maak gewoonte aan Wijzig gewoonte Voltooid + Later Welkom Loop Habit Tracker helpt je om goede gewoontes te creëren en te onderhouden. @@ -73,6 +75,7 @@ 2 uur 4 uur 8 uur + 24 uur Wijzig herhalingen door kort indrukken Handiger, maar kan onbedoelde wijzigingen veroorzaken. Snooze interval voor herinneringen @@ -80,14 +83,17 @@ Stuur feedback aan de ontwikkelaar Bekijk de broncode op GitHub Bekijk de app introductie + Links Gedrag Naam Instellingen + Later interval Wist je dat? Om de rijen te ordenen houdt de gewoonte ingedrukt en sleep het naar de gewenste plek. Je kunt meer dagen zien door de telefoon in landschapmodus te zetten. Verwijder gewoontes De gewoontes zullen permanent verwijderd worden. Deze actie kan niet ongedaan gemaakt worden. + Gewoonte verwijderd / niet gevonden In het weekend Maandag tot vrijdag Elke dag van de week @@ -139,14 +145,35 @@ Omgekeerde volgorde van dagen Toon dagen in omgekeerde volgorde op het hoofdscherm Dag + Week Maand Kwartaal Jaar + Totaal keer per Iedere %d dagen Iedere %d weken Iedere %d maanden + Score Herinneringsgeluid Stil + Filteren + Verberg voltooide + Verberg gearchiveerde + Maak meldingen persistent + Voorkom dat meldingen weggehaald kunnen worden. + Database repareren + Database gerepareerd. + Deselecteren + Omkeren + Actie + Gewoonte + Sorteren + Handmatig + Bij naam + Bij kleur + Bij score + Downloaden + Exporteren From 8b835b991895b76c6c571c9ec3ad986c26f03f40 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 21 May 2017 10:10:30 -0400 Subject: [PATCH 10/10] Update CHANGELOG --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a88e2a3d1..2707976c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +### 1.7.1 (May 21, 2017) + +* Fix crash (BadParcelableException) +* Fix layout for RTL languages such as Arabic +* Automatically detect and reject invalid database files +* Add Hebrew translation + ### 1.7.0 (Mar 31, 2017) * Sort habits automatically