From 96f620455f3cbb51ef55562431677f7e6da2e11e Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Thu, 25 May 2017 00:02:02 -0400 Subject: [PATCH 01/27] Update toolchain --- app/build.gradle | 101 ++++++++++++----------- build.gradle | 6 +- build.sh | 6 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 4 files changed, 59 insertions(+), 58 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 41f43d75c..199ab238e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,4 @@ apply plugin: 'com.android.application' -apply plugin: 'com.neenbedankt.android-apt' -apply plugin: 'me.tatarka.retrolambda' apply plugin: 'jacoco' android { @@ -55,59 +53,62 @@ android { dependencies { - androidTestApt 'com.google.dagger:dagger-compiler:2.11-rc2' - - androidTestCompile 'com.android.support:support-annotations:25.3.1' - androidTestCompile 'com.android.support.test:rules:0.5' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.google.auto.factory:auto-factory:1.0-beta3' - androidTestCompile "com.google.dexmaker:dexmaker:1.2" - androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2' - androidTestCompile 'org.mockito:mockito-core:1.10.19' - androidTestCompile 'com.google.guava:guava:20.0' - - apt 'com.google.dagger:dagger-compiler:2.11-rc2' - apt 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' - - compile 'com.android.support:appcompat-v7:25.3.1' - compile 'com.android.support:design:25.3.1' - compile 'com.android.support:preference-v14:25.3.1' - compile 'com.android.support:support-v4:25.3.1' - compile 'com.getpebble:pebblekit:3.0.0' - compile 'com.github.paolorotolo:appintro:3.4.0' - compile 'com.google.auto.factory:auto-factory:1.0-beta3' - compile 'com.google.dagger:dagger:2.11-rc2' - compile 'com.jakewharton:butterknife:8.6.1-SNAPSHOT' - compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' - compile 'com.opencsv:opencsv:3.9' - compile 'org.apmem.tools:layouts:1.10' - compile 'org.jetbrains:annotations-java5:15.0' - compile 'com.google.code.gson:gson:2.7' - compile 'com.google.code.findbugs:jsr305:3.0.2' - compile 'com.google.guava:guava:20.0' - - provided 'javax.annotation:jsr250-api:1.0' - - compile ('io.socket:socket.io-client:+') { - exclude group: 'org.json', module: 'json' + implementation 'com.android.support:appcompat-v7:25.3.1' + implementation 'com.android.support:design:25.3.1' + implementation 'com.android.support:preference-v14:25.3.1' + implementation 'com.android.support:support-v4:25.3.1' + implementation 'com.getpebble:pebblekit:3.0.0' + implementation 'com.github.paolorotolo:appintro:3.4.0' + implementation 'com.google.auto.factory:auto-factory:1.0-beta3' + implementation 'com.google.dagger:dagger:2.11-rc2' + implementation 'com.jakewharton:butterknife:8.6.1-SNAPSHOT' + implementation 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' + implementation 'org.apmem.tools:layouts:1.10' + implementation 'org.jetbrains:annotations-java5:15.0' + implementation 'com.google.code.gson:gson:2.7' + implementation 'com.google.code.findbugs:jsr305:3.0.2' + implementation 'com.google.guava:guava:20.0' + + testImplementation 'junit:junit:5.0-SNAPSHOT' + testImplementation 'org.hamcrest:hamcrest-library:1.4-atlassian-1' + testImplementation 'org.mockito:mockito-core:2.8.9' + testImplementation 'org.json:json:20160810' + testImplementation 'org.robolectric:robolectric:3.4-rc2' + + androidTestImplementation 'com.android.support:support-annotations:25.3.1' + androidTestImplementation 'com.android.support.test:rules:0.5' + androidTestImplementation 'com.android.support.test:runner:0.5' + androidTestImplementation 'com.google.auto.factory:auto-factory:1.0-beta3' + androidTestImplementation "com.google.dexmaker:dexmaker:1.2" + androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2' + androidTestImplementation 'org.mockito:mockito-core:1.10.19' + androidTestImplementation 'com.google.guava:guava:20.0' + + compileOnly 'javax.annotation:jsr250-api:1.0' + + annotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' + annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' + annotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' + + testAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' + testAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' + testAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' + + androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' + androidTestAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' + androidTestAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' + + implementation ('com.opencsv:opencsv:3.9') { + exclude group: 'commons-logging', module: 'commons-logging' } - testApt 'com.google.dagger:dagger-compiler:2.11-rc2' - testApt 'com.google.guava:guava:20.0' - - testCompile 'junit:junit:5.0-SNAPSHOT' - testCompile 'org.hamcrest:hamcrest-library:1.4-atlassian-1' - testCompile 'org.mockito:mockito-core:2.8.9' - testCompile 'org.json:json:20160810' - testCompile 'org.robolectric:robolectric:3.4-rc2' -} - -retrolambda { - defaultMethods true + implementation ('io.socket:socket.io-client:+') { + exclude group: 'org.json', module: 'json' + } } jacoco { - toolVersion = "0.7.6.201602180812" + toolVersion = "0.7.4.201502262128" } task coverageReport(type: JacocoReport, dependsOn: ['testDebugUnitTest']) { diff --git a/build.gradle b/build.gradle index 16e4df7a8..7098313f7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,14 +1,13 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() + maven { url 'https://maven.google.com' } } dependencies { - classpath 'com.android.tools.build:gradle:2.3.2' + classpath 'com.android.tools.build:gradle:3.0.0-alpha1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.6.4' - classpath 'me.tatarka:gradle-retrolambda:3.2.5' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } } @@ -16,6 +15,7 @@ buildscript { allprojects { repositories { jcenter() + maven { url 'https://maven.google.com' } maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } } } diff --git a/build.sh b/build.sh index d14961bfc..dbc78e436 100755 --- a/build.sh +++ b/build.sh @@ -128,14 +128,14 @@ install_apk() { log_info "Installing APK" if [ ! -z $RELEASE ]; then - $ADB install -r ${OUTPUTS_DIR}/apk/app-release.apk || fail + $ADB install -r ${OUTPUTS_DIR}/apk/release/app-release.apk || fail else - $ADB install -r ${OUTPUTS_DIR}/apk/app-debug.apk || fail + $ADB install -r ${OUTPUTS_DIR}/apk/debug/app-debug.apk || fail fi } install_test_apk() { - $ADB install -r ${OUTPUTS_DIR}/apk/app-debug-androidTest.apk || fail + $ADB install -r ${OUTPUTS_DIR}/apk/androidTest/debug/app-debug-androidTest.apk || fail } run_instrumented_tests() { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7dafcc01a..4d42a9f55 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Mar 17 21:42:38 EDT 2017 +#Wed May 24 19:36:48 EDT 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions-snapshots/gradle-4.0-20170417000025+0000-all.zip From c20ca3921f0ae9df9af149407ca13f40ce24fc4b Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Thu, 25 May 2017 07:59:54 -0400 Subject: [PATCH 02/27] Rename android module to uhabits-android --- settings.gradle | 2 +- {app => uhabits-android}/build.gradle | 0 {app => uhabits-android}/lint.xml | 0 {app => uhabits-android}/proguard-rules.txt | 0 .../src/androidTest/assets/habitbull.csv | 0 .../src/androidTest/assets/icon.png | Bin .../src/androidTest/assets/loop.db | Bin .../src/androidTest/assets/pull_failed | 0 .../src/androidTest/assets/rewire.db | Bin .../src/androidTest/assets/tickmate.db | Bin .../assets/views-v19/common/BarChart/render.png | Bin .../views-v19/common/BarChart/renderDataOffset.png | Bin .../common/BarChart/renderDifferentSize.png | Bin .../views-v19/common/BarChart/renderTransparent.png | Bin .../views-v19/common/FrequencyChart/render.png | Bin .../common/FrequencyChart/renderDataOffset.png | Bin .../common/FrequencyChart/renderDifferentSize.png | Bin .../common/FrequencyChart/renderTransparent.png | Bin .../assets/views-v19/common/HistoryChart/render.png | Bin .../common/HistoryChart/renderDataOffset.png | Bin .../common/HistoryChart/renderDifferentSize.png | Bin .../common/HistoryChart/renderTransparent.png | Bin .../assets/views-v19/common/RingView/render.png | Bin .../common/RingView/renderDifferentParams.png | Bin .../assets/views-v19/common/ScoreChart/render.png | Bin .../common/ScoreChart/renderDataOffset.png | Bin .../common/ScoreChart/renderDifferentSize.png | Bin .../views-v19/common/ScoreChart/renderMonthly.png | Bin .../common/ScoreChart/renderTransparent.png | Bin .../views-v19/common/ScoreChart/renderYearly.png | Bin .../assets/views-v19/common/StreakChart/render.png | Bin .../common/StreakChart/renderSmallSize.png | Bin .../common/StreakChart/renderTransparent.png | Bin .../CheckmarkButtonView/render_explicit_check.png | Bin .../CheckmarkButtonView/render_implicit_check.png | Bin .../list/CheckmarkButtonView/render_unchecked.png | Bin .../habits/list/CheckmarkPanelView/render.png | Bin .../views-v19/habits/list/HabitCardView/render.png | Bin .../habits/list/HabitCardView/render_changed.png | Bin .../habits/list/HabitCardView/render_selected.png | Bin .../views-v19/habits/list/HeaderView/render.png | Bin .../habits/list/HeaderView/render_reverse.png | Bin .../views-v19/habits/list/HintView/render.png | Bin .../habits/list/NumberButtonView/render_above.png | Bin .../habits/list/NumberButtonView/render_below.png | Bin .../habits/list/NumberButtonView/render_zero.png | Bin .../views-v19/habits/show/FrequencyCard/render.png | Bin .../views-v19/habits/show/HistoryCard/render.png | Bin .../views-v19/habits/show/OverviewCard/render.png | Bin .../views-v19/habits/show/ScoreCard/render.png | Bin .../views-v19/habits/show/StreakCard/render.png | Bin .../views-v19/habits/show/SubtitleCard/render.png | Bin .../views-v19/widgets/CheckmarkWidget/render.png | Bin .../widgets/CheckmarkWidgetView/checked.png | Bin .../CheckmarkWidgetView/implicitly_checked.png | Bin .../widgets/CheckmarkWidgetView/large_size.png | Bin .../widgets/CheckmarkWidgetView/unchecked.png | Bin .../views-v19/widgets/FrequencyWidget/render.png | Bin .../views-v19/widgets/HistoryWidget/render.png | Bin .../assets/views-v19/widgets/ScoreWidget/render.png | Bin .../views-v19/widgets/StreakWidget/render.png | Bin .../assets/views-v21/common/BarChart/render.png | Bin .../views-v21/common/BarChart/renderDataOffset.png | Bin .../common/BarChart/renderDifferentSize.png | Bin .../views-v21/common/BarChart/renderTransparent.png | Bin .../views-v21/common/FrequencyChart/render.png | Bin .../common/FrequencyChart/renderDataOffset.png | Bin .../common/FrequencyChart/renderDifferentSize.png | Bin .../common/FrequencyChart/renderTransparent.png | Bin .../assets/views-v21/common/HistoryChart/render.png | Bin .../common/HistoryChart/renderDataOffset.png | Bin .../common/HistoryChart/renderDifferentSize.png | Bin .../common/HistoryChart/renderTransparent.png | Bin .../assets/views-v21/common/RingView/render.png | Bin .../common/RingView/renderDifferentParams.png | Bin .../assets/views-v21/common/ScoreChart/render.png | Bin .../common/ScoreChart/renderDataOffset.png | Bin .../common/ScoreChart/renderDifferentSize.png | Bin .../views-v21/common/ScoreChart/renderMonthly.png | Bin .../common/ScoreChart/renderTransparent.png | Bin .../views-v21/common/ScoreChart/renderYearly.png | Bin .../assets/views-v21/common/StreakChart/render.png | Bin .../common/StreakChart/renderSmallSize.png | Bin .../common/StreakChart/renderTransparent.png | Bin .../CheckmarkButtonView/render_explicit_check.png | Bin .../CheckmarkButtonView/render_implicit_check.png | Bin .../list/CheckmarkButtonView/render_unchecked.png | Bin .../habits/list/CheckmarkPanelView/render.png | Bin .../views-v21/habits/list/HabitCardView/render.png | Bin .../habits/list/HabitCardView/render_changed.png | Bin .../habits/list/HabitCardView/render_selected.png | Bin .../views-v21/habits/list/HeaderView/render.png | Bin .../habits/list/HeaderView/render_reverse.png | Bin .../views-v21/habits/list/HintView/render.png | Bin .../habits/list/NumberButtonView/render_above.png | Bin .../habits/list/NumberButtonView/render_below.png | Bin .../habits/list/NumberButtonView/render_zero.png | Bin .../views-v21/habits/show/FrequencyCard/render.png | Bin .../views-v21/habits/show/HistoryCard/render.png | Bin .../views-v21/habits/show/OverviewCard/render.png | Bin .../views-v21/habits/show/ScoreCard/render.png | Bin .../views-v21/habits/show/StreakCard/render.png | Bin .../views-v21/habits/show/SubtitleCard/render.png | Bin .../views-v21/widgets/CheckmarkWidget/render.png | Bin .../widgets/CheckmarkWidgetView/checked.png | Bin .../CheckmarkWidgetView/implicitly_checked.png | Bin .../widgets/CheckmarkWidgetView/large_size.png | Bin .../widgets/CheckmarkWidgetView/unchecked.png | Bin .../views-v21/widgets/FrequencyWidget/render.png | Bin .../views-v21/widgets/HistoryWidget/render.png | Bin .../assets/views-v21/widgets/ScoreWidget/render.png | Bin .../views-v21/widgets/StreakWidget/render.png | Bin .../org/isoron/uhabits/AndroidTestComponent.java | 0 .../java/org/isoron/uhabits/BaseAndroidTest.java | 0 .../java/org/isoron/uhabits/BaseViewTest.java | 0 .../java/org/isoron/uhabits/HabitFixtures.java | 0 .../java/org/isoron/uhabits/HabitLoggerTest.java | 0 .../org/isoron/uhabits/HabitsApplicationTest.java | 0 .../activities/common/views/BarChartTest.java | 0 .../activities/common/views/FrequencyChartTest.java | 0 .../activities/common/views/HistoryChartTest.java | 0 .../activities/common/views/RingViewTest.java | 0 .../activities/common/views/ScoreChartTest.java | 0 .../activities/common/views/StreakChartTest.java | 0 .../habits/list/views/CheckmarkButtonViewTest.java | 0 .../habits/list/views/CheckmarkPanelViewTest.java | 0 .../habits/list/views/HabitCardViewTest.java | 0 .../habits/list/views/HeaderViewTest.java | 0 .../activities/habits/list/views/HintViewTest.java | 0 .../habits/list/views/NumberButtonViewTest.java | 0 .../habits/show/views/FrequencyCardTest.java | 0 .../habits/show/views/HistoryCardTest.java | 0 .../habits/show/views/OverviewCardTest.java | 0 .../activities/habits/show/views/ScoreCardTest.java | 0 .../habits/show/views/StreakCardTest.java | 0 .../habits/show/views/SubtitleCardTest.java | 0 .../isoron/uhabits/io/HabitsCSVExporterTest.java | 0 .../java/org/isoron/uhabits/io/ImportTest.java | 0 .../org/isoron/uhabits/models/HabitListTest.java | 0 .../uhabits/models/sqlite/HabitRecordTest.java | 0 .../models/sqlite/SQLiteCheckmarkListTest.java | 0 .../uhabits/models/sqlite/SQLiteHabitListTest.java | 0 .../models/sqlite/SQLiteRepetitionListTest.java | 0 .../uhabits/models/sqlite/SQLiteScoreListTest.java | 0 .../uhabits/receivers/PebbleReceiverTest.java | 0 .../org/isoron/uhabits/tasks/ExportCSVTaskTest.java | 0 .../org/isoron/uhabits/tasks/ExportDBTaskTest.java | 0 .../isoron/uhabits/widgets/CheckmarkWidgetTest.java | 0 .../isoron/uhabits/widgets/FrequencyWidgetTest.java | 0 .../isoron/uhabits/widgets/HistoryWidgetTest.java | 0 .../org/isoron/uhabits/widgets/ScoreWidgetTest.java | 0 .../isoron/uhabits/widgets/StreakWidgetTest.java | 0 .../widgets/views/CheckmarkWidgetViewTest.java | 0 .../src/main/AndroidManifest.xml | 0 {app => uhabits-android}/src/main/assets/cacert.pem | 0 .../src/main/assets/fontawesome-webfont.ttf | Bin .../src/main/assets/migrations/10.sql | 0 .../src/main/assets/migrations/11.sql | 0 .../src/main/assets/migrations/12.sql | 0 .../src/main/assets/migrations/13.sql | 0 .../src/main/assets/migrations/14.sql | 0 .../src/main/assets/migrations/15.sql | 0 .../src/main/assets/migrations/16.sql | 0 .../src/main/assets/migrations/17.sql | 0 .../src/main/assets/migrations/18.sql | 0 .../src/main/assets/migrations/5.sql | 0 .../src/main/assets/migrations/6.sql | 0 .../src/main/assets/migrations/7.sql | 0 .../src/main/ic_launcher-web.png | Bin .../src/main/ic_small_widget_preview-web.png | Bin .../com/android/colorpicker/ColorPickerDialog.java | 0 .../com/android/colorpicker/ColorPickerPalette.java | 0 .../com/android/colorpicker/ColorPickerSwatch.java | 0 .../com/android/colorpicker/ColorStateDrawable.java | 0 .../com/android/colorpicker/HsvColorComparator.java | 0 .../datetimepicker/AccessibleLinearLayout.java | 0 .../android/datetimepicker/AccessibleTextView.java | 0 .../datetimepicker/HapticFeedbackController.java | 0 .../main/java/com/android/datetimepicker/Utils.java | 0 .../datetimepicker/date/AccessibleDateAnimator.java | 0 .../datetimepicker/date/DatePickerController.java | 0 .../datetimepicker/date/DatePickerDialog.java | 0 .../android/datetimepicker/date/DayPickerView.java | 0 .../android/datetimepicker/date/MonthAdapter.java | 0 .../com/android/datetimepicker/date/MonthView.java | 0 .../datetimepicker/date/SimpleDayPickerView.java | 0 .../datetimepicker/date/SimpleMonthAdapter.java | 0 .../datetimepicker/date/SimpleMonthView.java | 0 .../date/TextViewWithCircularIndicator.java | 0 .../android/datetimepicker/date/YearPickerView.java | 0 .../datetimepicker/time/AmPmCirclesView.java | 0 .../com/android/datetimepicker/time/CircleView.java | 0 .../datetimepicker/time/RadialPickerLayout.java | 0 .../datetimepicker/time/RadialSelectorView.java | 0 .../datetimepicker/time/RadialTextsView.java | 0 .../datetimepicker/time/TimePickerDialog.java | 0 .../main/java/org/isoron/uhabits/AppComponent.java | 0 .../main/java/org/isoron/uhabits/AppContext.java | 0 .../src/main/java/org/isoron/uhabits/AppModule.java | 0 .../src/main/java/org/isoron/uhabits/AppScope.java | 0 .../main/java/org/isoron/uhabits/HabitLogger.java | 0 .../java/org/isoron/uhabits/HabitsApplication.java | 0 .../java/org/isoron/uhabits/HabitsBackupAgent.java | 0 .../uhabits/activities/ActivityComponent.java | 0 .../isoron/uhabits/activities/ActivityContext.java | 0 .../isoron/uhabits/activities/ActivityModule.java | 0 .../isoron/uhabits/activities/ActivityScope.java | 0 .../org/isoron/uhabits/activities/BaseActivity.java | 0 .../uhabits/activities/BaseExceptionHandler.java | 0 .../org/isoron/uhabits/activities/BaseMenu.java | 0 .../org/isoron/uhabits/activities/BaseRootView.java | 0 .../org/isoron/uhabits/activities/BaseScreen.java | 0 .../uhabits/activities/BaseSelectionMenu.java | 0 .../org/isoron/uhabits/activities/BaseSystem.java | 0 .../isoron/uhabits/activities/ThemeSwitcher.java | 0 .../uhabits/activities/about/AboutActivity.java | 0 .../uhabits/activities/about/AboutRootView.java | 0 .../uhabits/activities/about/package-info.java | 0 .../common/dialogs/ColorPickerDialog.java | 0 .../common/dialogs/ColorPickerDialogFactory.java | 0 .../common/dialogs/ConfirmDeleteDialog.java | 0 .../common/dialogs/HistoryEditorDialog.java | 0 .../common/dialogs/WeekdayPickerDialog.java | 0 .../uhabits/activities/common/views/BarChart.java | 0 .../activities/common/views/BundleSavedState.java | 0 .../activities/common/views/FrequencyChart.java | 0 .../uhabits/activities/common/views/HabitChart.java | 0 .../activities/common/views/HistoryChart.java | 0 .../uhabits/activities/common/views/RingView.java | 0 .../uhabits/activities/common/views/ScoreChart.java | 0 .../activities/common/views/ScrollableChart.java | 0 .../activities/common/views/StreakChart.java | 0 .../activities/common/views/package-info.java | 0 .../activities/habits/edit/EditHabitDialog.java | 0 .../habits/edit/EditHabitDialogFactory.java | 0 .../activities/habits/edit/package-info.java | 0 .../habits/edit/views/ExampleEditText.java | 0 .../habits/edit/views/FrequencyPanel.java | 0 .../habits/edit/views/NameDescriptionPanel.java | 0 .../activities/habits/edit/views/ReminderPanel.java | 0 .../activities/habits/edit/views/TargetPanel.java | 0 .../activities/habits/list/ListHabitsActivity.java | 0 .../activities/habits/list/ListHabitsComponent.java | 0 .../habits/list/ListHabitsController.java | 0 .../activities/habits/list/ListHabitsMenu.java | 0 .../activities/habits/list/ListHabitsRootView.java | 0 .../activities/habits/list/ListHabitsScreen.java | 0 .../habits/list/ListHabitsSelectionMenu.java | 0 .../list/controllers/CheckmarkButtonController.java | 0 .../list/controllers/HabitCardController.java | 0 .../list/controllers/HabitCardListController.java | 0 .../list/controllers/NumberButtonController.java | 0 .../habits/list/controllers/package-info.java | 0 .../habits/list/model/HabitCardListAdapter.java | 0 .../habits/list/model/HabitCardListCache.java | 0 .../habits/list/model/HabitCardViewHolder.java | 0 .../activities/habits/list/model/HintList.java | 0 .../activities/habits/list/model/package-info.java | 0 .../activities/habits/list/package-info.java | 0 .../habits/list/views/CheckmarkButtonView.java | 0 .../habits/list/views/CheckmarkPanelView.java | 0 .../habits/list/views/HabitCardListView.java | 0 .../activities/habits/list/views/HabitCardView.java | 0 .../activities/habits/list/views/HeaderView.java | 0 .../activities/habits/list/views/HintView.java | 0 .../habits/list/views/NumberButtonView.java | 0 .../habits/list/views/NumberPanelView.java | 0 .../activities/habits/show/ShowHabitActivity.java | 0 .../activities/habits/show/ShowHabitComponent.java | 0 .../activities/habits/show/ShowHabitController.java | 0 .../activities/habits/show/ShowHabitModule.java | 0 .../activities/habits/show/ShowHabitRootView.java | 0 .../activities/habits/show/ShowHabitScreen.java | 0 .../activities/habits/show/ShowHabitsMenu.java | 0 .../activities/habits/show/package-info.java | 0 .../activities/habits/show/views/BarCard.java | 0 .../activities/habits/show/views/FrequencyCard.java | 0 .../activities/habits/show/views/HabitCard.java | 0 .../activities/habits/show/views/HistoryCard.java | 0 .../activities/habits/show/views/OverviewCard.java | 0 .../activities/habits/show/views/ScoreCard.java | 0 .../activities/habits/show/views/StreakCard.java | 0 .../activities/habits/show/views/SubtitleCard.java | 0 .../activities/habits/show/views/package-info.java | 0 .../uhabits/activities/intro/IntroActivity.java | 0 .../uhabits/activities/intro/package-info.java | 0 .../org/isoron/uhabits/activities/package-info.java | 0 .../activities/settings/SettingsActivity.java | 0 .../activities/settings/SettingsFragment.java | 0 .../uhabits/activities/settings/package-info.java | 0 .../uhabits/automation/EditSettingActivity.java | 0 .../uhabits/automation/EditSettingController.java | 0 .../uhabits/automation/EditSettingRootView.java | 0 .../uhabits/automation/FireSettingReceiver.java | 0 .../uhabits/commands/ArchiveHabitsCommand.java | 0 .../uhabits/commands/ChangeHabitColorCommand.java | 0 .../java/org/isoron/uhabits/commands/Command.java | 0 .../org/isoron/uhabits/commands/CommandParser.java | 0 .../org/isoron/uhabits/commands/CommandRunner.java | 0 .../isoron/uhabits/commands/CreateHabitCommand.java | 0 .../uhabits/commands/CreateRepetitionCommand.java | 0 .../uhabits/commands/DeleteHabitsCommand.java | 0 .../isoron/uhabits/commands/EditHabitCommand.java | 0 .../uhabits/commands/ToggleRepetitionCommand.java | 0 .../uhabits/commands/UnarchiveHabitsCommand.java | 0 .../org/isoron/uhabits/commands/package-info.java | 0 .../org/isoron/uhabits/intents/IntentFactory.java | 0 .../org/isoron/uhabits/intents/IntentParser.java | 0 .../org/isoron/uhabits/intents/IntentScheduler.java | 0 .../uhabits/intents/PendingIntentFactory.java | 0 .../org/isoron/uhabits/io/AbstractImporter.java | 0 .../java/org/isoron/uhabits/io/GenericImporter.java | 0 .../org/isoron/uhabits/io/HabitBullCSVImporter.java | 0 .../org/isoron/uhabits/io/HabitsCSVExporter.java | 0 .../java/org/isoron/uhabits/io/LoopDBImporter.java | 0 .../org/isoron/uhabits/io/RewireDBImporter.java | 0 .../org/isoron/uhabits/io/TickmateDBImporter.java | 0 .../java/org/isoron/uhabits/io/package-info.java | 0 .../java/org/isoron/uhabits/models/Checkmark.java | 0 .../org/isoron/uhabits/models/CheckmarkList.java | 0 .../java/org/isoron/uhabits/models/Frequency.java | 0 .../main/java/org/isoron/uhabits/models/Habit.java | 0 .../java/org/isoron/uhabits/models/HabitList.java | 0 .../org/isoron/uhabits/models/HabitMatcher.java | 0 .../isoron/uhabits/models/HabitMatcherBuilder.java | 0 .../uhabits/models/HabitNotFoundException.java | 0 .../org/isoron/uhabits/models/ModelFactory.java | 0 .../org/isoron/uhabits/models/ModelObservable.java | 0 .../java/org/isoron/uhabits/models/Reminder.java | 0 .../java/org/isoron/uhabits/models/Repetition.java | 0 .../org/isoron/uhabits/models/RepetitionList.java | 0 .../main/java/org/isoron/uhabits/models/Score.java | 0 .../java/org/isoron/uhabits/models/ScoreList.java | 0 .../main/java/org/isoron/uhabits/models/Streak.java | 0 .../java/org/isoron/uhabits/models/StreakList.java | 0 .../java/org/isoron/uhabits/models/WeekdayList.java | 0 .../uhabits/models/memory/MemoryCheckmarkList.java | 0 .../uhabits/models/memory/MemoryHabitList.java | 0 .../uhabits/models/memory/MemoryModelFactory.java | 0 .../uhabits/models/memory/MemoryRepetitionList.java | 0 .../uhabits/models/memory/MemoryScoreList.java | 0 .../uhabits/models/memory/MemoryStreakList.java | 0 .../isoron/uhabits/models/memory/package-info.java | 0 .../org/isoron/uhabits/models/package-info.java | 0 .../sqlite/InconsistentDatabaseException.java | 0 .../sqlite/InvalidDatabaseVersionException.java | 0 .../uhabits/models/sqlite/SQLModelFactory.java | 0 .../uhabits/models/sqlite/SQLiteCheckmarkList.java | 0 .../uhabits/models/sqlite/SQLiteHabitList.java | 0 .../uhabits/models/sqlite/SQLiteRepetitionList.java | 0 .../uhabits/models/sqlite/SQLiteScoreList.java | 0 .../uhabits/models/sqlite/SQLiteStreakList.java | 0 .../isoron/uhabits/models/sqlite/SQLiteUtils.java | 0 .../isoron/uhabits/models/sqlite/package-info.java | 0 .../models/sqlite/records/CheckmarkRecord.java | 0 .../uhabits/models/sqlite/records/HabitRecord.java | 0 .../models/sqlite/records/RepetitionRecord.java | 0 .../uhabits/models/sqlite/records/SQLiteRecord.java | 0 .../uhabits/models/sqlite/records/ScoreRecord.java | 0 .../uhabits/models/sqlite/records/StreakRecord.java | 0 .../uhabits/models/sqlite/records/package-info.java | 0 .../uhabits/notifications/NotificationTray.java | 0 .../main/java/org/isoron/uhabits/package-info.java | 0 .../org/isoron/uhabits/preferences/Preferences.java | 0 .../uhabits/preferences/WidgetPreferences.java | 0 .../uhabits/receivers/ConnectivityReceiver.java | 0 .../isoron/uhabits/receivers/PebbleReceiver.java | 0 .../org/isoron/uhabits/receivers/ReceiverScope.java | 0 .../uhabits/receivers/ReminderController.java | 0 .../isoron/uhabits/receivers/ReminderReceiver.java | 0 .../isoron/uhabits/receivers/WidgetController.java | 0 .../isoron/uhabits/receivers/WidgetReceiver.java | 0 .../main/java/org/isoron/uhabits/sync/Event.java | 0 .../java/org/isoron/uhabits/sync/SyncManager.java | 0 .../java/org/isoron/uhabits/sync/SyncService.java | 0 .../org/isoron/uhabits/tasks/AndroidTaskRunner.java | 0 .../org/isoron/uhabits/tasks/ExportCSVTask.java | 0 .../java/org/isoron/uhabits/tasks/ExportDBTask.java | 0 .../org/isoron/uhabits/tasks/ImportDataTask.java | 0 .../uhabits/tasks/SingleThreadTaskRunner.java | 0 .../main/java/org/isoron/uhabits/tasks/Task.java | 0 .../java/org/isoron/uhabits/tasks/TaskRunner.java | 0 .../java/org/isoron/uhabits/tasks/package-info.java | 0 .../org/isoron/uhabits/utils/AttributeSetUtils.java | 0 .../java/org/isoron/uhabits/utils/ColorUtils.java | 0 .../org/isoron/uhabits/utils/DatabaseUtils.java | 0 .../java/org/isoron/uhabits/utils/DateFormats.java | 0 .../java/org/isoron/uhabits/utils/DateUtils.java | 0 .../java/org/isoron/uhabits/utils/FileUtils.java | 0 .../org/isoron/uhabits/utils/InterfaceUtils.java | 0 .../org/isoron/uhabits/utils/MidnightTimer.java | 0 .../org/isoron/uhabits/utils/ReminderScheduler.java | 0 .../org/isoron/uhabits/utils/RingtoneUtils.java | 0 .../java/org/isoron/uhabits/utils/SSLUtils.java | 0 .../org/isoron/uhabits/utils/StyledResources.java | 0 .../java/org/isoron/uhabits/utils/WidgetUtils.java | 0 .../java/org/isoron/uhabits/utils/package-info.java | 0 .../java/org/isoron/uhabits/widgets/BaseWidget.java | 0 .../isoron/uhabits/widgets/BaseWidgetProvider.java | 0 .../org/isoron/uhabits/widgets/CheckmarkWidget.java | 0 .../uhabits/widgets/CheckmarkWidgetProvider.java | 0 .../org/isoron/uhabits/widgets/FrequencyWidget.java | 0 .../uhabits/widgets/FrequencyWidgetProvider.java | 0 .../isoron/uhabits/widgets/HabitPickerDialog.java | 0 .../org/isoron/uhabits/widgets/HistoryWidget.java | 0 .../uhabits/widgets/HistoryWidgetProvider.java | 0 .../org/isoron/uhabits/widgets/ScoreWidget.java | 0 .../isoron/uhabits/widgets/ScoreWidgetProvider.java | 0 .../org/isoron/uhabits/widgets/StreakWidget.java | 0 .../uhabits/widgets/StreakWidgetProvider.java | 0 .../isoron/uhabits/widgets/WidgetDimensions.java | 0 .../org/isoron/uhabits/widgets/WidgetUpdater.java | 0 .../org/isoron/uhabits/widgets/package-info.java | 0 .../uhabits/widgets/views/CheckmarkWidgetView.java | 0 .../uhabits/widgets/views/GraphWidgetView.java | 0 .../uhabits/widgets/views/HabitWidgetView.java | 0 .../isoron/uhabits/widgets/views/package-info.java | 0 .../src/main/res/color/date_picker_selector.xml | 0 .../main/res/color/date_picker_year_selector.xml | 0 .../main/res/drawable-hdpi/ic_action_add_dark.png | Bin .../main/res/drawable-hdpi/ic_action_add_light.png | Bin .../res/drawable-hdpi/ic_action_archive_dark.png | Bin .../res/drawable-hdpi/ic_action_archive_light.png | Bin .../src/main/res/drawable-hdpi/ic_action_check.png | Bin .../main/res/drawable-hdpi/ic_action_color_dark.png | Bin .../res/drawable-hdpi/ic_action_color_light.png | Bin .../res/drawable-hdpi/ic_action_download_dark.png | Bin .../res/drawable-hdpi/ic_action_download_light.png | Bin .../main/res/drawable-hdpi/ic_action_edit_dark.png | Bin .../main/res/drawable-hdpi/ic_action_edit_light.png | Bin .../res/drawable-hdpi/ic_action_filter_dark.png | Bin .../res/drawable-hdpi/ic_action_filter_light.png | Bin .../src/main/res/drawable-hdpi/ic_action_snooze.png | Bin .../res/drawable-hdpi/ic_action_unarchive_dark.png | Bin .../res/drawable-hdpi/ic_action_unarchive_light.png | Bin .../src/main/res/drawable-hdpi/ic_alarm_black.png | Bin .../src/main/res/drawable-hdpi/ic_alarm_white.png | Bin .../ic_colorpicker_swatch_selected.png | Bin .../src/main/res/drawable-hdpi/ic_notification.png | Bin .../src/main/res/drawable-hdpi/ic_repeat_black.png | Bin .../src/main/res/drawable-hdpi/ic_repeat_white.png | Bin .../main/res/drawable-mdpi/ic_action_add_dark.png | Bin .../main/res/drawable-mdpi/ic_action_add_light.png | Bin .../res/drawable-mdpi/ic_action_archive_dark.png | Bin .../res/drawable-mdpi/ic_action_archive_light.png | Bin .../src/main/res/drawable-mdpi/ic_action_check.png | Bin .../main/res/drawable-mdpi/ic_action_color_dark.png | Bin .../res/drawable-mdpi/ic_action_color_light.png | Bin .../res/drawable-mdpi/ic_action_download_dark.png | Bin .../res/drawable-mdpi/ic_action_download_light.png | Bin .../main/res/drawable-mdpi/ic_action_edit_dark.png | Bin .../main/res/drawable-mdpi/ic_action_edit_light.png | Bin .../res/drawable-mdpi/ic_action_filter_dark.png | Bin .../res/drawable-mdpi/ic_action_filter_light.png | Bin .../src/main/res/drawable-mdpi/ic_action_snooze.png | Bin .../res/drawable-mdpi/ic_action_unarchive_dark.png | Bin .../res/drawable-mdpi/ic_action_unarchive_light.png | Bin .../src/main/res/drawable-mdpi/ic_alarm_black.png | Bin .../src/main/res/drawable-mdpi/ic_alarm_white.png | Bin .../ic_colorpicker_swatch_selected.png | Bin .../src/main/res/drawable-mdpi/ic_notification.png | Bin .../src/main/res/drawable-mdpi/ic_repeat_black.png | Bin .../src/main/res/drawable-mdpi/ic_repeat_white.png | Bin .../res/drawable-nodpi/widget_preview_checkmark.png | Bin .../res/drawable-nodpi/widget_preview_frequency.png | Bin .../res/drawable-nodpi/widget_preview_history.png | Bin .../res/drawable-nodpi/widget_preview_score.png | Bin .../res/drawable-nodpi/widget_preview_streaks.png | Bin .../src/main/res/drawable-v21/ripple.xml | 0 .../main/res/drawable-v21/ripple_transparent.xml | 0 .../src/main/res/drawable-v21/selected_box.xml | 0 .../res/drawable-v21/widget_button_background.xml | 0 .../main/res/drawable-xhdpi/ic_action_add_dark.png | Bin .../main/res/drawable-xhdpi/ic_action_add_light.png | Bin .../res/drawable-xhdpi/ic_action_archive_dark.png | Bin .../res/drawable-xhdpi/ic_action_archive_light.png | Bin .../src/main/res/drawable-xhdpi/ic_action_check.png | Bin .../res/drawable-xhdpi/ic_action_color_dark.png | Bin .../res/drawable-xhdpi/ic_action_color_light.png | Bin .../res/drawable-xhdpi/ic_action_download_dark.png | Bin .../res/drawable-xhdpi/ic_action_download_light.png | Bin .../main/res/drawable-xhdpi/ic_action_edit_dark.png | Bin .../res/drawable-xhdpi/ic_action_edit_light.png | Bin .../res/drawable-xhdpi/ic_action_filter_dark.png | Bin .../res/drawable-xhdpi/ic_action_filter_light.png | Bin .../main/res/drawable-xhdpi/ic_action_snooze.png | Bin .../res/drawable-xhdpi/ic_action_unarchive_dark.png | Bin .../drawable-xhdpi/ic_action_unarchive_light.png | Bin .../src/main/res/drawable-xhdpi/ic_alarm_black.png | Bin .../src/main/res/drawable-xhdpi/ic_alarm_white.png | Bin .../ic_colorpicker_swatch_selected.png | Bin .../src/main/res/drawable-xhdpi/ic_notification.png | Bin .../src/main/res/drawable-xhdpi/ic_repeat_black.png | Bin .../src/main/res/drawable-xhdpi/ic_repeat_white.png | Bin .../main/res/drawable-xxhdpi/ic_action_add_dark.png | Bin .../res/drawable-xxhdpi/ic_action_add_light.png | Bin .../res/drawable-xxhdpi/ic_action_archive_dark.png | Bin .../res/drawable-xxhdpi/ic_action_archive_light.png | Bin .../main/res/drawable-xxhdpi/ic_action_check.png | Bin .../res/drawable-xxhdpi/ic_action_color_dark.png | Bin .../res/drawable-xxhdpi/ic_action_color_light.png | Bin .../res/drawable-xxhdpi/ic_action_download_dark.png | Bin .../drawable-xxhdpi/ic_action_download_light.png | Bin .../res/drawable-xxhdpi/ic_action_edit_dark.png | Bin .../res/drawable-xxhdpi/ic_action_edit_light.png | Bin .../res/drawable-xxhdpi/ic_action_filter_dark.png | Bin .../res/drawable-xxhdpi/ic_action_filter_light.png | Bin .../main/res/drawable-xxhdpi/ic_action_snooze.png | Bin .../drawable-xxhdpi/ic_action_unarchive_dark.png | Bin .../drawable-xxhdpi/ic_action_unarchive_light.png | Bin .../src/main/res/drawable-xxhdpi/ic_alarm_black.png | Bin .../src/main/res/drawable-xxhdpi/ic_alarm_white.png | Bin .../main/res/drawable-xxhdpi/ic_notification.png | Bin .../main/res/drawable-xxhdpi/ic_repeat_black.png | Bin .../main/res/drawable-xxhdpi/ic_repeat_white.png | Bin .../res/drawable-xxxhdpi/ic_action_add_light.png | Bin .../res/drawable-xxxhdpi/ic_action_filter_dark.png | Bin .../res/drawable-xxxhdpi/ic_action_filter_light.png | Bin .../main/res/drawable-xxxhdpi/ic_alarm_black.png | Bin .../main/res/drawable-xxxhdpi/ic_alarm_white.png | Bin .../main/res/drawable-xxxhdpi/ic_repeat_black.png | Bin .../main/res/drawable-xxxhdpi/ic_repeat_white.png | Bin .../main/res/drawable/card_amoled_background.xml | 0 .../src/main/res/drawable/card_dark_background.xml | 0 .../src/main/res/drawable/card_light_background.xml | 0 .../src/main/res/drawable/color_picker_swatch.xml | 0 .../src/main/res/drawable/done_background_color.xml | 0 .../res/drawable/done_background_color_dark.xml | 0 .../src/main/res/drawable/intro_icon_1.png | Bin .../src/main/res/drawable/intro_icon_2.png | Bin .../src/main/res/drawable/intro_icon_4.png | Bin .../src/main/res/drawable/selected_box_amoled.xml | 0 .../src/main/res/drawable/selected_box_dark.xml | 0 .../src/main/res/drawable/selected_box_light.xml | 0 .../src/main/res/drawable/stripe.png | Bin .../src/main/res/drawable/toolbar_shadow.xml | 0 .../src/main/res/drawable/widget_background.xml | 0 .../main/res/drawable/widget_button_background.xml | 0 .../src/main/res/layout/about.xml | 0 .../src/main/res/layout/automation.xml | 0 .../src/main/res/layout/color_picker_dialog.xml | 0 .../src/main/res/layout/color_picker_swatch.xml | 0 .../src/main/res/layout/date_picker_dialog.xml | 0 .../src/main/res/layout/date_picker_done_button.xml | 0 .../src/main/res/layout/date_picker_header_view.xml | 0 .../main/res/layout/date_picker_selected_date.xml | 0 .../main/res/layout/date_picker_view_animator.xml | 0 .../src/main/res/layout/edit_habit.xml | 0 .../src/main/res/layout/edit_habit_frequency.xml | 0 .../src/main/res/layout/edit_habit_name.xml | 0 .../src/main/res/layout/edit_habit_reminder.xml | 0 .../src/main/res/layout/edit_habit_target.xml | 0 .../src/main/res/layout/filter.xml | 0 .../src/main/res/layout/list_habits.xml | 0 .../main/res/layout/list_habits_button_preview.xml | 0 .../src/main/res/layout/list_habits_hint.xml | 0 .../main/res/layout/list_habits_panel_preview.xml | 0 .../src/main/res/layout/list_habits_preview.xml | 0 .../src/main/res/layout/number_picker_dialog.xml | 0 .../main/res/layout/preference_category_custom.xml | 0 .../src/main/res/layout/settings_activity.xml | 0 .../src/main/res/layout/show_habit.xml | 0 .../src/main/res/layout/show_habit_bar.xml | 0 .../src/main/res/layout/show_habit_frequency.xml | 0 .../src/main/res/layout/show_habit_history.xml | 0 .../src/main/res/layout/show_habit_inner.xml | 0 .../src/main/res/layout/show_habit_overview.xml | 0 .../src/main/res/layout/show_habit_preview.xml | 0 .../src/main/res/layout/show_habit_score.xml | 0 .../src/main/res/layout/show_habit_streak.xml | 0 .../src/main/res/layout/show_habit_subtitle.xml | 0 .../src/main/res/layout/time_header_label.xml | 0 .../src/main/res/layout/time_picker_dialog.xml | 0 .../src/main/res/layout/widget_checkmark.xml | 0 .../main/res/layout/widget_configure_activity.xml | 0 .../src/main/res/layout/widget_error.xml | 0 .../src/main/res/layout/widget_graph.xml | 0 .../src/main/res/layout/widget_wrapper.xml | 0 .../src/main/res/layout/year_label_text_view.xml | 0 .../src/main/res/menu/list_habits.xml | 0 .../src/main/res/menu/list_habits_selection.xml | 0 .../src/main/res/menu/show_habit.xml | 0 .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../src/main/res/values-af/strings.xml | 0 .../src/main/res/values-ar/strings.xml | 0 .../src/main/res/values-bg/strings.xml | 0 .../src/main/res/values-ca/strings.xml | 0 .../src/main/res/values-cs/strings.xml | 0 .../src/main/res/values-da/strings.xml | 0 .../src/main/res/values-de/strings.xml | 0 .../src/main/res/values-el/strings.xml | 0 .../src/main/res/values-eo/strings.xml | 0 .../src/main/res/values-es/strings.xml | 0 .../src/main/res/values-eu/strings.xml | 0 .../src/main/res/values-fa/strings.xml | 0 .../src/main/res/values-fi/strings.xml | 0 .../src/main/res/values-fr/strings.xml | 0 .../src/main/res/values-hi/strings.xml | 0 .../src/main/res/values-hr/strings.xml | 0 .../src/main/res/values-hu/strings.xml | 0 .../src/main/res/values-id/strings.xml | 0 .../src/main/res/values-in/strings.xml | 0 .../src/main/res/values-it/strings.xml | 0 .../src/main/res/values-iw/strings.xml | 0 .../src/main/res/values-ja/strings.xml | 0 .../src/main/res/values-ko/strings.xml | 0 .../src/main/res/values-nl/strings.xml | 0 .../src/main/res/values-no-rNO/strings.xml | 0 .../src/main/res/values-pl/strings.xml | 0 .../src/main/res/values-pt-rBR/strings.xml | 0 .../src/main/res/values-pt-rPT/strings.xml | 0 .../src/main/res/values-ro/strings.xml | 0 .../src/main/res/values-ru/strings.xml | 0 .../src/main/res/values-sl/strings.xml | 0 .../src/main/res/values-sr/strings.xml | 0 .../src/main/res/values-sv/strings.xml | 0 .../src/main/res/values-tr/strings.xml | 0 .../src/main/res/values-uk/strings.xml | 0 .../src/main/res/values-v21/styles.xml | 0 .../src/main/res/values-v21/styles_list_habits.xml | 0 .../src/main/res/values-vi/strings.xml | 0 .../src/main/res/values-zh-rCN/strings.xml | 0 .../src/main/res/values-zh-rTW/strings.xml | 0 .../src/main/res/values/attrs.xml | 0 .../src/main/res/values/colors.xml | 0 .../src/main/res/values/constants.xml | 0 .../src/main/res/values/dimens.xml | 0 .../src/main/res/values/fontawesome.xml | 0 .../src/main/res/values/keys.xml | 0 .../src/main/res/values/pickers.xml | 0 .../src/main/res/values/strings.xml | 0 .../src/main/res/values/styles.xml | 0 .../src/main/res/values/styles_dialog.xml | 0 .../src/main/res/values/styles_list_habits.xml | 0 .../src/main/res/values/styles_show_habit.xml | 0 .../src/main/res/xml/file_paths.xml | 0 .../src/main/res/xml/preferences.xml | 0 .../src/main/res/xml/widget_checkmark_info.xml | 0 .../src/main/res/xml/widget_frequency_info.xml | 0 .../src/main/res/xml/widget_history_info.xml | 0 .../src/main/res/xml/widget_score_info.xml | 0 .../src/main/res/xml/widget_streak_info.xml | 0 .../test/java/org/isoron/uhabits/BaseUnitTest.java | 0 .../isoron/uhabits/activities/BaseActivityTest.java | 0 .../isoron/uhabits/activities/BaseScreenTest.java | 0 .../habits/list/ListHabitsControllerTest.java | 0 .../activities/habits/list/ListHabitsMenuTest.java | 0 .../habits/list/ListHabitsScreenTest.java | 0 .../controllers/CheckmarkButtonControllerTest.java | 0 .../list/controllers/HabitCardControllerTest.java | 0 .../controllers/HabitCardListControllerTest.java | 0 .../habits/list/controllers/package-info.java | 0 .../habits/list/model/HabitCardListCacheTest.java | 0 .../activities/habits/show/ShowHabitsMenuTest.java | 0 .../uhabits/commands/ArchiveHabitsCommandTest.java | 0 .../commands/ChangeHabitColorCommandTest.java | 0 .../isoron/uhabits/commands/CommandParserTest.java | 0 .../uhabits/commands/CreateHabitCommandTest.java | 0 .../commands/CreateRepetitionCommandTest.java | 0 .../uhabits/commands/DeleteHabitsCommandTest.java | 0 .../uhabits/commands/EditHabitCommandTest.java | 0 .../commands/ToggleRepetitionCommandTest.java | 0 .../commands/UnarchiveHabitsCommandTest.java | 0 .../isoron/uhabits/models/CheckmarkListTest.java | 0 .../org/isoron/uhabits/models/HabitFixtures.java | 0 .../org/isoron/uhabits/models/HabitListTest.java | 0 .../java/org/isoron/uhabits/models/HabitTest.java | 0 .../isoron/uhabits/models/RepetitionListTest.java | 0 .../org/isoron/uhabits/models/ScoreListTest.java | 0 .../java/org/isoron/uhabits/models/ScoreTest.java | 0 .../org/isoron/uhabits/models/StreakListTest.java | 0 .../org/isoron/uhabits/models/WeekdayListTest.java | 0 .../uhabits/receivers/ReminderControllerTest.java | 0 .../uhabits/receivers/WidgetControllerTest.java | 0 .../uhabits/tasks/SingleThreadTaskRunnerTest.java | 0 .../org/isoron/uhabits/utils/DateUtilsTest.java | 0 .../isoron/uhabits/utils/ReminderSchedulerTest.java | 0 678 files changed, 1 insertion(+), 1 deletion(-) rename {app => uhabits-android}/build.gradle (100%) rename {app => uhabits-android}/lint.xml (100%) rename {app => uhabits-android}/proguard-rules.txt (100%) rename {app => uhabits-android}/src/androidTest/assets/habitbull.csv (100%) rename {app => uhabits-android}/src/androidTest/assets/icon.png (100%) rename {app => uhabits-android}/src/androidTest/assets/loop.db (100%) rename {app => uhabits-android}/src/androidTest/assets/pull_failed (100%) rename {app => uhabits-android}/src/androidTest/assets/rewire.db (100%) rename {app => uhabits-android}/src/androidTest/assets/tickmate.db (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/BarChart/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/BarChart/renderDataOffset.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/BarChart/renderDifferentSize.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/BarChart/renderTransparent.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/FrequencyChart/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/FrequencyChart/renderDataOffset.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/FrequencyChart/renderDifferentSize.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/FrequencyChart/renderTransparent.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/HistoryChart/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/HistoryChart/renderDataOffset.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/HistoryChart/renderDifferentSize.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/HistoryChart/renderTransparent.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/RingView/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/RingView/renderDifferentParams.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/ScoreChart/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/ScoreChart/renderDataOffset.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/ScoreChart/renderDifferentSize.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/ScoreChart/renderMonthly.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/ScoreChart/renderTransparent.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/ScoreChart/renderYearly.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/StreakChart/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/StreakChart/renderSmallSize.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/common/StreakChart/renderTransparent.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_explicit_check.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_implicit_check.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_unchecked.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/list/HabitCardView/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_changed.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_selected.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/list/HeaderView/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/list/HeaderView/render_reverse.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/list/HintView/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_above.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_below.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_zero.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/show/FrequencyCard/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/show/HistoryCard/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/show/OverviewCard/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/show/ScoreCard/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/show/StreakCard/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/habits/show/SubtitleCard/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/widgets/CheckmarkWidget/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/checked.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/implicitly_checked.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/large_size.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/unchecked.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/widgets/FrequencyWidget/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/widgets/HistoryWidget/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/widgets/ScoreWidget/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v19/widgets/StreakWidget/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/BarChart/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/BarChart/renderDataOffset.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/BarChart/renderDifferentSize.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/BarChart/renderTransparent.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/FrequencyChart/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/FrequencyChart/renderDataOffset.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/FrequencyChart/renderDifferentSize.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/FrequencyChart/renderTransparent.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/HistoryChart/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/HistoryChart/renderDataOffset.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/HistoryChart/renderDifferentSize.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/HistoryChart/renderTransparent.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/RingView/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/RingView/renderDifferentParams.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/ScoreChart/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/ScoreChart/renderDataOffset.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/ScoreChart/renderDifferentSize.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/ScoreChart/renderMonthly.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/ScoreChart/renderTransparent.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/ScoreChart/renderYearly.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/StreakChart/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/StreakChart/renderSmallSize.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/common/StreakChart/renderTransparent.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_explicit_check.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_implicit_check.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_unchecked.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/list/HabitCardView/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_changed.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_selected.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/list/HeaderView/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/list/HeaderView/render_reverse.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/list/HintView/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_above.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_below.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_zero.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/show/FrequencyCard/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/show/HistoryCard/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/show/OverviewCard/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/show/ScoreCard/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/show/StreakCard/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/habits/show/SubtitleCard/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/widgets/CheckmarkWidget/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/checked.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/implicitly_checked.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/large_size.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/unchecked.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/widgets/FrequencyWidget/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/widgets/HistoryWidget/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/widgets/ScoreWidget/render.png (100%) rename {app => uhabits-android}/src/androidTest/assets/views-v21/widgets/StreakWidget/render.png (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/common/views/RingViewTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/models/HabitListTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/models/sqlite/HabitRecordTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteHabitListTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java (100%) rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java (100%) rename {app => uhabits-android}/src/main/AndroidManifest.xml (100%) rename {app => uhabits-android}/src/main/assets/cacert.pem (100%) rename {app => uhabits-android}/src/main/assets/fontawesome-webfont.ttf (100%) rename {app => uhabits-android}/src/main/assets/migrations/10.sql (100%) rename {app => uhabits-android}/src/main/assets/migrations/11.sql (100%) rename {app => uhabits-android}/src/main/assets/migrations/12.sql (100%) rename {app => uhabits-android}/src/main/assets/migrations/13.sql (100%) rename {app => uhabits-android}/src/main/assets/migrations/14.sql (100%) rename {app => uhabits-android}/src/main/assets/migrations/15.sql (100%) rename {app => uhabits-android}/src/main/assets/migrations/16.sql (100%) rename {app => uhabits-android}/src/main/assets/migrations/17.sql (100%) rename {app => uhabits-android}/src/main/assets/migrations/18.sql (100%) rename {app => uhabits-android}/src/main/assets/migrations/5.sql (100%) rename {app => uhabits-android}/src/main/assets/migrations/6.sql (100%) rename {app => uhabits-android}/src/main/assets/migrations/7.sql (100%) rename {app => uhabits-android}/src/main/ic_launcher-web.png (100%) rename {app => uhabits-android}/src/main/ic_small_widget_preview-web.png (100%) rename {app => uhabits-android}/src/main/java/com/android/colorpicker/ColorPickerDialog.java (100%) rename {app => uhabits-android}/src/main/java/com/android/colorpicker/ColorPickerPalette.java (100%) rename {app => uhabits-android}/src/main/java/com/android/colorpicker/ColorPickerSwatch.java (100%) rename {app => uhabits-android}/src/main/java/com/android/colorpicker/ColorStateDrawable.java (100%) rename {app => uhabits-android}/src/main/java/com/android/colorpicker/HsvColorComparator.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/AccessibleLinearLayout.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/AccessibleTextView.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/HapticFeedbackController.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/Utils.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/date/AccessibleDateAnimator.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/date/DatePickerController.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/date/DatePickerDialog.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/date/DayPickerView.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/date/MonthAdapter.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/date/MonthView.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/date/SimpleDayPickerView.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/date/SimpleMonthAdapter.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/date/SimpleMonthView.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/date/TextViewWithCircularIndicator.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/date/YearPickerView.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/time/CircleView.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/time/RadialSelectorView.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/time/RadialTextsView.java (100%) rename {app => uhabits-android}/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/AppComponent.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/AppContext.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/AppModule.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/AppScope.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/HabitLogger.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/HabitsApplication.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/HabitsBackupAgent.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/ActivityComponent.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/ActivityContext.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/ActivityModule.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/ActivityScope.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/BaseActivity.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/BaseExceptionHandler.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/BaseMenu.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/BaseRootView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/BaseScreen.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/BaseSelectionMenu.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/BaseSystem.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/about/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/HabitChart.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/RingView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/StreakChart.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialogFactory.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ExampleEditText.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/views/FrequencyPanel.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/views/TargetPanel.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonController.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardController.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/NumberButtonController.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardViewHolder.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/model/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCard.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/intro/IntroActivity.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/intro/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/activities/settings/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/automation/EditSettingController.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/commands/Command.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/commands/CommandParser.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/commands/CommandRunner.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/commands/CreateRepetitionCommand.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/commands/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/intents/IntentFactory.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/intents/IntentParser.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/intents/IntentScheduler.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/io/AbstractImporter.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/io/GenericImporter.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/io/HabitBullCSVImporter.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/io/RewireDBImporter.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/io/TickmateDBImporter.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/io/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/Checkmark.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/CheckmarkList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/Frequency.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/Habit.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/HabitList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/HabitMatcher.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/HabitNotFoundException.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/ModelFactory.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/ModelObservable.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/Reminder.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/Repetition.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/RepetitionList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/Score.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/ScoreList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/Streak.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/StreakList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/WeekdayList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/memory/MemoryCheckmarkList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/memory/MemoryModelFactory.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/memory/MemoryRepetitionList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/memory/MemoryScoreList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/memory/MemoryStreakList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/memory/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/InconsistentDatabaseException.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/InvalidDatabaseVersionException.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/SQLModelFactory.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteScoreList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteStreakList.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteUtils.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/records/CheckmarkRecord.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/records/HabitRecord.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/records/RepetitionRecord.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/records/SQLiteRecord.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/records/ScoreRecord.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/records/StreakRecord.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/models/sqlite/records/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/preferences/Preferences.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/receivers/ConnectivityReceiver.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/receivers/ReceiverScope.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/receivers/ReminderController.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/receivers/WidgetController.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/sync/Event.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/sync/SyncManager.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/sync/SyncService.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/tasks/Task.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/tasks/TaskRunner.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/tasks/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/utils/AttributeSetUtils.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/utils/ColorUtils.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/utils/DateFormats.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/utils/DateUtils.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/utils/FileUtils.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/utils/InterfaceUtils.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/utils/ReminderScheduler.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/utils/RingtoneUtils.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/utils/SSLUtils.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/utils/StyledResources.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/utils/WidgetUtils.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/utils/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/BaseWidget.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/StreakWidget.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/WidgetDimensions.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/package-info.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/views/GraphWidgetView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/views/HabitWidgetView.java (100%) rename {app => uhabits-android}/src/main/java/org/isoron/uhabits/widgets/views/package-info.java (100%) rename {app => uhabits-android}/src/main/res/color/date_picker_selector.xml (100%) rename {app => uhabits-android}/src/main/res/color/date_picker_year_selector.xml (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_add_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_add_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_archive_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_archive_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_check.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_color_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_color_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_download_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_download_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_edit_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_edit_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_filter_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_filter_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_snooze.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_unarchive_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_action_unarchive_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_alarm_black.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_alarm_white.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_notification.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_repeat_black.png (100%) rename {app => uhabits-android}/src/main/res/drawable-hdpi/ic_repeat_white.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_add_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_add_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_archive_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_archive_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_check.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_color_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_color_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_download_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_download_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_edit_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_edit_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_filter_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_filter_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_snooze.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_unarchive_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_action_unarchive_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_alarm_black.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_alarm_white.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_notification.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_repeat_black.png (100%) rename {app => uhabits-android}/src/main/res/drawable-mdpi/ic_repeat_white.png (100%) rename {app => uhabits-android}/src/main/res/drawable-nodpi/widget_preview_checkmark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-nodpi/widget_preview_frequency.png (100%) rename {app => uhabits-android}/src/main/res/drawable-nodpi/widget_preview_history.png (100%) rename {app => uhabits-android}/src/main/res/drawable-nodpi/widget_preview_score.png (100%) rename {app => uhabits-android}/src/main/res/drawable-nodpi/widget_preview_streaks.png (100%) rename {app => uhabits-android}/src/main/res/drawable-v21/ripple.xml (100%) rename {app => uhabits-android}/src/main/res/drawable-v21/ripple_transparent.xml (100%) rename {app => uhabits-android}/src/main/res/drawable-v21/selected_box.xml (100%) rename {app => uhabits-android}/src/main/res/drawable-v21/widget_button_background.xml (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_add_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_add_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_archive_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_archive_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_check.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_color_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_color_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_download_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_download_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_edit_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_edit_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_filter_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_filter_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_snooze.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_unarchive_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_action_unarchive_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_alarm_black.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_alarm_white.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_notification.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_repeat_black.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xhdpi/ic_repeat_white.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_add_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_add_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_archive_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_archive_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_check.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_color_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_color_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_download_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_download_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_edit_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_edit_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_filter_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_filter_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_snooze.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_unarchive_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_unarchive_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_alarm_black.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_alarm_white.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_notification.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_repeat_black.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxhdpi/ic_repeat_white.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxxhdpi/ic_action_add_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxxhdpi/ic_action_filter_dark.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxxhdpi/ic_action_filter_light.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxxhdpi/ic_alarm_black.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxxhdpi/ic_alarm_white.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxxhdpi/ic_repeat_black.png (100%) rename {app => uhabits-android}/src/main/res/drawable-xxxhdpi/ic_repeat_white.png (100%) rename {app => uhabits-android}/src/main/res/drawable/card_amoled_background.xml (100%) rename {app => uhabits-android}/src/main/res/drawable/card_dark_background.xml (100%) rename {app => uhabits-android}/src/main/res/drawable/card_light_background.xml (100%) rename {app => uhabits-android}/src/main/res/drawable/color_picker_swatch.xml (100%) rename {app => uhabits-android}/src/main/res/drawable/done_background_color.xml (100%) rename {app => uhabits-android}/src/main/res/drawable/done_background_color_dark.xml (100%) rename {app => uhabits-android}/src/main/res/drawable/intro_icon_1.png (100%) rename {app => uhabits-android}/src/main/res/drawable/intro_icon_2.png (100%) rename {app => uhabits-android}/src/main/res/drawable/intro_icon_4.png (100%) rename {app => uhabits-android}/src/main/res/drawable/selected_box_amoled.xml (100%) rename {app => uhabits-android}/src/main/res/drawable/selected_box_dark.xml (100%) rename {app => uhabits-android}/src/main/res/drawable/selected_box_light.xml (100%) rename {app => uhabits-android}/src/main/res/drawable/stripe.png (100%) rename {app => uhabits-android}/src/main/res/drawable/toolbar_shadow.xml (100%) rename {app => uhabits-android}/src/main/res/drawable/widget_background.xml (100%) rename {app => uhabits-android}/src/main/res/drawable/widget_button_background.xml (100%) rename {app => uhabits-android}/src/main/res/layout/about.xml (100%) rename {app => uhabits-android}/src/main/res/layout/automation.xml (100%) rename {app => uhabits-android}/src/main/res/layout/color_picker_dialog.xml (100%) rename {app => uhabits-android}/src/main/res/layout/color_picker_swatch.xml (100%) rename {app => uhabits-android}/src/main/res/layout/date_picker_dialog.xml (100%) rename {app => uhabits-android}/src/main/res/layout/date_picker_done_button.xml (100%) rename {app => uhabits-android}/src/main/res/layout/date_picker_header_view.xml (100%) rename {app => uhabits-android}/src/main/res/layout/date_picker_selected_date.xml (100%) rename {app => uhabits-android}/src/main/res/layout/date_picker_view_animator.xml (100%) rename {app => uhabits-android}/src/main/res/layout/edit_habit.xml (100%) rename {app => uhabits-android}/src/main/res/layout/edit_habit_frequency.xml (100%) rename {app => uhabits-android}/src/main/res/layout/edit_habit_name.xml (100%) rename {app => uhabits-android}/src/main/res/layout/edit_habit_reminder.xml (100%) rename {app => uhabits-android}/src/main/res/layout/edit_habit_target.xml (100%) rename {app => uhabits-android}/src/main/res/layout/filter.xml (100%) rename {app => uhabits-android}/src/main/res/layout/list_habits.xml (100%) rename {app => uhabits-android}/src/main/res/layout/list_habits_button_preview.xml (100%) rename {app => uhabits-android}/src/main/res/layout/list_habits_hint.xml (100%) rename {app => uhabits-android}/src/main/res/layout/list_habits_panel_preview.xml (100%) rename {app => uhabits-android}/src/main/res/layout/list_habits_preview.xml (100%) rename {app => uhabits-android}/src/main/res/layout/number_picker_dialog.xml (100%) rename {app => uhabits-android}/src/main/res/layout/preference_category_custom.xml (100%) rename {app => uhabits-android}/src/main/res/layout/settings_activity.xml (100%) rename {app => uhabits-android}/src/main/res/layout/show_habit.xml (100%) rename {app => uhabits-android}/src/main/res/layout/show_habit_bar.xml (100%) rename {app => uhabits-android}/src/main/res/layout/show_habit_frequency.xml (100%) rename {app => uhabits-android}/src/main/res/layout/show_habit_history.xml (100%) rename {app => uhabits-android}/src/main/res/layout/show_habit_inner.xml (100%) rename {app => uhabits-android}/src/main/res/layout/show_habit_overview.xml (100%) rename {app => uhabits-android}/src/main/res/layout/show_habit_preview.xml (100%) rename {app => uhabits-android}/src/main/res/layout/show_habit_score.xml (100%) rename {app => uhabits-android}/src/main/res/layout/show_habit_streak.xml (100%) rename {app => uhabits-android}/src/main/res/layout/show_habit_subtitle.xml (100%) rename {app => uhabits-android}/src/main/res/layout/time_header_label.xml (100%) rename {app => uhabits-android}/src/main/res/layout/time_picker_dialog.xml (100%) rename {app => uhabits-android}/src/main/res/layout/widget_checkmark.xml (100%) rename {app => uhabits-android}/src/main/res/layout/widget_configure_activity.xml (100%) rename {app => uhabits-android}/src/main/res/layout/widget_error.xml (100%) rename {app => uhabits-android}/src/main/res/layout/widget_graph.xml (100%) rename {app => uhabits-android}/src/main/res/layout/widget_wrapper.xml (100%) rename {app => uhabits-android}/src/main/res/layout/year_label_text_view.xml (100%) rename {app => uhabits-android}/src/main/res/menu/list_habits.xml (100%) rename {app => uhabits-android}/src/main/res/menu/list_habits_selection.xml (100%) rename {app => uhabits-android}/src/main/res/menu/show_habit.xml (100%) rename {app => uhabits-android}/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename {app => uhabits-android}/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename {app => uhabits-android}/src/main/res/values-af/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-ar/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-bg/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-ca/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-cs/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-da/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-de/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-el/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-eo/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-es/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-eu/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-fa/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-fi/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-fr/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-hi/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-hr/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-hu/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-id/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-in/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-it/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-iw/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-ja/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-ko/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-nl/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-no-rNO/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-pl/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-pt-rBR/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-pt-rPT/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-ro/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-ru/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-sl/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-sr/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-sv/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-tr/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-uk/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-v21/styles.xml (100%) rename {app => uhabits-android}/src/main/res/values-v21/styles_list_habits.xml (100%) rename {app => uhabits-android}/src/main/res/values-vi/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-zh-rCN/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values-zh-rTW/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values/attrs.xml (100%) rename {app => uhabits-android}/src/main/res/values/colors.xml (100%) rename {app => uhabits-android}/src/main/res/values/constants.xml (100%) rename {app => uhabits-android}/src/main/res/values/dimens.xml (100%) rename {app => uhabits-android}/src/main/res/values/fontawesome.xml (100%) rename {app => uhabits-android}/src/main/res/values/keys.xml (100%) rename {app => uhabits-android}/src/main/res/values/pickers.xml (100%) rename {app => uhabits-android}/src/main/res/values/strings.xml (100%) rename {app => uhabits-android}/src/main/res/values/styles.xml (100%) rename {app => uhabits-android}/src/main/res/values/styles_dialog.xml (100%) rename {app => uhabits-android}/src/main/res/values/styles_list_habits.xml (100%) rename {app => uhabits-android}/src/main/res/values/styles_show_habit.xml (100%) rename {app => uhabits-android}/src/main/res/xml/file_paths.xml (100%) rename {app => uhabits-android}/src/main/res/xml/preferences.xml (100%) rename {app => uhabits-android}/src/main/res/xml/widget_checkmark_info.xml (100%) rename {app => uhabits-android}/src/main/res/xml/widget_frequency_info.xml (100%) rename {app => uhabits-android}/src/main/res/xml/widget_history_info.xml (100%) rename {app => uhabits-android}/src/main/res/xml/widget_score_info.xml (100%) rename {app => uhabits-android}/src/main/res/xml/widget_streak_info.xml (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/BaseUnitTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/activities/BaseScreenTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/commands/CommandParserTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/models/HabitFixtures.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/models/HabitListTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/models/HabitTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/models/ScoreListTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/models/ScoreTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/models/StreakListTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java (100%) rename {app => uhabits-android}/src/test/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java (100%) diff --git a/settings.gradle b/settings.gradle index e7b4def49..31c0b2291 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':app' +include ':uhabits-android' diff --git a/app/build.gradle b/uhabits-android/build.gradle similarity index 100% rename from app/build.gradle rename to uhabits-android/build.gradle diff --git a/app/lint.xml b/uhabits-android/lint.xml similarity index 100% rename from app/lint.xml rename to uhabits-android/lint.xml diff --git a/app/proguard-rules.txt b/uhabits-android/proguard-rules.txt similarity index 100% rename from app/proguard-rules.txt rename to uhabits-android/proguard-rules.txt diff --git a/app/src/androidTest/assets/habitbull.csv b/uhabits-android/src/androidTest/assets/habitbull.csv similarity index 100% rename from app/src/androidTest/assets/habitbull.csv rename to uhabits-android/src/androidTest/assets/habitbull.csv diff --git a/app/src/androidTest/assets/icon.png b/uhabits-android/src/androidTest/assets/icon.png similarity index 100% rename from app/src/androidTest/assets/icon.png rename to uhabits-android/src/androidTest/assets/icon.png diff --git a/app/src/androidTest/assets/loop.db b/uhabits-android/src/androidTest/assets/loop.db similarity index 100% rename from app/src/androidTest/assets/loop.db rename to uhabits-android/src/androidTest/assets/loop.db diff --git a/app/src/androidTest/assets/pull_failed b/uhabits-android/src/androidTest/assets/pull_failed similarity index 100% rename from app/src/androidTest/assets/pull_failed rename to uhabits-android/src/androidTest/assets/pull_failed diff --git a/app/src/androidTest/assets/rewire.db b/uhabits-android/src/androidTest/assets/rewire.db similarity index 100% rename from app/src/androidTest/assets/rewire.db rename to uhabits-android/src/androidTest/assets/rewire.db diff --git a/app/src/androidTest/assets/tickmate.db b/uhabits-android/src/androidTest/assets/tickmate.db similarity index 100% rename from app/src/androidTest/assets/tickmate.db rename to uhabits-android/src/androidTest/assets/tickmate.db diff --git a/app/src/androidTest/assets/views-v19/common/BarChart/render.png b/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/BarChart/render.png rename to uhabits-android/src/androidTest/assets/views-v19/common/BarChart/render.png diff --git a/app/src/androidTest/assets/views-v19/common/BarChart/renderDataOffset.png b/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderDataOffset.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/BarChart/renderDataOffset.png rename to uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderDataOffset.png diff --git a/app/src/androidTest/assets/views-v19/common/BarChart/renderDifferentSize.png b/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderDifferentSize.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/BarChart/renderDifferentSize.png rename to uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderDifferentSize.png diff --git a/app/src/androidTest/assets/views-v19/common/BarChart/renderTransparent.png b/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderTransparent.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/BarChart/renderTransparent.png rename to uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderTransparent.png diff --git a/app/src/androidTest/assets/views-v19/common/FrequencyChart/render.png b/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/FrequencyChart/render.png rename to uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/render.png diff --git a/app/src/androidTest/assets/views-v19/common/FrequencyChart/renderDataOffset.png b/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderDataOffset.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/FrequencyChart/renderDataOffset.png rename to uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderDataOffset.png diff --git a/app/src/androidTest/assets/views-v19/common/FrequencyChart/renderDifferentSize.png b/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderDifferentSize.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/FrequencyChart/renderDifferentSize.png rename to uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderDifferentSize.png diff --git a/app/src/androidTest/assets/views-v19/common/FrequencyChart/renderTransparent.png b/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderTransparent.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/FrequencyChart/renderTransparent.png rename to uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderTransparent.png diff --git a/app/src/androidTest/assets/views-v19/common/HistoryChart/render.png b/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/HistoryChart/render.png rename to uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/render.png diff --git a/app/src/androidTest/assets/views-v19/common/HistoryChart/renderDataOffset.png b/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderDataOffset.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/HistoryChart/renderDataOffset.png rename to uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderDataOffset.png diff --git a/app/src/androidTest/assets/views-v19/common/HistoryChart/renderDifferentSize.png b/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderDifferentSize.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/HistoryChart/renderDifferentSize.png rename to uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderDifferentSize.png diff --git a/app/src/androidTest/assets/views-v19/common/HistoryChart/renderTransparent.png b/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderTransparent.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/HistoryChart/renderTransparent.png rename to uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderTransparent.png diff --git a/app/src/androidTest/assets/views-v19/common/RingView/render.png b/uhabits-android/src/androidTest/assets/views-v19/common/RingView/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/RingView/render.png rename to uhabits-android/src/androidTest/assets/views-v19/common/RingView/render.png diff --git a/app/src/androidTest/assets/views-v19/common/RingView/renderDifferentParams.png b/uhabits-android/src/androidTest/assets/views-v19/common/RingView/renderDifferentParams.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/RingView/renderDifferentParams.png rename to uhabits-android/src/androidTest/assets/views-v19/common/RingView/renderDifferentParams.png diff --git a/app/src/androidTest/assets/views-v19/common/ScoreChart/render.png b/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/ScoreChart/render.png rename to uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/render.png diff --git a/app/src/androidTest/assets/views-v19/common/ScoreChart/renderDataOffset.png b/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderDataOffset.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/ScoreChart/renderDataOffset.png rename to uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderDataOffset.png diff --git a/app/src/androidTest/assets/views-v19/common/ScoreChart/renderDifferentSize.png b/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderDifferentSize.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/ScoreChart/renderDifferentSize.png rename to uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderDifferentSize.png diff --git a/app/src/androidTest/assets/views-v19/common/ScoreChart/renderMonthly.png b/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderMonthly.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/ScoreChart/renderMonthly.png rename to uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderMonthly.png diff --git a/app/src/androidTest/assets/views-v19/common/ScoreChart/renderTransparent.png b/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderTransparent.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/ScoreChart/renderTransparent.png rename to uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderTransparent.png diff --git a/app/src/androidTest/assets/views-v19/common/ScoreChart/renderYearly.png b/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderYearly.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/ScoreChart/renderYearly.png rename to uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderYearly.png diff --git a/app/src/androidTest/assets/views-v19/common/StreakChart/render.png b/uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/StreakChart/render.png rename to uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/render.png diff --git a/app/src/androidTest/assets/views-v19/common/StreakChart/renderSmallSize.png b/uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/renderSmallSize.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/StreakChart/renderSmallSize.png rename to uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/renderSmallSize.png diff --git a/app/src/androidTest/assets/views-v19/common/StreakChart/renderTransparent.png b/uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/renderTransparent.png similarity index 100% rename from app/src/androidTest/assets/views-v19/common/StreakChart/renderTransparent.png rename to uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/renderTransparent.png diff --git a/app/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_explicit_check.png b/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_explicit_check.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_explicit_check.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_explicit_check.png diff --git a/app/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_implicit_check.png b/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_implicit_check.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_implicit_check.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_implicit_check.png diff --git a/app/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_unchecked.png b/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_unchecked.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_unchecked.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_unchecked.png diff --git a/app/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render.png b/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render.png diff --git a/app/src/androidTest/assets/views-v19/habits/list/HabitCardView/render.png b/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/list/HabitCardView/render.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render.png diff --git a/app/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_changed.png b/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_changed.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_changed.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_changed.png diff --git a/app/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_selected.png b/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_selected.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_selected.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_selected.png diff --git a/app/src/androidTest/assets/views-v19/habits/list/HeaderView/render.png b/uhabits-android/src/androidTest/assets/views-v19/habits/list/HeaderView/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/list/HeaderView/render.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/list/HeaderView/render.png diff --git a/app/src/androidTest/assets/views-v19/habits/list/HeaderView/render_reverse.png b/uhabits-android/src/androidTest/assets/views-v19/habits/list/HeaderView/render_reverse.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/list/HeaderView/render_reverse.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/list/HeaderView/render_reverse.png diff --git a/app/src/androidTest/assets/views-v19/habits/list/HintView/render.png b/uhabits-android/src/androidTest/assets/views-v19/habits/list/HintView/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/list/HintView/render.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/list/HintView/render.png diff --git a/app/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_above.png b/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_above.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_above.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_above.png diff --git a/app/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_below.png b/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_below.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_below.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_below.png diff --git a/app/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_zero.png b/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_zero.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_zero.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_zero.png diff --git a/app/src/androidTest/assets/views-v19/habits/show/FrequencyCard/render.png b/uhabits-android/src/androidTest/assets/views-v19/habits/show/FrequencyCard/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/show/FrequencyCard/render.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/show/FrequencyCard/render.png diff --git a/app/src/androidTest/assets/views-v19/habits/show/HistoryCard/render.png b/uhabits-android/src/androidTest/assets/views-v19/habits/show/HistoryCard/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/show/HistoryCard/render.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/show/HistoryCard/render.png diff --git a/app/src/androidTest/assets/views-v19/habits/show/OverviewCard/render.png b/uhabits-android/src/androidTest/assets/views-v19/habits/show/OverviewCard/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/show/OverviewCard/render.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/show/OverviewCard/render.png diff --git a/app/src/androidTest/assets/views-v19/habits/show/ScoreCard/render.png b/uhabits-android/src/androidTest/assets/views-v19/habits/show/ScoreCard/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/show/ScoreCard/render.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/show/ScoreCard/render.png diff --git a/app/src/androidTest/assets/views-v19/habits/show/StreakCard/render.png b/uhabits-android/src/androidTest/assets/views-v19/habits/show/StreakCard/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/show/StreakCard/render.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/show/StreakCard/render.png diff --git a/app/src/androidTest/assets/views-v19/habits/show/SubtitleCard/render.png b/uhabits-android/src/androidTest/assets/views-v19/habits/show/SubtitleCard/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/habits/show/SubtitleCard/render.png rename to uhabits-android/src/androidTest/assets/views-v19/habits/show/SubtitleCard/render.png diff --git a/app/src/androidTest/assets/views-v19/widgets/CheckmarkWidget/render.png b/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidget/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/widgets/CheckmarkWidget/render.png rename to uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidget/render.png diff --git a/app/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/checked.png b/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/checked.png similarity index 100% rename from app/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/checked.png rename to uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/checked.png diff --git a/app/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/implicitly_checked.png b/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/implicitly_checked.png similarity index 100% rename from app/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/implicitly_checked.png rename to uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/implicitly_checked.png diff --git a/app/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/large_size.png b/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/large_size.png similarity index 100% rename from app/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/large_size.png rename to uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/large_size.png diff --git a/app/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/unchecked.png b/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/unchecked.png similarity index 100% rename from app/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/unchecked.png rename to uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/unchecked.png diff --git a/app/src/androidTest/assets/views-v19/widgets/FrequencyWidget/render.png b/uhabits-android/src/androidTest/assets/views-v19/widgets/FrequencyWidget/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/widgets/FrequencyWidget/render.png rename to uhabits-android/src/androidTest/assets/views-v19/widgets/FrequencyWidget/render.png diff --git a/app/src/androidTest/assets/views-v19/widgets/HistoryWidget/render.png b/uhabits-android/src/androidTest/assets/views-v19/widgets/HistoryWidget/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/widgets/HistoryWidget/render.png rename to uhabits-android/src/androidTest/assets/views-v19/widgets/HistoryWidget/render.png diff --git a/app/src/androidTest/assets/views-v19/widgets/ScoreWidget/render.png b/uhabits-android/src/androidTest/assets/views-v19/widgets/ScoreWidget/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/widgets/ScoreWidget/render.png rename to uhabits-android/src/androidTest/assets/views-v19/widgets/ScoreWidget/render.png diff --git a/app/src/androidTest/assets/views-v19/widgets/StreakWidget/render.png b/uhabits-android/src/androidTest/assets/views-v19/widgets/StreakWidget/render.png similarity index 100% rename from app/src/androidTest/assets/views-v19/widgets/StreakWidget/render.png rename to uhabits-android/src/androidTest/assets/views-v19/widgets/StreakWidget/render.png diff --git a/app/src/androidTest/assets/views-v21/common/BarChart/render.png b/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/BarChart/render.png rename to uhabits-android/src/androidTest/assets/views-v21/common/BarChart/render.png diff --git a/app/src/androidTest/assets/views-v21/common/BarChart/renderDataOffset.png b/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderDataOffset.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/BarChart/renderDataOffset.png rename to uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderDataOffset.png diff --git a/app/src/androidTest/assets/views-v21/common/BarChart/renderDifferentSize.png b/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderDifferentSize.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/BarChart/renderDifferentSize.png rename to uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderDifferentSize.png diff --git a/app/src/androidTest/assets/views-v21/common/BarChart/renderTransparent.png b/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderTransparent.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/BarChart/renderTransparent.png rename to uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderTransparent.png diff --git a/app/src/androidTest/assets/views-v21/common/FrequencyChart/render.png b/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/FrequencyChart/render.png rename to uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/render.png diff --git a/app/src/androidTest/assets/views-v21/common/FrequencyChart/renderDataOffset.png b/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderDataOffset.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/FrequencyChart/renderDataOffset.png rename to uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderDataOffset.png diff --git a/app/src/androidTest/assets/views-v21/common/FrequencyChart/renderDifferentSize.png b/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderDifferentSize.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/FrequencyChart/renderDifferentSize.png rename to uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderDifferentSize.png diff --git a/app/src/androidTest/assets/views-v21/common/FrequencyChart/renderTransparent.png b/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderTransparent.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/FrequencyChart/renderTransparent.png rename to uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderTransparent.png diff --git a/app/src/androidTest/assets/views-v21/common/HistoryChart/render.png b/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/HistoryChart/render.png rename to uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/render.png diff --git a/app/src/androidTest/assets/views-v21/common/HistoryChart/renderDataOffset.png b/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderDataOffset.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/HistoryChart/renderDataOffset.png rename to uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderDataOffset.png diff --git a/app/src/androidTest/assets/views-v21/common/HistoryChart/renderDifferentSize.png b/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderDifferentSize.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/HistoryChart/renderDifferentSize.png rename to uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderDifferentSize.png diff --git a/app/src/androidTest/assets/views-v21/common/HistoryChart/renderTransparent.png b/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderTransparent.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/HistoryChart/renderTransparent.png rename to uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderTransparent.png diff --git a/app/src/androidTest/assets/views-v21/common/RingView/render.png b/uhabits-android/src/androidTest/assets/views-v21/common/RingView/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/RingView/render.png rename to uhabits-android/src/androidTest/assets/views-v21/common/RingView/render.png diff --git a/app/src/androidTest/assets/views-v21/common/RingView/renderDifferentParams.png b/uhabits-android/src/androidTest/assets/views-v21/common/RingView/renderDifferentParams.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/RingView/renderDifferentParams.png rename to uhabits-android/src/androidTest/assets/views-v21/common/RingView/renderDifferentParams.png diff --git a/app/src/androidTest/assets/views-v21/common/ScoreChart/render.png b/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/ScoreChart/render.png rename to uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/render.png diff --git a/app/src/androidTest/assets/views-v21/common/ScoreChart/renderDataOffset.png b/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderDataOffset.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/ScoreChart/renderDataOffset.png rename to uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderDataOffset.png diff --git a/app/src/androidTest/assets/views-v21/common/ScoreChart/renderDifferentSize.png b/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderDifferentSize.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/ScoreChart/renderDifferentSize.png rename to uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderDifferentSize.png diff --git a/app/src/androidTest/assets/views-v21/common/ScoreChart/renderMonthly.png b/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderMonthly.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/ScoreChart/renderMonthly.png rename to uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderMonthly.png diff --git a/app/src/androidTest/assets/views-v21/common/ScoreChart/renderTransparent.png b/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderTransparent.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/ScoreChart/renderTransparent.png rename to uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderTransparent.png diff --git a/app/src/androidTest/assets/views-v21/common/ScoreChart/renderYearly.png b/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderYearly.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/ScoreChart/renderYearly.png rename to uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderYearly.png diff --git a/app/src/androidTest/assets/views-v21/common/StreakChart/render.png b/uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/StreakChart/render.png rename to uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/render.png diff --git a/app/src/androidTest/assets/views-v21/common/StreakChart/renderSmallSize.png b/uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/renderSmallSize.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/StreakChart/renderSmallSize.png rename to uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/renderSmallSize.png diff --git a/app/src/androidTest/assets/views-v21/common/StreakChart/renderTransparent.png b/uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/renderTransparent.png similarity index 100% rename from app/src/androidTest/assets/views-v21/common/StreakChart/renderTransparent.png rename to uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/renderTransparent.png diff --git a/app/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_explicit_check.png b/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_explicit_check.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_explicit_check.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_explicit_check.png diff --git a/app/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_implicit_check.png b/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_implicit_check.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_implicit_check.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_implicit_check.png diff --git a/app/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_unchecked.png b/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_unchecked.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_unchecked.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_unchecked.png diff --git a/app/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render.png b/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render.png diff --git a/app/src/androidTest/assets/views-v21/habits/list/HabitCardView/render.png b/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/list/HabitCardView/render.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render.png diff --git a/app/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_changed.png b/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_changed.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_changed.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_changed.png diff --git a/app/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_selected.png b/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_selected.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_selected.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_selected.png diff --git a/app/src/androidTest/assets/views-v21/habits/list/HeaderView/render.png b/uhabits-android/src/androidTest/assets/views-v21/habits/list/HeaderView/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/list/HeaderView/render.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/list/HeaderView/render.png diff --git a/app/src/androidTest/assets/views-v21/habits/list/HeaderView/render_reverse.png b/uhabits-android/src/androidTest/assets/views-v21/habits/list/HeaderView/render_reverse.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/list/HeaderView/render_reverse.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/list/HeaderView/render_reverse.png diff --git a/app/src/androidTest/assets/views-v21/habits/list/HintView/render.png b/uhabits-android/src/androidTest/assets/views-v21/habits/list/HintView/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/list/HintView/render.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/list/HintView/render.png diff --git a/app/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_above.png b/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_above.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_above.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_above.png diff --git a/app/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_below.png b/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_below.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_below.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_below.png diff --git a/app/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_zero.png b/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_zero.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_zero.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_zero.png diff --git a/app/src/androidTest/assets/views-v21/habits/show/FrequencyCard/render.png b/uhabits-android/src/androidTest/assets/views-v21/habits/show/FrequencyCard/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/show/FrequencyCard/render.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/show/FrequencyCard/render.png diff --git a/app/src/androidTest/assets/views-v21/habits/show/HistoryCard/render.png b/uhabits-android/src/androidTest/assets/views-v21/habits/show/HistoryCard/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/show/HistoryCard/render.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/show/HistoryCard/render.png diff --git a/app/src/androidTest/assets/views-v21/habits/show/OverviewCard/render.png b/uhabits-android/src/androidTest/assets/views-v21/habits/show/OverviewCard/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/show/OverviewCard/render.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/show/OverviewCard/render.png diff --git a/app/src/androidTest/assets/views-v21/habits/show/ScoreCard/render.png b/uhabits-android/src/androidTest/assets/views-v21/habits/show/ScoreCard/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/show/ScoreCard/render.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/show/ScoreCard/render.png diff --git a/app/src/androidTest/assets/views-v21/habits/show/StreakCard/render.png b/uhabits-android/src/androidTest/assets/views-v21/habits/show/StreakCard/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/show/StreakCard/render.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/show/StreakCard/render.png diff --git a/app/src/androidTest/assets/views-v21/habits/show/SubtitleCard/render.png b/uhabits-android/src/androidTest/assets/views-v21/habits/show/SubtitleCard/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/habits/show/SubtitleCard/render.png rename to uhabits-android/src/androidTest/assets/views-v21/habits/show/SubtitleCard/render.png diff --git a/app/src/androidTest/assets/views-v21/widgets/CheckmarkWidget/render.png b/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidget/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/widgets/CheckmarkWidget/render.png rename to uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidget/render.png diff --git a/app/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/checked.png b/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/checked.png similarity index 100% rename from app/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/checked.png rename to uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/checked.png diff --git a/app/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/implicitly_checked.png b/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/implicitly_checked.png similarity index 100% rename from app/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/implicitly_checked.png rename to uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/implicitly_checked.png diff --git a/app/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/large_size.png b/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/large_size.png similarity index 100% rename from app/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/large_size.png rename to uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/large_size.png diff --git a/app/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/unchecked.png b/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/unchecked.png similarity index 100% rename from app/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/unchecked.png rename to uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/unchecked.png diff --git a/app/src/androidTest/assets/views-v21/widgets/FrequencyWidget/render.png b/uhabits-android/src/androidTest/assets/views-v21/widgets/FrequencyWidget/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/widgets/FrequencyWidget/render.png rename to uhabits-android/src/androidTest/assets/views-v21/widgets/FrequencyWidget/render.png diff --git a/app/src/androidTest/assets/views-v21/widgets/HistoryWidget/render.png b/uhabits-android/src/androidTest/assets/views-v21/widgets/HistoryWidget/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/widgets/HistoryWidget/render.png rename to uhabits-android/src/androidTest/assets/views-v21/widgets/HistoryWidget/render.png diff --git a/app/src/androidTest/assets/views-v21/widgets/ScoreWidget/render.png b/uhabits-android/src/androidTest/assets/views-v21/widgets/ScoreWidget/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/widgets/ScoreWidget/render.png rename to uhabits-android/src/androidTest/assets/views-v21/widgets/ScoreWidget/render.png diff --git a/app/src/androidTest/assets/views-v21/widgets/StreakWidget/render.png b/uhabits-android/src/androidTest/assets/views-v21/widgets/StreakWidget/render.png similarity index 100% rename from app/src/androidTest/assets/views-v21/widgets/StreakWidget/render.png rename to uhabits-android/src/androidTest/assets/views-v21/widgets/StreakWidget/render.png diff --git a/app/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/common/views/RingViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/RingViewTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/common/views/RingViewTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/RingViewTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/models/HabitListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/HabitListTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/models/HabitListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/HabitListTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/HabitRecordTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/HabitRecordTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/models/sqlite/HabitRecordTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/HabitRecordTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteHabitListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteHabitListTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteHabitListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteHabitListTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java diff --git a/app/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java diff --git a/app/src/main/AndroidManifest.xml b/uhabits-android/src/main/AndroidManifest.xml similarity index 100% rename from app/src/main/AndroidManifest.xml rename to uhabits-android/src/main/AndroidManifest.xml diff --git a/app/src/main/assets/cacert.pem b/uhabits-android/src/main/assets/cacert.pem similarity index 100% rename from app/src/main/assets/cacert.pem rename to uhabits-android/src/main/assets/cacert.pem diff --git a/app/src/main/assets/fontawesome-webfont.ttf b/uhabits-android/src/main/assets/fontawesome-webfont.ttf similarity index 100% rename from app/src/main/assets/fontawesome-webfont.ttf rename to uhabits-android/src/main/assets/fontawesome-webfont.ttf diff --git a/app/src/main/assets/migrations/10.sql b/uhabits-android/src/main/assets/migrations/10.sql similarity index 100% rename from app/src/main/assets/migrations/10.sql rename to uhabits-android/src/main/assets/migrations/10.sql diff --git a/app/src/main/assets/migrations/11.sql b/uhabits-android/src/main/assets/migrations/11.sql similarity index 100% rename from app/src/main/assets/migrations/11.sql rename to uhabits-android/src/main/assets/migrations/11.sql diff --git a/app/src/main/assets/migrations/12.sql b/uhabits-android/src/main/assets/migrations/12.sql similarity index 100% rename from app/src/main/assets/migrations/12.sql rename to uhabits-android/src/main/assets/migrations/12.sql diff --git a/app/src/main/assets/migrations/13.sql b/uhabits-android/src/main/assets/migrations/13.sql similarity index 100% rename from app/src/main/assets/migrations/13.sql rename to uhabits-android/src/main/assets/migrations/13.sql diff --git a/app/src/main/assets/migrations/14.sql b/uhabits-android/src/main/assets/migrations/14.sql similarity index 100% rename from app/src/main/assets/migrations/14.sql rename to uhabits-android/src/main/assets/migrations/14.sql diff --git a/app/src/main/assets/migrations/15.sql b/uhabits-android/src/main/assets/migrations/15.sql similarity index 100% rename from app/src/main/assets/migrations/15.sql rename to uhabits-android/src/main/assets/migrations/15.sql diff --git a/app/src/main/assets/migrations/16.sql b/uhabits-android/src/main/assets/migrations/16.sql similarity index 100% rename from app/src/main/assets/migrations/16.sql rename to uhabits-android/src/main/assets/migrations/16.sql diff --git a/app/src/main/assets/migrations/17.sql b/uhabits-android/src/main/assets/migrations/17.sql similarity index 100% rename from app/src/main/assets/migrations/17.sql rename to uhabits-android/src/main/assets/migrations/17.sql diff --git a/app/src/main/assets/migrations/18.sql b/uhabits-android/src/main/assets/migrations/18.sql similarity index 100% rename from app/src/main/assets/migrations/18.sql rename to uhabits-android/src/main/assets/migrations/18.sql diff --git a/app/src/main/assets/migrations/5.sql b/uhabits-android/src/main/assets/migrations/5.sql similarity index 100% rename from app/src/main/assets/migrations/5.sql rename to uhabits-android/src/main/assets/migrations/5.sql diff --git a/app/src/main/assets/migrations/6.sql b/uhabits-android/src/main/assets/migrations/6.sql similarity index 100% rename from app/src/main/assets/migrations/6.sql rename to uhabits-android/src/main/assets/migrations/6.sql diff --git a/app/src/main/assets/migrations/7.sql b/uhabits-android/src/main/assets/migrations/7.sql similarity index 100% rename from app/src/main/assets/migrations/7.sql rename to uhabits-android/src/main/assets/migrations/7.sql diff --git a/app/src/main/ic_launcher-web.png b/uhabits-android/src/main/ic_launcher-web.png similarity index 100% rename from app/src/main/ic_launcher-web.png rename to uhabits-android/src/main/ic_launcher-web.png diff --git a/app/src/main/ic_small_widget_preview-web.png b/uhabits-android/src/main/ic_small_widget_preview-web.png similarity index 100% rename from app/src/main/ic_small_widget_preview-web.png rename to uhabits-android/src/main/ic_small_widget_preview-web.png diff --git a/app/src/main/java/com/android/colorpicker/ColorPickerDialog.java b/uhabits-android/src/main/java/com/android/colorpicker/ColorPickerDialog.java similarity index 100% rename from app/src/main/java/com/android/colorpicker/ColorPickerDialog.java rename to uhabits-android/src/main/java/com/android/colorpicker/ColorPickerDialog.java diff --git a/app/src/main/java/com/android/colorpicker/ColorPickerPalette.java b/uhabits-android/src/main/java/com/android/colorpicker/ColorPickerPalette.java similarity index 100% rename from app/src/main/java/com/android/colorpicker/ColorPickerPalette.java rename to uhabits-android/src/main/java/com/android/colorpicker/ColorPickerPalette.java diff --git a/app/src/main/java/com/android/colorpicker/ColorPickerSwatch.java b/uhabits-android/src/main/java/com/android/colorpicker/ColorPickerSwatch.java similarity index 100% rename from app/src/main/java/com/android/colorpicker/ColorPickerSwatch.java rename to uhabits-android/src/main/java/com/android/colorpicker/ColorPickerSwatch.java diff --git a/app/src/main/java/com/android/colorpicker/ColorStateDrawable.java b/uhabits-android/src/main/java/com/android/colorpicker/ColorStateDrawable.java similarity index 100% rename from app/src/main/java/com/android/colorpicker/ColorStateDrawable.java rename to uhabits-android/src/main/java/com/android/colorpicker/ColorStateDrawable.java diff --git a/app/src/main/java/com/android/colorpicker/HsvColorComparator.java b/uhabits-android/src/main/java/com/android/colorpicker/HsvColorComparator.java similarity index 100% rename from app/src/main/java/com/android/colorpicker/HsvColorComparator.java rename to uhabits-android/src/main/java/com/android/colorpicker/HsvColorComparator.java diff --git a/app/src/main/java/com/android/datetimepicker/AccessibleLinearLayout.java b/uhabits-android/src/main/java/com/android/datetimepicker/AccessibleLinearLayout.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/AccessibleLinearLayout.java rename to uhabits-android/src/main/java/com/android/datetimepicker/AccessibleLinearLayout.java diff --git a/app/src/main/java/com/android/datetimepicker/AccessibleTextView.java b/uhabits-android/src/main/java/com/android/datetimepicker/AccessibleTextView.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/AccessibleTextView.java rename to uhabits-android/src/main/java/com/android/datetimepicker/AccessibleTextView.java diff --git a/app/src/main/java/com/android/datetimepicker/HapticFeedbackController.java b/uhabits-android/src/main/java/com/android/datetimepicker/HapticFeedbackController.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/HapticFeedbackController.java rename to uhabits-android/src/main/java/com/android/datetimepicker/HapticFeedbackController.java diff --git a/app/src/main/java/com/android/datetimepicker/Utils.java b/uhabits-android/src/main/java/com/android/datetimepicker/Utils.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/Utils.java rename to uhabits-android/src/main/java/com/android/datetimepicker/Utils.java diff --git a/app/src/main/java/com/android/datetimepicker/date/AccessibleDateAnimator.java b/uhabits-android/src/main/java/com/android/datetimepicker/date/AccessibleDateAnimator.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/date/AccessibleDateAnimator.java rename to uhabits-android/src/main/java/com/android/datetimepicker/date/AccessibleDateAnimator.java diff --git a/app/src/main/java/com/android/datetimepicker/date/DatePickerController.java b/uhabits-android/src/main/java/com/android/datetimepicker/date/DatePickerController.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/date/DatePickerController.java rename to uhabits-android/src/main/java/com/android/datetimepicker/date/DatePickerController.java diff --git a/app/src/main/java/com/android/datetimepicker/date/DatePickerDialog.java b/uhabits-android/src/main/java/com/android/datetimepicker/date/DatePickerDialog.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/date/DatePickerDialog.java rename to uhabits-android/src/main/java/com/android/datetimepicker/date/DatePickerDialog.java diff --git a/app/src/main/java/com/android/datetimepicker/date/DayPickerView.java b/uhabits-android/src/main/java/com/android/datetimepicker/date/DayPickerView.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/date/DayPickerView.java rename to uhabits-android/src/main/java/com/android/datetimepicker/date/DayPickerView.java diff --git a/app/src/main/java/com/android/datetimepicker/date/MonthAdapter.java b/uhabits-android/src/main/java/com/android/datetimepicker/date/MonthAdapter.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/date/MonthAdapter.java rename to uhabits-android/src/main/java/com/android/datetimepicker/date/MonthAdapter.java diff --git a/app/src/main/java/com/android/datetimepicker/date/MonthView.java b/uhabits-android/src/main/java/com/android/datetimepicker/date/MonthView.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/date/MonthView.java rename to uhabits-android/src/main/java/com/android/datetimepicker/date/MonthView.java diff --git a/app/src/main/java/com/android/datetimepicker/date/SimpleDayPickerView.java b/uhabits-android/src/main/java/com/android/datetimepicker/date/SimpleDayPickerView.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/date/SimpleDayPickerView.java rename to uhabits-android/src/main/java/com/android/datetimepicker/date/SimpleDayPickerView.java diff --git a/app/src/main/java/com/android/datetimepicker/date/SimpleMonthAdapter.java b/uhabits-android/src/main/java/com/android/datetimepicker/date/SimpleMonthAdapter.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/date/SimpleMonthAdapter.java rename to uhabits-android/src/main/java/com/android/datetimepicker/date/SimpleMonthAdapter.java diff --git a/app/src/main/java/com/android/datetimepicker/date/SimpleMonthView.java b/uhabits-android/src/main/java/com/android/datetimepicker/date/SimpleMonthView.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/date/SimpleMonthView.java rename to uhabits-android/src/main/java/com/android/datetimepicker/date/SimpleMonthView.java diff --git a/app/src/main/java/com/android/datetimepicker/date/TextViewWithCircularIndicator.java b/uhabits-android/src/main/java/com/android/datetimepicker/date/TextViewWithCircularIndicator.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/date/TextViewWithCircularIndicator.java rename to uhabits-android/src/main/java/com/android/datetimepicker/date/TextViewWithCircularIndicator.java diff --git a/app/src/main/java/com/android/datetimepicker/date/YearPickerView.java b/uhabits-android/src/main/java/com/android/datetimepicker/date/YearPickerView.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/date/YearPickerView.java rename to uhabits-android/src/main/java/com/android/datetimepicker/date/YearPickerView.java diff --git a/app/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java b/uhabits-android/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java rename to uhabits-android/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java diff --git a/app/src/main/java/com/android/datetimepicker/time/CircleView.java b/uhabits-android/src/main/java/com/android/datetimepicker/time/CircleView.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/time/CircleView.java rename to uhabits-android/src/main/java/com/android/datetimepicker/time/CircleView.java diff --git a/app/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java b/uhabits-android/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java rename to uhabits-android/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java diff --git a/app/src/main/java/com/android/datetimepicker/time/RadialSelectorView.java b/uhabits-android/src/main/java/com/android/datetimepicker/time/RadialSelectorView.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/time/RadialSelectorView.java rename to uhabits-android/src/main/java/com/android/datetimepicker/time/RadialSelectorView.java diff --git a/app/src/main/java/com/android/datetimepicker/time/RadialTextsView.java b/uhabits-android/src/main/java/com/android/datetimepicker/time/RadialTextsView.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/time/RadialTextsView.java rename to uhabits-android/src/main/java/com/android/datetimepicker/time/RadialTextsView.java diff --git a/app/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java b/uhabits-android/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java similarity index 100% rename from app/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java rename to uhabits-android/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java diff --git a/app/src/main/java/org/isoron/uhabits/AppComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/AppComponent.java rename to uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java diff --git a/app/src/main/java/org/isoron/uhabits/AppContext.java b/uhabits-android/src/main/java/org/isoron/uhabits/AppContext.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/AppContext.java rename to uhabits-android/src/main/java/org/isoron/uhabits/AppContext.java diff --git a/app/src/main/java/org/isoron/uhabits/AppModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/AppModule.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/AppModule.java rename to uhabits-android/src/main/java/org/isoron/uhabits/AppModule.java diff --git a/app/src/main/java/org/isoron/uhabits/AppScope.java b/uhabits-android/src/main/java/org/isoron/uhabits/AppScope.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/AppScope.java rename to uhabits-android/src/main/java/org/isoron/uhabits/AppScope.java diff --git a/app/src/main/java/org/isoron/uhabits/HabitLogger.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitLogger.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/HabitLogger.java rename to uhabits-android/src/main/java/org/isoron/uhabits/HabitLogger.java diff --git a/app/src/main/java/org/isoron/uhabits/HabitsApplication.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/HabitsApplication.java rename to uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java diff --git a/app/src/main/java/org/isoron/uhabits/HabitsBackupAgent.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsBackupAgent.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/HabitsBackupAgent.java rename to uhabits-android/src/main/java/org/isoron/uhabits/HabitsBackupAgent.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/ActivityComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityComponent.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/ActivityComponent.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityComponent.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/ActivityContext.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityContext.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/ActivityContext.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityContext.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/ActivityModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityModule.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/ActivityModule.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityModule.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/ActivityScope.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityScope.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/ActivityScope.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityScope.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/BaseActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseActivity.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/BaseActivity.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseActivity.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/BaseExceptionHandler.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseExceptionHandler.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/BaseExceptionHandler.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseExceptionHandler.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/BaseMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseMenu.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/BaseMenu.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseMenu.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/BaseRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseRootView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/BaseRootView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseRootView.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/BaseScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseScreen.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/BaseScreen.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseScreen.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/BaseSelectionMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseSelectionMenu.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/BaseSelectionMenu.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseSelectionMenu.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/BaseSystem.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseSystem.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/BaseSystem.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseSystem.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/about/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/about/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/about/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/views/HabitChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HabitChart.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/views/HabitChart.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HabitChart.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/views/RingView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/RingView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/views/RingView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/RingView.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/views/StreakChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/StreakChart.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/views/StreakChart.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/StreakChart.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/common/views/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/common/views/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialogFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialogFactory.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialogFactory.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialogFactory.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/edit/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ExampleEditText.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ExampleEditText.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ExampleEditText.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ExampleEditText.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/FrequencyPanel.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/FrequencyPanel.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/FrequencyPanel.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/FrequencyPanel.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/TargetPanel.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/TargetPanel.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/TargetPanel.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/TargetPanel.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonController.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonController.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonController.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardController.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardController.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardController.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/NumberButtonController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/NumberButtonController.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/NumberButtonController.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/NumberButtonController.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardViewHolder.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardViewHolder.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardViewHolder.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardViewHolder.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/model/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/model/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCard.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCard.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCard.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/views/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/habits/show/views/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/intro/IntroActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/intro/IntroActivity.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/intro/IntroActivity.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/intro/IntroActivity.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/intro/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/intro/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/intro/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/intro/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java diff --git a/app/src/main/java/org/isoron/uhabits/activities/settings/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/activities/settings/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.java rename to uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.java diff --git a/app/src/main/java/org/isoron/uhabits/automation/EditSettingController.java b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingController.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/automation/EditSettingController.java rename to uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingController.java diff --git a/app/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.java diff --git a/app/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java rename to uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java diff --git a/app/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java rename to uhabits-android/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java diff --git a/app/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java rename to uhabits-android/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java diff --git a/app/src/main/java/org/isoron/uhabits/commands/Command.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/Command.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/commands/Command.java rename to uhabits-android/src/main/java/org/isoron/uhabits/commands/Command.java diff --git a/app/src/main/java/org/isoron/uhabits/commands/CommandParser.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/commands/CommandParser.java rename to uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java diff --git a/app/src/main/java/org/isoron/uhabits/commands/CommandRunner.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandRunner.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/commands/CommandRunner.java rename to uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandRunner.java diff --git a/app/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java rename to uhabits-android/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java diff --git a/app/src/main/java/org/isoron/uhabits/commands/CreateRepetitionCommand.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/CreateRepetitionCommand.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/commands/CreateRepetitionCommand.java rename to uhabits-android/src/main/java/org/isoron/uhabits/commands/CreateRepetitionCommand.java diff --git a/app/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java rename to uhabits-android/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java diff --git a/app/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java rename to uhabits-android/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java diff --git a/app/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java rename to uhabits-android/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java diff --git a/app/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java rename to uhabits-android/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java diff --git a/app/src/main/java/org/isoron/uhabits/commands/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/commands/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/commands/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/intents/IntentFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentFactory.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/intents/IntentFactory.java rename to uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentFactory.java diff --git a/app/src/main/java/org/isoron/uhabits/intents/IntentParser.java b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentParser.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/intents/IntentParser.java rename to uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentParser.java diff --git a/app/src/main/java/org/isoron/uhabits/intents/IntentScheduler.java b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/intents/IntentScheduler.java rename to uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.java diff --git a/app/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java rename to uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java diff --git a/app/src/main/java/org/isoron/uhabits/io/AbstractImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/AbstractImporter.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/io/AbstractImporter.java rename to uhabits-android/src/main/java/org/isoron/uhabits/io/AbstractImporter.java diff --git a/app/src/main/java/org/isoron/uhabits/io/GenericImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/GenericImporter.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/io/GenericImporter.java rename to uhabits-android/src/main/java/org/isoron/uhabits/io/GenericImporter.java diff --git a/app/src/main/java/org/isoron/uhabits/io/HabitBullCSVImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/HabitBullCSVImporter.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/io/HabitBullCSVImporter.java rename to uhabits-android/src/main/java/org/isoron/uhabits/io/HabitBullCSVImporter.java diff --git a/app/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java rename to uhabits-android/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java diff --git a/app/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java rename to uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java diff --git a/app/src/main/java/org/isoron/uhabits/io/RewireDBImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/RewireDBImporter.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/io/RewireDBImporter.java rename to uhabits-android/src/main/java/org/isoron/uhabits/io/RewireDBImporter.java diff --git a/app/src/main/java/org/isoron/uhabits/io/TickmateDBImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/TickmateDBImporter.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/io/TickmateDBImporter.java rename to uhabits-android/src/main/java/org/isoron/uhabits/io/TickmateDBImporter.java diff --git a/app/src/main/java/org/isoron/uhabits/io/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/io/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/io/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/models/Checkmark.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/Checkmark.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/Checkmark.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/Checkmark.java diff --git a/app/src/main/java/org/isoron/uhabits/models/CheckmarkList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/CheckmarkList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/CheckmarkList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/CheckmarkList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/Frequency.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/Frequency.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/Frequency.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/Frequency.java diff --git a/app/src/main/java/org/isoron/uhabits/models/Habit.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/Habit.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/Habit.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/Habit.java diff --git a/app/src/main/java/org/isoron/uhabits/models/HabitList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/HabitList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/HabitList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/HabitList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/HabitMatcher.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/HabitMatcher.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/HabitMatcher.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/HabitMatcher.java diff --git a/app/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java diff --git a/app/src/main/java/org/isoron/uhabits/models/HabitNotFoundException.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/HabitNotFoundException.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/HabitNotFoundException.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/HabitNotFoundException.java diff --git a/app/src/main/java/org/isoron/uhabits/models/ModelFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/ModelFactory.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/ModelFactory.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/ModelFactory.java diff --git a/app/src/main/java/org/isoron/uhabits/models/ModelObservable.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/ModelObservable.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/ModelObservable.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/ModelObservable.java diff --git a/app/src/main/java/org/isoron/uhabits/models/Reminder.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/Reminder.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/Reminder.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/Reminder.java diff --git a/app/src/main/java/org/isoron/uhabits/models/Repetition.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/Repetition.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/Repetition.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/Repetition.java diff --git a/app/src/main/java/org/isoron/uhabits/models/RepetitionList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/RepetitionList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/RepetitionList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/RepetitionList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/Score.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/Score.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/Score.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/Score.java diff --git a/app/src/main/java/org/isoron/uhabits/models/ScoreList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/ScoreList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/ScoreList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/ScoreList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/Streak.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/Streak.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/Streak.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/Streak.java diff --git a/app/src/main/java/org/isoron/uhabits/models/StreakList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/StreakList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/StreakList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/StreakList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/WeekdayList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/WeekdayList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/WeekdayList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/WeekdayList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/memory/MemoryCheckmarkList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryCheckmarkList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/memory/MemoryCheckmarkList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryCheckmarkList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/memory/MemoryModelFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryModelFactory.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/memory/MemoryModelFactory.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryModelFactory.java diff --git a/app/src/main/java/org/isoron/uhabits/models/memory/MemoryRepetitionList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryRepetitionList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/memory/MemoryRepetitionList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryRepetitionList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/memory/MemoryScoreList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryScoreList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/memory/MemoryScoreList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryScoreList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/memory/MemoryStreakList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryStreakList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/memory/MemoryStreakList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryStreakList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/memory/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/memory/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/memory/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/memory/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/models/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/InconsistentDatabaseException.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/InconsistentDatabaseException.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/InconsistentDatabaseException.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/InconsistentDatabaseException.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/InvalidDatabaseVersionException.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/InvalidDatabaseVersionException.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/InvalidDatabaseVersionException.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/InvalidDatabaseVersionException.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLModelFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLModelFactory.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/SQLModelFactory.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLModelFactory.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteScoreList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteScoreList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteScoreList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteScoreList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteStreakList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteStreakList.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteStreakList.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteStreakList.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteUtils.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteUtils.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteUtils.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/records/CheckmarkRecord.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/CheckmarkRecord.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/records/CheckmarkRecord.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/CheckmarkRecord.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/records/HabitRecord.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/HabitRecord.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/records/HabitRecord.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/HabitRecord.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/records/RepetitionRecord.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/RepetitionRecord.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/records/RepetitionRecord.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/RepetitionRecord.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/records/SQLiteRecord.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/SQLiteRecord.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/records/SQLiteRecord.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/SQLiteRecord.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/records/ScoreRecord.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/ScoreRecord.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/records/ScoreRecord.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/ScoreRecord.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/records/StreakRecord.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/StreakRecord.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/records/StreakRecord.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/StreakRecord.java diff --git a/app/src/main/java/org/isoron/uhabits/models/sqlite/records/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/models/sqlite/records/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java rename to uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java diff --git a/app/src/main/java/org/isoron/uhabits/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/preferences/Preferences.java b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/Preferences.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/preferences/Preferences.java rename to uhabits-android/src/main/java/org/isoron/uhabits/preferences/Preferences.java diff --git a/app/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java rename to uhabits-android/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java diff --git a/app/src/main/java/org/isoron/uhabits/receivers/ConnectivityReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ConnectivityReceiver.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/receivers/ConnectivityReceiver.java rename to uhabits-android/src/main/java/org/isoron/uhabits/receivers/ConnectivityReceiver.java diff --git a/app/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java rename to uhabits-android/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java diff --git a/app/src/main/java/org/isoron/uhabits/receivers/ReceiverScope.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReceiverScope.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/receivers/ReceiverScope.java rename to uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReceiverScope.java diff --git a/app/src/main/java/org/isoron/uhabits/receivers/ReminderController.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/receivers/ReminderController.java rename to uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java diff --git a/app/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java rename to uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java diff --git a/app/src/main/java/org/isoron/uhabits/receivers/WidgetController.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetController.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/receivers/WidgetController.java rename to uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetController.java diff --git a/app/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java rename to uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java diff --git a/app/src/main/java/org/isoron/uhabits/sync/Event.java b/uhabits-android/src/main/java/org/isoron/uhabits/sync/Event.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/sync/Event.java rename to uhabits-android/src/main/java/org/isoron/uhabits/sync/Event.java diff --git a/app/src/main/java/org/isoron/uhabits/sync/SyncManager.java b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/sync/SyncManager.java rename to uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java diff --git a/app/src/main/java/org/isoron/uhabits/sync/SyncService.java b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncService.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/sync/SyncService.java rename to uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncService.java diff --git a/app/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java diff --git a/app/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java diff --git a/app/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java diff --git a/app/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java diff --git a/app/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java diff --git a/app/src/main/java/org/isoron/uhabits/tasks/Task.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/Task.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/tasks/Task.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/Task.java diff --git a/app/src/main/java/org/isoron/uhabits/tasks/TaskRunner.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/TaskRunner.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/tasks/TaskRunner.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/TaskRunner.java diff --git a/app/src/main/java/org/isoron/uhabits/tasks/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/tasks/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/utils/AttributeSetUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/AttributeSetUtils.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/utils/AttributeSetUtils.java rename to uhabits-android/src/main/java/org/isoron/uhabits/utils/AttributeSetUtils.java diff --git a/app/src/main/java/org/isoron/uhabits/utils/ColorUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ColorUtils.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/utils/ColorUtils.java rename to uhabits-android/src/main/java/org/isoron/uhabits/utils/ColorUtils.java diff --git a/app/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java rename to uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java diff --git a/app/src/main/java/org/isoron/uhabits/utils/DateFormats.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DateFormats.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/utils/DateFormats.java rename to uhabits-android/src/main/java/org/isoron/uhabits/utils/DateFormats.java diff --git a/app/src/main/java/org/isoron/uhabits/utils/DateUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DateUtils.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/utils/DateUtils.java rename to uhabits-android/src/main/java/org/isoron/uhabits/utils/DateUtils.java diff --git a/app/src/main/java/org/isoron/uhabits/utils/FileUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/FileUtils.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/utils/FileUtils.java rename to uhabits-android/src/main/java/org/isoron/uhabits/utils/FileUtils.java diff --git a/app/src/main/java/org/isoron/uhabits/utils/InterfaceUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/InterfaceUtils.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/utils/InterfaceUtils.java rename to uhabits-android/src/main/java/org/isoron/uhabits/utils/InterfaceUtils.java diff --git a/app/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java rename to uhabits-android/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java diff --git a/app/src/main/java/org/isoron/uhabits/utils/ReminderScheduler.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ReminderScheduler.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/utils/ReminderScheduler.java rename to uhabits-android/src/main/java/org/isoron/uhabits/utils/ReminderScheduler.java diff --git a/app/src/main/java/org/isoron/uhabits/utils/RingtoneUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/RingtoneUtils.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/utils/RingtoneUtils.java rename to uhabits-android/src/main/java/org/isoron/uhabits/utils/RingtoneUtils.java diff --git a/app/src/main/java/org/isoron/uhabits/utils/SSLUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/SSLUtils.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/utils/SSLUtils.java rename to uhabits-android/src/main/java/org/isoron/uhabits/utils/SSLUtils.java diff --git a/app/src/main/java/org/isoron/uhabits/utils/StyledResources.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/StyledResources.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/utils/StyledResources.java rename to uhabits-android/src/main/java/org/isoron/uhabits/utils/StyledResources.java diff --git a/app/src/main/java/org/isoron/uhabits/utils/WidgetUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/WidgetUtils.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/utils/WidgetUtils.java rename to uhabits-android/src/main/java/org/isoron/uhabits/utils/WidgetUtils.java diff --git a/app/src/main/java/org/isoron/uhabits/utils/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/utils/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/utils/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/BaseWidget.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidget.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/BaseWidget.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidget.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/StreakWidget.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidget.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/StreakWidget.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidget.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/WidgetDimensions.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetDimensions.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/WidgetDimensions.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetDimensions.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/package-info.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/views/GraphWidgetView.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/GraphWidgetView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/views/GraphWidgetView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/GraphWidgetView.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/views/HabitWidgetView.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/HabitWidgetView.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/views/HabitWidgetView.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/HabitWidgetView.java diff --git a/app/src/main/java/org/isoron/uhabits/widgets/views/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/package-info.java similarity index 100% rename from app/src/main/java/org/isoron/uhabits/widgets/views/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/package-info.java diff --git a/app/src/main/res/color/date_picker_selector.xml b/uhabits-android/src/main/res/color/date_picker_selector.xml similarity index 100% rename from app/src/main/res/color/date_picker_selector.xml rename to uhabits-android/src/main/res/color/date_picker_selector.xml diff --git a/app/src/main/res/color/date_picker_year_selector.xml b/uhabits-android/src/main/res/color/date_picker_year_selector.xml similarity index 100% rename from app/src/main/res/color/date_picker_year_selector.xml rename to uhabits-android/src/main/res/color/date_picker_year_selector.xml diff --git a/app/src/main/res/drawable-hdpi/ic_action_add_dark.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_add_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_add_dark.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_add_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_add_light.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_add_light.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_add_light.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_add_light.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_archive_dark.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_archive_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_archive_dark.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_archive_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_archive_light.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_archive_light.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_archive_light.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_archive_light.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_check.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_check.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_check.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_check.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_color_dark.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_color_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_color_dark.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_color_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_color_light.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_color_light.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_color_light.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_color_light.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_download_dark.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_download_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_download_dark.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_download_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_download_light.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_download_light.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_download_light.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_download_light.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_edit_dark.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_edit_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_edit_dark.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_edit_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_edit_light.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_edit_light.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_edit_light.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_edit_light.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_filter_dark.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_filter_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_filter_dark.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_filter_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_filter_light.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_filter_light.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_filter_light.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_filter_light.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_snooze.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_snooze.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_snooze.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_snooze.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_unarchive_dark.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_unarchive_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_unarchive_dark.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_unarchive_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_unarchive_light.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_unarchive_light.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_unarchive_light.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_action_unarchive_light.png diff --git a/app/src/main/res/drawable-hdpi/ic_alarm_black.png b/uhabits-android/src/main/res/drawable-hdpi/ic_alarm_black.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_alarm_black.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_alarm_black.png diff --git a/app/src/main/res/drawable-hdpi/ic_alarm_white.png b/uhabits-android/src/main/res/drawable-hdpi/ic_alarm_white.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_alarm_white.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_alarm_white.png diff --git a/app/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png b/uhabits-android/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png diff --git a/app/src/main/res/drawable-hdpi/ic_notification.png b/uhabits-android/src/main/res/drawable-hdpi/ic_notification.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_notification.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_notification.png diff --git a/app/src/main/res/drawable-hdpi/ic_repeat_black.png b/uhabits-android/src/main/res/drawable-hdpi/ic_repeat_black.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_repeat_black.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_repeat_black.png diff --git a/app/src/main/res/drawable-hdpi/ic_repeat_white.png b/uhabits-android/src/main/res/drawable-hdpi/ic_repeat_white.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_repeat_white.png rename to uhabits-android/src/main/res/drawable-hdpi/ic_repeat_white.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_add_dark.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_add_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_add_dark.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_add_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_add_light.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_add_light.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_add_light.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_add_light.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_archive_dark.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_archive_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_archive_dark.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_archive_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_archive_light.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_archive_light.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_archive_light.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_archive_light.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_check.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_check.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_check.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_check.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_color_dark.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_color_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_color_dark.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_color_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_color_light.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_color_light.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_color_light.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_color_light.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_download_dark.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_download_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_download_dark.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_download_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_download_light.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_download_light.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_download_light.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_download_light.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_edit_dark.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_edit_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_edit_dark.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_edit_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_edit_light.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_edit_light.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_edit_light.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_edit_light.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_filter_dark.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_filter_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_filter_dark.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_filter_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_filter_light.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_filter_light.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_filter_light.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_filter_light.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_snooze.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_snooze.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_snooze.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_snooze.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_unarchive_dark.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_unarchive_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_unarchive_dark.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_unarchive_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_unarchive_light.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_unarchive_light.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_unarchive_light.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_action_unarchive_light.png diff --git a/app/src/main/res/drawable-mdpi/ic_alarm_black.png b/uhabits-android/src/main/res/drawable-mdpi/ic_alarm_black.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_alarm_black.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_alarm_black.png diff --git a/app/src/main/res/drawable-mdpi/ic_alarm_white.png b/uhabits-android/src/main/res/drawable-mdpi/ic_alarm_white.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_alarm_white.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_alarm_white.png diff --git a/app/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png b/uhabits-android/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png diff --git a/app/src/main/res/drawable-mdpi/ic_notification.png b/uhabits-android/src/main/res/drawable-mdpi/ic_notification.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_notification.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_notification.png diff --git a/app/src/main/res/drawable-mdpi/ic_repeat_black.png b/uhabits-android/src/main/res/drawable-mdpi/ic_repeat_black.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_repeat_black.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_repeat_black.png diff --git a/app/src/main/res/drawable-mdpi/ic_repeat_white.png b/uhabits-android/src/main/res/drawable-mdpi/ic_repeat_white.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_repeat_white.png rename to uhabits-android/src/main/res/drawable-mdpi/ic_repeat_white.png diff --git a/app/src/main/res/drawable-nodpi/widget_preview_checkmark.png b/uhabits-android/src/main/res/drawable-nodpi/widget_preview_checkmark.png similarity index 100% rename from app/src/main/res/drawable-nodpi/widget_preview_checkmark.png rename to uhabits-android/src/main/res/drawable-nodpi/widget_preview_checkmark.png diff --git a/app/src/main/res/drawable-nodpi/widget_preview_frequency.png b/uhabits-android/src/main/res/drawable-nodpi/widget_preview_frequency.png similarity index 100% rename from app/src/main/res/drawable-nodpi/widget_preview_frequency.png rename to uhabits-android/src/main/res/drawable-nodpi/widget_preview_frequency.png diff --git a/app/src/main/res/drawable-nodpi/widget_preview_history.png b/uhabits-android/src/main/res/drawable-nodpi/widget_preview_history.png similarity index 100% rename from app/src/main/res/drawable-nodpi/widget_preview_history.png rename to uhabits-android/src/main/res/drawable-nodpi/widget_preview_history.png diff --git a/app/src/main/res/drawable-nodpi/widget_preview_score.png b/uhabits-android/src/main/res/drawable-nodpi/widget_preview_score.png similarity index 100% rename from app/src/main/res/drawable-nodpi/widget_preview_score.png rename to uhabits-android/src/main/res/drawable-nodpi/widget_preview_score.png diff --git a/app/src/main/res/drawable-nodpi/widget_preview_streaks.png b/uhabits-android/src/main/res/drawable-nodpi/widget_preview_streaks.png similarity index 100% rename from app/src/main/res/drawable-nodpi/widget_preview_streaks.png rename to uhabits-android/src/main/res/drawable-nodpi/widget_preview_streaks.png diff --git a/app/src/main/res/drawable-v21/ripple.xml b/uhabits-android/src/main/res/drawable-v21/ripple.xml similarity index 100% rename from app/src/main/res/drawable-v21/ripple.xml rename to uhabits-android/src/main/res/drawable-v21/ripple.xml diff --git a/app/src/main/res/drawable-v21/ripple_transparent.xml b/uhabits-android/src/main/res/drawable-v21/ripple_transparent.xml similarity index 100% rename from app/src/main/res/drawable-v21/ripple_transparent.xml rename to uhabits-android/src/main/res/drawable-v21/ripple_transparent.xml diff --git a/app/src/main/res/drawable-v21/selected_box.xml b/uhabits-android/src/main/res/drawable-v21/selected_box.xml similarity index 100% rename from app/src/main/res/drawable-v21/selected_box.xml rename to uhabits-android/src/main/res/drawable-v21/selected_box.xml diff --git a/app/src/main/res/drawable-v21/widget_button_background.xml b/uhabits-android/src/main/res/drawable-v21/widget_button_background.xml similarity index 100% rename from app/src/main/res/drawable-v21/widget_button_background.xml rename to uhabits-android/src/main/res/drawable-v21/widget_button_background.xml diff --git a/app/src/main/res/drawable-xhdpi/ic_action_add_dark.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_add_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_add_dark.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_add_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_add_light.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_add_light.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_add_light.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_add_light.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_archive_dark.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_archive_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_archive_dark.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_archive_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_archive_light.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_archive_light.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_archive_light.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_archive_light.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_check.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_check.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_check.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_check.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_color_dark.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_color_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_color_dark.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_color_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_color_light.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_color_light.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_color_light.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_color_light.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_download_dark.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_download_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_download_dark.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_download_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_download_light.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_download_light.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_download_light.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_download_light.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_edit_dark.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_edit_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_edit_dark.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_edit_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_edit_light.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_edit_light.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_edit_light.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_edit_light.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_filter_dark.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_filter_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_filter_dark.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_filter_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_filter_light.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_filter_light.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_filter_light.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_filter_light.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_snooze.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_snooze.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_snooze.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_snooze.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_unarchive_dark.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_unarchive_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_unarchive_dark.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_unarchive_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_unarchive_light.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_unarchive_light.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_unarchive_light.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_action_unarchive_light.png diff --git a/app/src/main/res/drawable-xhdpi/ic_alarm_black.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_alarm_black.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_alarm_black.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_alarm_black.png diff --git a/app/src/main/res/drawable-xhdpi/ic_alarm_white.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_alarm_white.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_alarm_white.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_alarm_white.png diff --git a/app/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png diff --git a/app/src/main/res/drawable-xhdpi/ic_notification.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_notification.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_notification.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_notification.png diff --git a/app/src/main/res/drawable-xhdpi/ic_repeat_black.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_repeat_black.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_repeat_black.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_repeat_black.png diff --git a/app/src/main/res/drawable-xhdpi/ic_repeat_white.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_repeat_white.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_repeat_white.png rename to uhabits-android/src/main/res/drawable-xhdpi/ic_repeat_white.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_add_dark.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_add_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_add_dark.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_add_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_add_light.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_add_light.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_add_light.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_add_light.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_archive_dark.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_archive_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_archive_dark.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_archive_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_archive_light.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_archive_light.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_archive_light.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_archive_light.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_check.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_check.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_check.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_check.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_color_dark.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_color_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_color_dark.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_color_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_color_light.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_color_light.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_color_light.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_color_light.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_download_dark.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_download_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_download_dark.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_download_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_download_light.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_download_light.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_download_light.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_download_light.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_edit_dark.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_edit_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_edit_dark.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_edit_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_edit_light.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_edit_light.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_edit_light.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_edit_light.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_filter_dark.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_filter_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_filter_dark.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_filter_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_filter_light.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_filter_light.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_filter_light.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_filter_light.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_snooze.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_snooze.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_snooze.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_snooze.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_unarchive_dark.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_unarchive_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_unarchive_dark.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_unarchive_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_unarchive_light.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_unarchive_light.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_unarchive_light.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_action_unarchive_light.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_alarm_black.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_alarm_black.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_alarm_black.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_alarm_black.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_alarm_white.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_alarm_white.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_alarm_white.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_alarm_white.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_notification.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_notification.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_notification.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_notification.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_repeat_black.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_repeat_black.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_repeat_black.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_repeat_black.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_repeat_white.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_repeat_white.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_repeat_white.png rename to uhabits-android/src/main/res/drawable-xxhdpi/ic_repeat_white.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_add_light.png b/uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_add_light.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/ic_action_add_light.png rename to uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_add_light.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_filter_dark.png b/uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_filter_dark.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/ic_action_filter_dark.png rename to uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_filter_dark.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_filter_light.png b/uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_filter_light.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/ic_action_filter_light.png rename to uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_filter_light.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_alarm_black.png b/uhabits-android/src/main/res/drawable-xxxhdpi/ic_alarm_black.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/ic_alarm_black.png rename to uhabits-android/src/main/res/drawable-xxxhdpi/ic_alarm_black.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_alarm_white.png b/uhabits-android/src/main/res/drawable-xxxhdpi/ic_alarm_white.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/ic_alarm_white.png rename to uhabits-android/src/main/res/drawable-xxxhdpi/ic_alarm_white.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_repeat_black.png b/uhabits-android/src/main/res/drawable-xxxhdpi/ic_repeat_black.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/ic_repeat_black.png rename to uhabits-android/src/main/res/drawable-xxxhdpi/ic_repeat_black.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_repeat_white.png b/uhabits-android/src/main/res/drawable-xxxhdpi/ic_repeat_white.png similarity index 100% rename from app/src/main/res/drawable-xxxhdpi/ic_repeat_white.png rename to uhabits-android/src/main/res/drawable-xxxhdpi/ic_repeat_white.png diff --git a/app/src/main/res/drawable/card_amoled_background.xml b/uhabits-android/src/main/res/drawable/card_amoled_background.xml similarity index 100% rename from app/src/main/res/drawable/card_amoled_background.xml rename to uhabits-android/src/main/res/drawable/card_amoled_background.xml diff --git a/app/src/main/res/drawable/card_dark_background.xml b/uhabits-android/src/main/res/drawable/card_dark_background.xml similarity index 100% rename from app/src/main/res/drawable/card_dark_background.xml rename to uhabits-android/src/main/res/drawable/card_dark_background.xml diff --git a/app/src/main/res/drawable/card_light_background.xml b/uhabits-android/src/main/res/drawable/card_light_background.xml similarity index 100% rename from app/src/main/res/drawable/card_light_background.xml rename to uhabits-android/src/main/res/drawable/card_light_background.xml diff --git a/app/src/main/res/drawable/color_picker_swatch.xml b/uhabits-android/src/main/res/drawable/color_picker_swatch.xml similarity index 100% rename from app/src/main/res/drawable/color_picker_swatch.xml rename to uhabits-android/src/main/res/drawable/color_picker_swatch.xml diff --git a/app/src/main/res/drawable/done_background_color.xml b/uhabits-android/src/main/res/drawable/done_background_color.xml similarity index 100% rename from app/src/main/res/drawable/done_background_color.xml rename to uhabits-android/src/main/res/drawable/done_background_color.xml diff --git a/app/src/main/res/drawable/done_background_color_dark.xml b/uhabits-android/src/main/res/drawable/done_background_color_dark.xml similarity index 100% rename from app/src/main/res/drawable/done_background_color_dark.xml rename to uhabits-android/src/main/res/drawable/done_background_color_dark.xml diff --git a/app/src/main/res/drawable/intro_icon_1.png b/uhabits-android/src/main/res/drawable/intro_icon_1.png similarity index 100% rename from app/src/main/res/drawable/intro_icon_1.png rename to uhabits-android/src/main/res/drawable/intro_icon_1.png diff --git a/app/src/main/res/drawable/intro_icon_2.png b/uhabits-android/src/main/res/drawable/intro_icon_2.png similarity index 100% rename from app/src/main/res/drawable/intro_icon_2.png rename to uhabits-android/src/main/res/drawable/intro_icon_2.png diff --git a/app/src/main/res/drawable/intro_icon_4.png b/uhabits-android/src/main/res/drawable/intro_icon_4.png similarity index 100% rename from app/src/main/res/drawable/intro_icon_4.png rename to uhabits-android/src/main/res/drawable/intro_icon_4.png diff --git a/app/src/main/res/drawable/selected_box_amoled.xml b/uhabits-android/src/main/res/drawable/selected_box_amoled.xml similarity index 100% rename from app/src/main/res/drawable/selected_box_amoled.xml rename to uhabits-android/src/main/res/drawable/selected_box_amoled.xml diff --git a/app/src/main/res/drawable/selected_box_dark.xml b/uhabits-android/src/main/res/drawable/selected_box_dark.xml similarity index 100% rename from app/src/main/res/drawable/selected_box_dark.xml rename to uhabits-android/src/main/res/drawable/selected_box_dark.xml diff --git a/app/src/main/res/drawable/selected_box_light.xml b/uhabits-android/src/main/res/drawable/selected_box_light.xml similarity index 100% rename from app/src/main/res/drawable/selected_box_light.xml rename to uhabits-android/src/main/res/drawable/selected_box_light.xml diff --git a/app/src/main/res/drawable/stripe.png b/uhabits-android/src/main/res/drawable/stripe.png similarity index 100% rename from app/src/main/res/drawable/stripe.png rename to uhabits-android/src/main/res/drawable/stripe.png diff --git a/app/src/main/res/drawable/toolbar_shadow.xml b/uhabits-android/src/main/res/drawable/toolbar_shadow.xml similarity index 100% rename from app/src/main/res/drawable/toolbar_shadow.xml rename to uhabits-android/src/main/res/drawable/toolbar_shadow.xml diff --git a/app/src/main/res/drawable/widget_background.xml b/uhabits-android/src/main/res/drawable/widget_background.xml similarity index 100% rename from app/src/main/res/drawable/widget_background.xml rename to uhabits-android/src/main/res/drawable/widget_background.xml diff --git a/app/src/main/res/drawable/widget_button_background.xml b/uhabits-android/src/main/res/drawable/widget_button_background.xml similarity index 100% rename from app/src/main/res/drawable/widget_button_background.xml rename to uhabits-android/src/main/res/drawable/widget_button_background.xml diff --git a/app/src/main/res/layout/about.xml b/uhabits-android/src/main/res/layout/about.xml similarity index 100% rename from app/src/main/res/layout/about.xml rename to uhabits-android/src/main/res/layout/about.xml diff --git a/app/src/main/res/layout/automation.xml b/uhabits-android/src/main/res/layout/automation.xml similarity index 100% rename from app/src/main/res/layout/automation.xml rename to uhabits-android/src/main/res/layout/automation.xml diff --git a/app/src/main/res/layout/color_picker_dialog.xml b/uhabits-android/src/main/res/layout/color_picker_dialog.xml similarity index 100% rename from app/src/main/res/layout/color_picker_dialog.xml rename to uhabits-android/src/main/res/layout/color_picker_dialog.xml diff --git a/app/src/main/res/layout/color_picker_swatch.xml b/uhabits-android/src/main/res/layout/color_picker_swatch.xml similarity index 100% rename from app/src/main/res/layout/color_picker_swatch.xml rename to uhabits-android/src/main/res/layout/color_picker_swatch.xml diff --git a/app/src/main/res/layout/date_picker_dialog.xml b/uhabits-android/src/main/res/layout/date_picker_dialog.xml similarity index 100% rename from app/src/main/res/layout/date_picker_dialog.xml rename to uhabits-android/src/main/res/layout/date_picker_dialog.xml diff --git a/app/src/main/res/layout/date_picker_done_button.xml b/uhabits-android/src/main/res/layout/date_picker_done_button.xml similarity index 100% rename from app/src/main/res/layout/date_picker_done_button.xml rename to uhabits-android/src/main/res/layout/date_picker_done_button.xml diff --git a/app/src/main/res/layout/date_picker_header_view.xml b/uhabits-android/src/main/res/layout/date_picker_header_view.xml similarity index 100% rename from app/src/main/res/layout/date_picker_header_view.xml rename to uhabits-android/src/main/res/layout/date_picker_header_view.xml diff --git a/app/src/main/res/layout/date_picker_selected_date.xml b/uhabits-android/src/main/res/layout/date_picker_selected_date.xml similarity index 100% rename from app/src/main/res/layout/date_picker_selected_date.xml rename to uhabits-android/src/main/res/layout/date_picker_selected_date.xml diff --git a/app/src/main/res/layout/date_picker_view_animator.xml b/uhabits-android/src/main/res/layout/date_picker_view_animator.xml similarity index 100% rename from app/src/main/res/layout/date_picker_view_animator.xml rename to uhabits-android/src/main/res/layout/date_picker_view_animator.xml diff --git a/app/src/main/res/layout/edit_habit.xml b/uhabits-android/src/main/res/layout/edit_habit.xml similarity index 100% rename from app/src/main/res/layout/edit_habit.xml rename to uhabits-android/src/main/res/layout/edit_habit.xml diff --git a/app/src/main/res/layout/edit_habit_frequency.xml b/uhabits-android/src/main/res/layout/edit_habit_frequency.xml similarity index 100% rename from app/src/main/res/layout/edit_habit_frequency.xml rename to uhabits-android/src/main/res/layout/edit_habit_frequency.xml diff --git a/app/src/main/res/layout/edit_habit_name.xml b/uhabits-android/src/main/res/layout/edit_habit_name.xml similarity index 100% rename from app/src/main/res/layout/edit_habit_name.xml rename to uhabits-android/src/main/res/layout/edit_habit_name.xml diff --git a/app/src/main/res/layout/edit_habit_reminder.xml b/uhabits-android/src/main/res/layout/edit_habit_reminder.xml similarity index 100% rename from app/src/main/res/layout/edit_habit_reminder.xml rename to uhabits-android/src/main/res/layout/edit_habit_reminder.xml diff --git a/app/src/main/res/layout/edit_habit_target.xml b/uhabits-android/src/main/res/layout/edit_habit_target.xml similarity index 100% rename from app/src/main/res/layout/edit_habit_target.xml rename to uhabits-android/src/main/res/layout/edit_habit_target.xml diff --git a/app/src/main/res/layout/filter.xml b/uhabits-android/src/main/res/layout/filter.xml similarity index 100% rename from app/src/main/res/layout/filter.xml rename to uhabits-android/src/main/res/layout/filter.xml diff --git a/app/src/main/res/layout/list_habits.xml b/uhabits-android/src/main/res/layout/list_habits.xml similarity index 100% rename from app/src/main/res/layout/list_habits.xml rename to uhabits-android/src/main/res/layout/list_habits.xml diff --git a/app/src/main/res/layout/list_habits_button_preview.xml b/uhabits-android/src/main/res/layout/list_habits_button_preview.xml similarity index 100% rename from app/src/main/res/layout/list_habits_button_preview.xml rename to uhabits-android/src/main/res/layout/list_habits_button_preview.xml diff --git a/app/src/main/res/layout/list_habits_hint.xml b/uhabits-android/src/main/res/layout/list_habits_hint.xml similarity index 100% rename from app/src/main/res/layout/list_habits_hint.xml rename to uhabits-android/src/main/res/layout/list_habits_hint.xml diff --git a/app/src/main/res/layout/list_habits_panel_preview.xml b/uhabits-android/src/main/res/layout/list_habits_panel_preview.xml similarity index 100% rename from app/src/main/res/layout/list_habits_panel_preview.xml rename to uhabits-android/src/main/res/layout/list_habits_panel_preview.xml diff --git a/app/src/main/res/layout/list_habits_preview.xml b/uhabits-android/src/main/res/layout/list_habits_preview.xml similarity index 100% rename from app/src/main/res/layout/list_habits_preview.xml rename to uhabits-android/src/main/res/layout/list_habits_preview.xml diff --git a/app/src/main/res/layout/number_picker_dialog.xml b/uhabits-android/src/main/res/layout/number_picker_dialog.xml similarity index 100% rename from app/src/main/res/layout/number_picker_dialog.xml rename to uhabits-android/src/main/res/layout/number_picker_dialog.xml diff --git a/app/src/main/res/layout/preference_category_custom.xml b/uhabits-android/src/main/res/layout/preference_category_custom.xml similarity index 100% rename from app/src/main/res/layout/preference_category_custom.xml rename to uhabits-android/src/main/res/layout/preference_category_custom.xml diff --git a/app/src/main/res/layout/settings_activity.xml b/uhabits-android/src/main/res/layout/settings_activity.xml similarity index 100% rename from app/src/main/res/layout/settings_activity.xml rename to uhabits-android/src/main/res/layout/settings_activity.xml diff --git a/app/src/main/res/layout/show_habit.xml b/uhabits-android/src/main/res/layout/show_habit.xml similarity index 100% rename from app/src/main/res/layout/show_habit.xml rename to uhabits-android/src/main/res/layout/show_habit.xml diff --git a/app/src/main/res/layout/show_habit_bar.xml b/uhabits-android/src/main/res/layout/show_habit_bar.xml similarity index 100% rename from app/src/main/res/layout/show_habit_bar.xml rename to uhabits-android/src/main/res/layout/show_habit_bar.xml diff --git a/app/src/main/res/layout/show_habit_frequency.xml b/uhabits-android/src/main/res/layout/show_habit_frequency.xml similarity index 100% rename from app/src/main/res/layout/show_habit_frequency.xml rename to uhabits-android/src/main/res/layout/show_habit_frequency.xml diff --git a/app/src/main/res/layout/show_habit_history.xml b/uhabits-android/src/main/res/layout/show_habit_history.xml similarity index 100% rename from app/src/main/res/layout/show_habit_history.xml rename to uhabits-android/src/main/res/layout/show_habit_history.xml diff --git a/app/src/main/res/layout/show_habit_inner.xml b/uhabits-android/src/main/res/layout/show_habit_inner.xml similarity index 100% rename from app/src/main/res/layout/show_habit_inner.xml rename to uhabits-android/src/main/res/layout/show_habit_inner.xml diff --git a/app/src/main/res/layout/show_habit_overview.xml b/uhabits-android/src/main/res/layout/show_habit_overview.xml similarity index 100% rename from app/src/main/res/layout/show_habit_overview.xml rename to uhabits-android/src/main/res/layout/show_habit_overview.xml diff --git a/app/src/main/res/layout/show_habit_preview.xml b/uhabits-android/src/main/res/layout/show_habit_preview.xml similarity index 100% rename from app/src/main/res/layout/show_habit_preview.xml rename to uhabits-android/src/main/res/layout/show_habit_preview.xml diff --git a/app/src/main/res/layout/show_habit_score.xml b/uhabits-android/src/main/res/layout/show_habit_score.xml similarity index 100% rename from app/src/main/res/layout/show_habit_score.xml rename to uhabits-android/src/main/res/layout/show_habit_score.xml diff --git a/app/src/main/res/layout/show_habit_streak.xml b/uhabits-android/src/main/res/layout/show_habit_streak.xml similarity index 100% rename from app/src/main/res/layout/show_habit_streak.xml rename to uhabits-android/src/main/res/layout/show_habit_streak.xml diff --git a/app/src/main/res/layout/show_habit_subtitle.xml b/uhabits-android/src/main/res/layout/show_habit_subtitle.xml similarity index 100% rename from app/src/main/res/layout/show_habit_subtitle.xml rename to uhabits-android/src/main/res/layout/show_habit_subtitle.xml diff --git a/app/src/main/res/layout/time_header_label.xml b/uhabits-android/src/main/res/layout/time_header_label.xml similarity index 100% rename from app/src/main/res/layout/time_header_label.xml rename to uhabits-android/src/main/res/layout/time_header_label.xml diff --git a/app/src/main/res/layout/time_picker_dialog.xml b/uhabits-android/src/main/res/layout/time_picker_dialog.xml similarity index 100% rename from app/src/main/res/layout/time_picker_dialog.xml rename to uhabits-android/src/main/res/layout/time_picker_dialog.xml diff --git a/app/src/main/res/layout/widget_checkmark.xml b/uhabits-android/src/main/res/layout/widget_checkmark.xml similarity index 100% rename from app/src/main/res/layout/widget_checkmark.xml rename to uhabits-android/src/main/res/layout/widget_checkmark.xml diff --git a/app/src/main/res/layout/widget_configure_activity.xml b/uhabits-android/src/main/res/layout/widget_configure_activity.xml similarity index 100% rename from app/src/main/res/layout/widget_configure_activity.xml rename to uhabits-android/src/main/res/layout/widget_configure_activity.xml diff --git a/app/src/main/res/layout/widget_error.xml b/uhabits-android/src/main/res/layout/widget_error.xml similarity index 100% rename from app/src/main/res/layout/widget_error.xml rename to uhabits-android/src/main/res/layout/widget_error.xml diff --git a/app/src/main/res/layout/widget_graph.xml b/uhabits-android/src/main/res/layout/widget_graph.xml similarity index 100% rename from app/src/main/res/layout/widget_graph.xml rename to uhabits-android/src/main/res/layout/widget_graph.xml diff --git a/app/src/main/res/layout/widget_wrapper.xml b/uhabits-android/src/main/res/layout/widget_wrapper.xml similarity index 100% rename from app/src/main/res/layout/widget_wrapper.xml rename to uhabits-android/src/main/res/layout/widget_wrapper.xml diff --git a/app/src/main/res/layout/year_label_text_view.xml b/uhabits-android/src/main/res/layout/year_label_text_view.xml similarity index 100% rename from app/src/main/res/layout/year_label_text_view.xml rename to uhabits-android/src/main/res/layout/year_label_text_view.xml diff --git a/app/src/main/res/menu/list_habits.xml b/uhabits-android/src/main/res/menu/list_habits.xml similarity index 100% rename from app/src/main/res/menu/list_habits.xml rename to uhabits-android/src/main/res/menu/list_habits.xml diff --git a/app/src/main/res/menu/list_habits_selection.xml b/uhabits-android/src/main/res/menu/list_habits_selection.xml similarity index 100% rename from app/src/main/res/menu/list_habits_selection.xml rename to uhabits-android/src/main/res/menu/list_habits_selection.xml diff --git a/app/src/main/res/menu/show_habit.xml b/uhabits-android/src/main/res/menu/show_habit.xml similarity index 100% rename from app/src/main/res/menu/show_habit.xml rename to uhabits-android/src/main/res/menu/show_habit.xml diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/uhabits-android/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-mdpi/ic_launcher.png rename to uhabits-android/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/uhabits-android/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to uhabits-android/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/app/src/main/res/values-af/strings.xml b/uhabits-android/src/main/res/values-af/strings.xml similarity index 100% rename from app/src/main/res/values-af/strings.xml rename to uhabits-android/src/main/res/values-af/strings.xml diff --git a/app/src/main/res/values-ar/strings.xml b/uhabits-android/src/main/res/values-ar/strings.xml similarity index 100% rename from app/src/main/res/values-ar/strings.xml rename to uhabits-android/src/main/res/values-ar/strings.xml diff --git a/app/src/main/res/values-bg/strings.xml b/uhabits-android/src/main/res/values-bg/strings.xml similarity index 100% rename from app/src/main/res/values-bg/strings.xml rename to uhabits-android/src/main/res/values-bg/strings.xml diff --git a/app/src/main/res/values-ca/strings.xml b/uhabits-android/src/main/res/values-ca/strings.xml similarity index 100% rename from app/src/main/res/values-ca/strings.xml rename to uhabits-android/src/main/res/values-ca/strings.xml diff --git a/app/src/main/res/values-cs/strings.xml b/uhabits-android/src/main/res/values-cs/strings.xml similarity index 100% rename from app/src/main/res/values-cs/strings.xml rename to uhabits-android/src/main/res/values-cs/strings.xml diff --git a/app/src/main/res/values-da/strings.xml b/uhabits-android/src/main/res/values-da/strings.xml similarity index 100% rename from app/src/main/res/values-da/strings.xml rename to uhabits-android/src/main/res/values-da/strings.xml diff --git a/app/src/main/res/values-de/strings.xml b/uhabits-android/src/main/res/values-de/strings.xml similarity index 100% rename from app/src/main/res/values-de/strings.xml rename to uhabits-android/src/main/res/values-de/strings.xml diff --git a/app/src/main/res/values-el/strings.xml b/uhabits-android/src/main/res/values-el/strings.xml similarity index 100% rename from app/src/main/res/values-el/strings.xml rename to uhabits-android/src/main/res/values-el/strings.xml diff --git a/app/src/main/res/values-eo/strings.xml b/uhabits-android/src/main/res/values-eo/strings.xml similarity index 100% rename from app/src/main/res/values-eo/strings.xml rename to uhabits-android/src/main/res/values-eo/strings.xml diff --git a/app/src/main/res/values-es/strings.xml b/uhabits-android/src/main/res/values-es/strings.xml similarity index 100% rename from app/src/main/res/values-es/strings.xml rename to uhabits-android/src/main/res/values-es/strings.xml diff --git a/app/src/main/res/values-eu/strings.xml b/uhabits-android/src/main/res/values-eu/strings.xml similarity index 100% rename from app/src/main/res/values-eu/strings.xml rename to uhabits-android/src/main/res/values-eu/strings.xml diff --git a/app/src/main/res/values-fa/strings.xml b/uhabits-android/src/main/res/values-fa/strings.xml similarity index 100% rename from app/src/main/res/values-fa/strings.xml rename to uhabits-android/src/main/res/values-fa/strings.xml diff --git a/app/src/main/res/values-fi/strings.xml b/uhabits-android/src/main/res/values-fi/strings.xml similarity index 100% rename from app/src/main/res/values-fi/strings.xml rename to uhabits-android/src/main/res/values-fi/strings.xml diff --git a/app/src/main/res/values-fr/strings.xml b/uhabits-android/src/main/res/values-fr/strings.xml similarity index 100% rename from app/src/main/res/values-fr/strings.xml rename to uhabits-android/src/main/res/values-fr/strings.xml diff --git a/app/src/main/res/values-hi/strings.xml b/uhabits-android/src/main/res/values-hi/strings.xml similarity index 100% rename from app/src/main/res/values-hi/strings.xml rename to uhabits-android/src/main/res/values-hi/strings.xml diff --git a/app/src/main/res/values-hr/strings.xml b/uhabits-android/src/main/res/values-hr/strings.xml similarity index 100% rename from app/src/main/res/values-hr/strings.xml rename to uhabits-android/src/main/res/values-hr/strings.xml diff --git a/app/src/main/res/values-hu/strings.xml b/uhabits-android/src/main/res/values-hu/strings.xml similarity index 100% rename from app/src/main/res/values-hu/strings.xml rename to uhabits-android/src/main/res/values-hu/strings.xml diff --git a/app/src/main/res/values-id/strings.xml b/uhabits-android/src/main/res/values-id/strings.xml similarity index 100% rename from app/src/main/res/values-id/strings.xml rename to uhabits-android/src/main/res/values-id/strings.xml diff --git a/app/src/main/res/values-in/strings.xml b/uhabits-android/src/main/res/values-in/strings.xml similarity index 100% rename from app/src/main/res/values-in/strings.xml rename to uhabits-android/src/main/res/values-in/strings.xml diff --git a/app/src/main/res/values-it/strings.xml b/uhabits-android/src/main/res/values-it/strings.xml similarity index 100% rename from app/src/main/res/values-it/strings.xml rename to uhabits-android/src/main/res/values-it/strings.xml diff --git a/app/src/main/res/values-iw/strings.xml b/uhabits-android/src/main/res/values-iw/strings.xml similarity index 100% rename from app/src/main/res/values-iw/strings.xml rename to uhabits-android/src/main/res/values-iw/strings.xml diff --git a/app/src/main/res/values-ja/strings.xml b/uhabits-android/src/main/res/values-ja/strings.xml similarity index 100% rename from app/src/main/res/values-ja/strings.xml rename to uhabits-android/src/main/res/values-ja/strings.xml diff --git a/app/src/main/res/values-ko/strings.xml b/uhabits-android/src/main/res/values-ko/strings.xml similarity index 100% rename from app/src/main/res/values-ko/strings.xml rename to uhabits-android/src/main/res/values-ko/strings.xml diff --git a/app/src/main/res/values-nl/strings.xml b/uhabits-android/src/main/res/values-nl/strings.xml similarity index 100% rename from app/src/main/res/values-nl/strings.xml rename to uhabits-android/src/main/res/values-nl/strings.xml diff --git a/app/src/main/res/values-no-rNO/strings.xml b/uhabits-android/src/main/res/values-no-rNO/strings.xml similarity index 100% rename from app/src/main/res/values-no-rNO/strings.xml rename to uhabits-android/src/main/res/values-no-rNO/strings.xml diff --git a/app/src/main/res/values-pl/strings.xml b/uhabits-android/src/main/res/values-pl/strings.xml similarity index 100% rename from app/src/main/res/values-pl/strings.xml rename to uhabits-android/src/main/res/values-pl/strings.xml diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/uhabits-android/src/main/res/values-pt-rBR/strings.xml similarity index 100% rename from app/src/main/res/values-pt-rBR/strings.xml rename to uhabits-android/src/main/res/values-pt-rBR/strings.xml diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/uhabits-android/src/main/res/values-pt-rPT/strings.xml similarity index 100% rename from app/src/main/res/values-pt-rPT/strings.xml rename to uhabits-android/src/main/res/values-pt-rPT/strings.xml diff --git a/app/src/main/res/values-ro/strings.xml b/uhabits-android/src/main/res/values-ro/strings.xml similarity index 100% rename from app/src/main/res/values-ro/strings.xml rename to uhabits-android/src/main/res/values-ro/strings.xml diff --git a/app/src/main/res/values-ru/strings.xml b/uhabits-android/src/main/res/values-ru/strings.xml similarity index 100% rename from app/src/main/res/values-ru/strings.xml rename to uhabits-android/src/main/res/values-ru/strings.xml diff --git a/app/src/main/res/values-sl/strings.xml b/uhabits-android/src/main/res/values-sl/strings.xml similarity index 100% rename from app/src/main/res/values-sl/strings.xml rename to uhabits-android/src/main/res/values-sl/strings.xml diff --git a/app/src/main/res/values-sr/strings.xml b/uhabits-android/src/main/res/values-sr/strings.xml similarity index 100% rename from app/src/main/res/values-sr/strings.xml rename to uhabits-android/src/main/res/values-sr/strings.xml diff --git a/app/src/main/res/values-sv/strings.xml b/uhabits-android/src/main/res/values-sv/strings.xml similarity index 100% rename from app/src/main/res/values-sv/strings.xml rename to uhabits-android/src/main/res/values-sv/strings.xml diff --git a/app/src/main/res/values-tr/strings.xml b/uhabits-android/src/main/res/values-tr/strings.xml similarity index 100% rename from app/src/main/res/values-tr/strings.xml rename to uhabits-android/src/main/res/values-tr/strings.xml diff --git a/app/src/main/res/values-uk/strings.xml b/uhabits-android/src/main/res/values-uk/strings.xml similarity index 100% rename from app/src/main/res/values-uk/strings.xml rename to uhabits-android/src/main/res/values-uk/strings.xml diff --git a/app/src/main/res/values-v21/styles.xml b/uhabits-android/src/main/res/values-v21/styles.xml similarity index 100% rename from app/src/main/res/values-v21/styles.xml rename to uhabits-android/src/main/res/values-v21/styles.xml diff --git a/app/src/main/res/values-v21/styles_list_habits.xml b/uhabits-android/src/main/res/values-v21/styles_list_habits.xml similarity index 100% rename from app/src/main/res/values-v21/styles_list_habits.xml rename to uhabits-android/src/main/res/values-v21/styles_list_habits.xml diff --git a/app/src/main/res/values-vi/strings.xml b/uhabits-android/src/main/res/values-vi/strings.xml similarity index 100% rename from app/src/main/res/values-vi/strings.xml rename to uhabits-android/src/main/res/values-vi/strings.xml diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/uhabits-android/src/main/res/values-zh-rCN/strings.xml similarity index 100% rename from app/src/main/res/values-zh-rCN/strings.xml rename to uhabits-android/src/main/res/values-zh-rCN/strings.xml diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/uhabits-android/src/main/res/values-zh-rTW/strings.xml similarity index 100% rename from app/src/main/res/values-zh-rTW/strings.xml rename to uhabits-android/src/main/res/values-zh-rTW/strings.xml diff --git a/app/src/main/res/values/attrs.xml b/uhabits-android/src/main/res/values/attrs.xml similarity index 100% rename from app/src/main/res/values/attrs.xml rename to uhabits-android/src/main/res/values/attrs.xml diff --git a/app/src/main/res/values/colors.xml b/uhabits-android/src/main/res/values/colors.xml similarity index 100% rename from app/src/main/res/values/colors.xml rename to uhabits-android/src/main/res/values/colors.xml diff --git a/app/src/main/res/values/constants.xml b/uhabits-android/src/main/res/values/constants.xml similarity index 100% rename from app/src/main/res/values/constants.xml rename to uhabits-android/src/main/res/values/constants.xml diff --git a/app/src/main/res/values/dimens.xml b/uhabits-android/src/main/res/values/dimens.xml similarity index 100% rename from app/src/main/res/values/dimens.xml rename to uhabits-android/src/main/res/values/dimens.xml diff --git a/app/src/main/res/values/fontawesome.xml b/uhabits-android/src/main/res/values/fontawesome.xml similarity index 100% rename from app/src/main/res/values/fontawesome.xml rename to uhabits-android/src/main/res/values/fontawesome.xml diff --git a/app/src/main/res/values/keys.xml b/uhabits-android/src/main/res/values/keys.xml similarity index 100% rename from app/src/main/res/values/keys.xml rename to uhabits-android/src/main/res/values/keys.xml diff --git a/app/src/main/res/values/pickers.xml b/uhabits-android/src/main/res/values/pickers.xml similarity index 100% rename from app/src/main/res/values/pickers.xml rename to uhabits-android/src/main/res/values/pickers.xml diff --git a/app/src/main/res/values/strings.xml b/uhabits-android/src/main/res/values/strings.xml similarity index 100% rename from app/src/main/res/values/strings.xml rename to uhabits-android/src/main/res/values/strings.xml diff --git a/app/src/main/res/values/styles.xml b/uhabits-android/src/main/res/values/styles.xml similarity index 100% rename from app/src/main/res/values/styles.xml rename to uhabits-android/src/main/res/values/styles.xml diff --git a/app/src/main/res/values/styles_dialog.xml b/uhabits-android/src/main/res/values/styles_dialog.xml similarity index 100% rename from app/src/main/res/values/styles_dialog.xml rename to uhabits-android/src/main/res/values/styles_dialog.xml diff --git a/app/src/main/res/values/styles_list_habits.xml b/uhabits-android/src/main/res/values/styles_list_habits.xml similarity index 100% rename from app/src/main/res/values/styles_list_habits.xml rename to uhabits-android/src/main/res/values/styles_list_habits.xml diff --git a/app/src/main/res/values/styles_show_habit.xml b/uhabits-android/src/main/res/values/styles_show_habit.xml similarity index 100% rename from app/src/main/res/values/styles_show_habit.xml rename to uhabits-android/src/main/res/values/styles_show_habit.xml diff --git a/app/src/main/res/xml/file_paths.xml b/uhabits-android/src/main/res/xml/file_paths.xml similarity index 100% rename from app/src/main/res/xml/file_paths.xml rename to uhabits-android/src/main/res/xml/file_paths.xml diff --git a/app/src/main/res/xml/preferences.xml b/uhabits-android/src/main/res/xml/preferences.xml similarity index 100% rename from app/src/main/res/xml/preferences.xml rename to uhabits-android/src/main/res/xml/preferences.xml diff --git a/app/src/main/res/xml/widget_checkmark_info.xml b/uhabits-android/src/main/res/xml/widget_checkmark_info.xml similarity index 100% rename from app/src/main/res/xml/widget_checkmark_info.xml rename to uhabits-android/src/main/res/xml/widget_checkmark_info.xml diff --git a/app/src/main/res/xml/widget_frequency_info.xml b/uhabits-android/src/main/res/xml/widget_frequency_info.xml similarity index 100% rename from app/src/main/res/xml/widget_frequency_info.xml rename to uhabits-android/src/main/res/xml/widget_frequency_info.xml diff --git a/app/src/main/res/xml/widget_history_info.xml b/uhabits-android/src/main/res/xml/widget_history_info.xml similarity index 100% rename from app/src/main/res/xml/widget_history_info.xml rename to uhabits-android/src/main/res/xml/widget_history_info.xml diff --git a/app/src/main/res/xml/widget_score_info.xml b/uhabits-android/src/main/res/xml/widget_score_info.xml similarity index 100% rename from app/src/main/res/xml/widget_score_info.xml rename to uhabits-android/src/main/res/xml/widget_score_info.xml diff --git a/app/src/main/res/xml/widget_streak_info.xml b/uhabits-android/src/main/res/xml/widget_streak_info.xml similarity index 100% rename from app/src/main/res/xml/widget_streak_info.xml rename to uhabits-android/src/main/res/xml/widget_streak_info.xml diff --git a/app/src/test/java/org/isoron/uhabits/BaseUnitTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/BaseUnitTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/BaseUnitTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/BaseUnitTest.java diff --git a/app/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java diff --git a/app/src/test/java/org/isoron/uhabits/activities/BaseScreenTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseScreenTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/activities/BaseScreenTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseScreenTest.java diff --git a/app/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java diff --git a/app/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java diff --git a/app/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java diff --git a/app/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java diff --git a/app/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java diff --git a/app/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java diff --git a/app/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java diff --git a/app/src/test/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java diff --git a/app/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java diff --git a/app/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java diff --git a/app/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java diff --git a/app/src/test/java/org/isoron/uhabits/commands/CommandParserTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/commands/CommandParserTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/commands/CommandParserTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/commands/CommandParserTest.java diff --git a/app/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java diff --git a/app/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java diff --git a/app/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java diff --git a/app/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java diff --git a/app/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java diff --git a/app/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java diff --git a/app/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java diff --git a/app/src/test/java/org/isoron/uhabits/models/HabitFixtures.java b/uhabits-android/src/test/java/org/isoron/uhabits/models/HabitFixtures.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/models/HabitFixtures.java rename to uhabits-android/src/test/java/org/isoron/uhabits/models/HabitFixtures.java diff --git a/app/src/test/java/org/isoron/uhabits/models/HabitListTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/models/HabitListTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/models/HabitListTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/models/HabitListTest.java diff --git a/app/src/test/java/org/isoron/uhabits/models/HabitTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/models/HabitTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/models/HabitTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/models/HabitTest.java diff --git a/app/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java diff --git a/app/src/test/java/org/isoron/uhabits/models/ScoreListTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/models/ScoreListTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/models/ScoreListTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/models/ScoreListTest.java diff --git a/app/src/test/java/org/isoron/uhabits/models/ScoreTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/models/ScoreTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/models/ScoreTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/models/ScoreTest.java diff --git a/app/src/test/java/org/isoron/uhabits/models/StreakListTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/models/StreakListTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/models/StreakListTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/models/StreakListTest.java diff --git a/app/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java diff --git a/app/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java diff --git a/app/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java diff --git a/app/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java diff --git a/app/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java diff --git a/app/src/test/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java similarity index 100% rename from app/src/test/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java From f18ac9db48fcb92ef3b37550a488356542cc4a8c Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Thu, 25 May 2017 08:16:55 -0400 Subject: [PATCH 03/27] Create module uhabits-core --- settings.gradle | 2 +- uhabits-android/build.gradle | 2 ++ uhabits-core/.gitignore | 1 + uhabits-core/build.gradle | 30 +++++++++++++++++++ .../java/org/isoron/uhabits/AppContext.java | 0 .../java/org/isoron/uhabits/AppScope.java | 0 .../main/java/org/isoron/uhabits/MyClass.java | 23 ++++++++++++++ .../uhabits/tasks/SingleThreadTaskRunner.java | 0 .../java/org/isoron/uhabits/tasks/Task.java | 0 .../org/isoron/uhabits/tasks/TaskRunner.java | 0 10 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 uhabits-core/.gitignore create mode 100644 uhabits-core/build.gradle rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/AppContext.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/AppScope.java (100%) create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/MyClass.java rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/tasks/Task.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/tasks/TaskRunner.java (100%) diff --git a/settings.gradle b/settings.gradle index 31c0b2291..10106d3ee 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':uhabits-android' +include ':uhabits-android', ':uhabits-core' diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle index 199ab238e..612f3fa36 100644 --- a/uhabits-android/build.gradle +++ b/uhabits-android/build.gradle @@ -53,6 +53,8 @@ android { dependencies { + implementation project(":uhabits-core") + implementation 'com.android.support:appcompat-v7:25.3.1' implementation 'com.android.support:design:25.3.1' implementation 'com.android.support:preference-v14:25.3.1' diff --git a/uhabits-core/.gitignore b/uhabits-core/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/uhabits-core/.gitignore @@ -0,0 +1 @@ +/build diff --git a/uhabits-core/build.gradle b/uhabits-core/build.gradle new file mode 100644 index 000000000..4f1dbd565 --- /dev/null +++ b/uhabits-core/build.gradle @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2017 Á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 . + */ + +apply plugin: 'java' + +dependencies { + compileOnly 'javax.annotation:jsr250-api:1.0' + implementation 'com.google.dagger:dagger:2.11-rc2' + implementation 'com.android.support:support-annotations:25.3.1' + implementation 'com.google.auto.factory:auto-factory:1.0-beta3' +} + +sourceCompatibility = "1.8" +targetCompatibility = "1.8" diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/AppContext.java b/uhabits-core/src/main/java/org/isoron/uhabits/AppContext.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/AppContext.java rename to uhabits-core/src/main/java/org/isoron/uhabits/AppContext.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/AppScope.java b/uhabits-core/src/main/java/org/isoron/uhabits/AppScope.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/AppScope.java rename to uhabits-core/src/main/java/org/isoron/uhabits/AppScope.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/MyClass.java b/uhabits-core/src/main/java/org/isoron/uhabits/MyClass.java new file mode 100644 index 000000000..b2332c44d --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/MyClass.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2017 Á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; + +public class MyClass +{} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java b/uhabits-core/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java rename to uhabits-core/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/Task.java b/uhabits-core/src/main/java/org/isoron/uhabits/tasks/Task.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/Task.java rename to uhabits-core/src/main/java/org/isoron/uhabits/tasks/Task.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/TaskRunner.java b/uhabits-core/src/main/java/org/isoron/uhabits/tasks/TaskRunner.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/TaskRunner.java rename to uhabits-core/src/main/java/org/isoron/uhabits/tasks/TaskRunner.java From d23b59ced298b4e6e6f887e3fe46edd02f18cbd3 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Thu, 25 May 2017 08:24:22 -0400 Subject: [PATCH 04/27] Move some models --- uhabits-core/build.gradle | 2 ++ .../src/main/java/org/isoron/uhabits/models/Checkmark.java | 0 .../src/main/java/org/isoron/uhabits/models/Frequency.java | 0 .../main/java/org/isoron/uhabits/models/ModelObservable.java | 0 .../src/main/java/org/isoron/uhabits/models/Reminder.java | 0 .../src/main/java/org/isoron/uhabits/models/Repetition.java | 0 .../src/main/java/org/isoron/uhabits/models/Score.java | 0 .../src/main/java/org/isoron/uhabits/models/WeekdayList.java | 0 8 files changed, 2 insertions(+) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/Checkmark.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/Frequency.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/ModelObservable.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/Reminder.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/Repetition.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/Score.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/WeekdayList.java (100%) diff --git a/uhabits-core/build.gradle b/uhabits-core/build.gradle index 4f1dbd565..4dc458a31 100644 --- a/uhabits-core/build.gradle +++ b/uhabits-core/build.gradle @@ -24,6 +24,8 @@ dependencies { implementation 'com.google.dagger:dagger:2.11-rc2' implementation 'com.android.support:support-annotations:25.3.1' implementation 'com.google.auto.factory:auto-factory:1.0-beta3' + implementation 'com.google.code.findbugs:jsr305:3.0.2' + implementation 'org.apache.commons:commons-lang3:3.5' } sourceCompatibility = "1.8" diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/Checkmark.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/Checkmark.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/Checkmark.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/Checkmark.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/Frequency.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/Frequency.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/Frequency.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/Frequency.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/ModelObservable.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/ModelObservable.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/ModelObservable.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/ModelObservable.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/Reminder.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/Reminder.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/Reminder.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/Reminder.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/Repetition.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/Repetition.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/Repetition.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/Repetition.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/Score.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/Score.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/Score.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/Score.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/WeekdayList.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/WeekdayList.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/WeekdayList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/WeekdayList.java From 51ca4aa98e0b2a8f03499958238af5a8fe517abc Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Thu, 25 May 2017 08:54:21 -0400 Subject: [PATCH 05/27] Move remaining model classes --- .../uhabits/widgets/FrequencyWidgetTest.java | 1 - .../uhabits/widgets/HistoryWidgetTest.java | 1 - .../activities/common/views/BarChart.java | 6 +- .../common/views/FrequencyChart.java | 4 +- .../activities/common/views/HistoryChart.java | 4 +- .../activities/common/views/ScoreChart.java | 6 +- .../habits/edit/views/ReminderPanel.java | 7 +- .../habits/show/views/SubtitleCard.java | 2 +- .../isoron/uhabits/intents/IntentFactory.java | 2 +- .../uhabits/intents/PendingIntentFactory.java | 10 +-- .../isoron/uhabits/tasks/ExportCSVTask.java | 1 - .../uhabits/utils/AndroidDateFormats.java | 37 ++++++++++ .../uhabits/utils/AndroidDateUtils.java | 72 +++++++++++++++++++ .../org/isoron/uhabits/utils/ColorUtils.java | 15 ---- uhabits-core/build.gradle | 4 ++ .../isoron/uhabits/models/CheckmarkList.java | 4 +- .../java/org/isoron/uhabits/models/Habit.java | 8 +-- .../org/isoron/uhabits/models/HabitList.java | 2 +- .../isoron/uhabits/models/HabitMatcher.java | 0 .../uhabits/models/HabitMatcherBuilder.java | 2 +- .../models/HabitNotFoundException.java | 0 .../isoron/uhabits/models/ModelFactory.java | 0 .../isoron/uhabits/models/RepetitionList.java | 0 .../org/isoron/uhabits/models/ScoreList.java | 0 .../org/isoron/uhabits/models/Streak.java | 0 .../org/isoron/uhabits/models/StreakList.java | 0 .../models/memory/MemoryCheckmarkList.java | 0 .../models/memory/MemoryHabitList.java | 0 .../models/memory/MemoryModelFactory.java | 0 .../models/memory/MemoryRepetitionList.java | 0 .../models/memory/MemoryScoreList.java | 0 .../models/memory/MemoryStreakList.java | 0 .../uhabits/models/memory/package-info.java | 0 .../isoron/uhabits/models/package-info.java | 0 .../isoron/uhabits/utils/ColorConstants.java | 20 ++++++ .../org/isoron/uhabits/utils/DateFormats.java | 14 +--- .../org/isoron/uhabits/utils/DateUtils.java | 47 ------------ 37 files changed, 162 insertions(+), 107 deletions(-) create mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateFormats.java create mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateUtils.java rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/CheckmarkList.java (98%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/Habit.java (98%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/HabitList.java (99%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/HabitMatcher.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java (96%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/HabitNotFoundException.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/ModelFactory.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/RepetitionList.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/ScoreList.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/Streak.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/StreakList.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/memory/MemoryCheckmarkList.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/memory/MemoryModelFactory.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/memory/MemoryRepetitionList.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/memory/MemoryScoreList.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/memory/MemoryStreakList.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/memory/package-info.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/models/package-info.java (100%) create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/utils/ColorConstants.java rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/utils/DateFormats.java (78%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/utils/DateUtils.java (83%) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java index ac361fd96..8f8d9c507 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java @@ -25,7 +25,6 @@ import android.widget.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.widgets.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java index c1adc6882..16c45c408 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java @@ -25,7 +25,6 @@ import android.widget.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.widgets.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java index 42271a838..6dab1f948 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java @@ -445,9 +445,9 @@ public class BarChart extends ScrollableChart return; } - dfYear = DateFormats.fromSkeleton("yyyy"); - dfMonth = DateFormats.fromSkeleton("MMM"); - dfDay = DateFormats.fromSkeleton("d"); + dfYear = AndroidDateFormats.fromSkeleton("yyyy"); + dfMonth = AndroidDateFormats.fromSkeleton("MMM"); + dfDay = AndroidDateFormats.fromSkeleton("d"); } private void initPaints() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java index fa1d38214..444d359d3 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java @@ -299,8 +299,8 @@ public class FrequencyChart extends ScrollableChart private void initDateFormats() { - dfMonth = DateFormats.fromSkeleton("MMM"); - dfYear = DateFormats.fromSkeleton("yyyy"); + dfMonth = AndroidDateFormats.fromSkeleton("MMM"); + dfYear = AndroidDateFormats.fromSkeleton("yyyy"); } private void initRects() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java index 1f6135876..6abf7cfb9 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java @@ -413,8 +413,8 @@ public class HistoryChart extends ScrollableChart private void initDateFormats() { - dfMonth = DateFormats.fromSkeleton("MMM"); - dfYear = DateFormats.fromSkeleton("yyyy"); + dfMonth = AndroidDateFormats.fromSkeleton("MMM"); + dfYear = AndroidDateFormats.fromSkeleton("yyyy"); } private void initRects() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java index 14b77ee77..f6ee889f7 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java @@ -410,9 +410,9 @@ public class ScoreChart extends ScrollableChart private void initDateFormats() { - dfYear = DateFormats.fromSkeleton("yyyy"); - dfMonth = DateFormats.fromSkeleton("MMM"); - dfDay = DateFormats.fromSkeleton("d"); + dfYear = AndroidDateFormats.fromSkeleton("yyyy"); + dfMonth = AndroidDateFormats.fromSkeleton("MMM"); + dfDay = AndroidDateFormats.fromSkeleton("d"); } private void initPaints() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java index 7f1fc7499..4c7287e5a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java @@ -32,11 +32,10 @@ import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.models.*; +import org.isoron.uhabits.utils.*; import butterknife.*; -import static org.isoron.uhabits.utils.DateUtils.*; - public class ReminderPanel extends FrameLayout implements TimePickerDialog.OnTimeSetListener, WeekdayPickerDialog.OnWeekdaysPickedListener @@ -86,12 +85,12 @@ public class ReminderPanel extends FrameLayout } Context ctx = getContext(); - String time = formatTime(ctx, reminder.getHour(), reminder.getMinute()); + String time = AndroidDateUtils.formatTime(ctx, reminder.getHour(), reminder.getMinute()); tvReminderTime.setText(time); llReminderDays.setVisibility(View.VISIBLE); boolean weekdays[] = reminder.getDays().toArray(); - tvReminderDays.setText(formatWeekdayList(ctx, weekdays)); + tvReminderDays.setText(AndroidDateUtils.formatWeekdayList(ctx, weekdays)); } @Override diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java index 52a1fe9ad..6a6bbd22e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java @@ -108,7 +108,7 @@ public class SubtitleCard extends HabitCard private void updateReminderText(Reminder reminder) { reminderLabel.setText( - DateUtils.formatTime(getContext(), reminder.getHour(), + AndroidDateUtils.formatTime(getContext(), reminder.getHour(), reminder.getMinute())); } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentFactory.java index 76b56243a..0e6e41b9b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentFactory.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentFactory.java @@ -83,7 +83,7 @@ public class IntentFactory public Intent startShowHabitActivity(Context context, Habit habit) { Intent intent = new Intent(context, ShowHabitActivity.class); - intent.setData(habit.getUri()); + intent.setData(Uri.parse(habit.getUriString())); return intent; } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java index 415f9237a..12ef4c65b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java @@ -51,7 +51,7 @@ public class PendingIntentFactory @Nullable Long timestamp) { Intent checkIntent = new Intent(context, WidgetReceiver.class); - checkIntent.setData(habit.getUri()); + checkIntent.setData(Uri.parse(habit.getUriString())); checkIntent.setAction(WidgetReceiver.ACTION_ADD_REPETITION); if (timestamp != null) checkIntent.putExtra("timestamp", timestamp); return PendingIntent.getBroadcast(context, 1, checkIntent, @@ -62,7 +62,7 @@ public class PendingIntentFactory { Intent deleteIntent = new Intent(context, ReminderReceiver.class); deleteIntent.setAction(WidgetReceiver.ACTION_DISMISS_REMINDER); - deleteIntent.setData(habit.getUri()); + deleteIntent.setData(Uri.parse(habit.getUriString())); return PendingIntent.getBroadcast(context, 0, deleteIntent, FLAG_UPDATE_CURRENT); } @@ -81,7 +81,7 @@ public class PendingIntentFactory @Nullable Long reminderTime, long timestamp) { - Uri uri = habit.getUri(); + Uri uri = Uri.parse(habit.getUriString()); Intent intent = new Intent(context, ReminderReceiver.class); intent.setAction(ReminderReceiver.ACTION_SHOW_REMINDER); @@ -95,7 +95,7 @@ public class PendingIntentFactory public PendingIntent snoozeNotification(@NonNull Habit habit) { - Uri data = habit.getUri(); + Uri data = Uri.parse(habit.getUriString()); Intent snoozeIntent = new Intent(context, ReminderReceiver.class); snoozeIntent.setData(data); snoozeIntent.setAction(ReminderReceiver.ACTION_SNOOZE_REMINDER); @@ -106,7 +106,7 @@ public class PendingIntentFactory public PendingIntent toggleCheckmark(@NonNull Habit habit, @Nullable Long timestamp) { - Uri data = habit.getUri(); + Uri data = Uri.parse(habit.getUriString()); Intent checkIntent = new Intent(context, WidgetReceiver.class); checkIntent.setData(data); checkIntent.setAction(WidgetReceiver.ACTION_TOGGLE_REPETITION); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java index 1f41f1994..1b0abf3a3 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java @@ -25,7 +25,6 @@ import android.support.annotation.*; import com.google.auto.factory.*; import org.isoron.uhabits.AppContext; -import org.isoron.uhabits.activities.ActivityContext; import org.isoron.uhabits.io.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.utils.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateFormats.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateFormats.java new file mode 100644 index 000000000..66a965217 --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateFormats.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2017 Á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.utils; + +import android.support.annotation.*; + +import java.text.*; +import java.util.*; + +import static android.text.format.DateFormat.getBestDateTimePattern; + +public class AndroidDateFormats +{ + @NonNull + public static SimpleDateFormat fromSkeleton(@NonNull String skeleton) + { + Locale locale = Locale.getDefault(); + skeleton = getBestDateTimePattern(locale, skeleton); + return DateFormats.fromSkeleton(skeleton, locale); + } +} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateUtils.java new file mode 100644 index 000000000..ba10e8733 --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateUtils.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2017 Á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.utils; + +import android.content.*; +import android.text.format.*; + +import org.isoron.uhabits.*; + +import java.util.*; + +public class AndroidDateUtils +{ + public static String formatTime(Context context, int hours, int minutes) + { + int reminderMilliseconds = (hours * 60 + minutes) * 60 * 1000; + + Date date = new Date(reminderMilliseconds); + java.text.DateFormat df = DateFormat.getTimeFormat(context); + df.setTimeZone(TimeZone.getTimeZone("UTC")); + + return df.format(date); + } + + public static String formatWeekdayList(Context context, boolean weekday[]) + { + String shortDayNames[] = DateUtils.getShortDayNames(); + String longDayNames[] = DateUtils.getLongDayNames(); + StringBuilder buffer = new StringBuilder(); + + int count = 0; + int first = 0; + boolean isFirst = true; + for (int i = 0; i < 7; i++) + { + if (weekday[i]) + { + if (isFirst) first = i; + else buffer.append(", "); + + buffer.append(shortDayNames[i]); + isFirst = false; + count++; + } + } + + if (count == 1) return longDayNames[first]; + if (count == 2 && weekday[0] && weekday[1]) + return context.getString(R.string.weekends); + if (count == 5 && !weekday[0] && !weekday[1]) + return context.getString(R.string.any_weekday); + if (count == 7) return context.getString(R.string.any_day); + return buffer.toString(); + } +} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ColorUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ColorUtils.java index 25434bacc..ac5afdf89 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ColorUtils.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ColorUtils.java @@ -25,21 +25,6 @@ import android.util.*; public abstract class ColorUtils { - public static String CSV_PALETTE[] = { - "#D32F2F", // 0 red - "#E64A19", // 1 orange - "#F9A825", // 2 yellow - "#AFB42B", // 3 light green - "#388E3C", // 4 dark green - "#00897B", // 5 teal - "#00ACC1", // 6 cyan - "#039BE5", // 7 blue - "#5E35B1", // 8 deep purple - "#8E24AA", // 9 purple - "#D81B60", // 10 pink - "#303030", // 11 dark grey - "#aaaaaa" // 12 light grey - }; public static int colorToPaletteIndex(Context context, int color) { diff --git a/uhabits-core/build.gradle b/uhabits-core/build.gradle index 4dc458a31..914660c4c 100644 --- a/uhabits-core/build.gradle +++ b/uhabits-core/build.gradle @@ -26,6 +26,10 @@ dependencies { implementation 'com.google.auto.factory:auto-factory:1.0-beta3' implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation 'org.apache.commons:commons-lang3:3.5' + + implementation ('com.opencsv:opencsv:3.9') { + exclude group: 'commons-logging', module: 'commons-logging' + } } sourceCompatibility = "1.8" diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/CheckmarkList.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/CheckmarkList.java similarity index 98% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/CheckmarkList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/CheckmarkList.java index da9725b92..31a09b921 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/CheckmarkList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/models/CheckmarkList.java @@ -27,9 +27,9 @@ import java.io.*; import java.text.*; import java.util.*; -import static org.isoron.uhabits.models.Checkmark.CHECKED_EXPLICITLY; -import static org.isoron.uhabits.models.Checkmark.CHECKED_IMPLICITLY; import javax.annotation.concurrent.*; + +import static org.isoron.uhabits.models.Checkmark.*; /** * The collection of {@link Checkmark}s belonging to a habit. */ diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/Habit.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/Habit.java similarity index 98% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/Habit.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/Habit.java index 90b760609..e7b4d412e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/Habit.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/models/Habit.java @@ -19,7 +19,6 @@ package org.isoron.uhabits.models; -import android.net.*; import android.support.annotation.*; import org.apache.commons.lang3.builder.*; @@ -281,12 +280,11 @@ public class Habit /** * Returns the public URI that identifies this habit * - * @return the uri + * @return the URI */ - public Uri getUri() + public String getUriString() { - String s = String.format(Locale.US, HABIT_URI_FORMAT, getId()); - return Uri.parse(s); + return String.format(Locale.US, HABIT_URI_FORMAT, getId()); } public synchronized boolean hasId() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/HabitList.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/HabitList.java similarity index 99% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/HabitList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/HabitList.java index 2892a2c30..52c00a893 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/HabitList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/models/HabitList.java @@ -230,7 +230,7 @@ public abstract class HabitList implements Iterable habit.getDescription(), Integer.toString(freq.getNumerator()), Integer.toString(freq.getDenominator()), - ColorUtils.CSV_PALETTE[habit.getColor()] + ColorConstants.CSV_PALETTE[habit.getColor()] }; csv.writeNext(cols, false); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/HabitMatcher.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/HabitMatcher.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/HabitMatcher.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/HabitMatcher.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java similarity index 96% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java index facc8cc4b..c6cbd0dc4 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java @@ -36,7 +36,7 @@ public class HabitMatcherBuilder private static List allColors() { List colors = new ArrayList<>(); - for(int i = 0; i < ColorUtils.CSV_PALETTE.length; i++) + for(int i = 0; i < ColorConstants.CSV_PALETTE.length; i++) colors.add(i); return colors; } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/HabitNotFoundException.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/HabitNotFoundException.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/HabitNotFoundException.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/HabitNotFoundException.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/ModelFactory.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/ModelFactory.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/ModelFactory.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/ModelFactory.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/RepetitionList.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/RepetitionList.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/RepetitionList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/RepetitionList.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/ScoreList.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/ScoreList.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/ScoreList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/ScoreList.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/Streak.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/Streak.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/Streak.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/Streak.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/StreakList.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/StreakList.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/StreakList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/StreakList.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryCheckmarkList.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryCheckmarkList.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryCheckmarkList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryCheckmarkList.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryModelFactory.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryModelFactory.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryModelFactory.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryModelFactory.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryRepetitionList.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryRepetitionList.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryRepetitionList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryRepetitionList.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryScoreList.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryScoreList.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryScoreList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryScoreList.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryStreakList.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryStreakList.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/memory/MemoryStreakList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryStreakList.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/memory/package-info.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/package-info.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/memory/package-info.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/memory/package-info.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/package-info.java b/uhabits-core/src/main/java/org/isoron/uhabits/models/package-info.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/models/package-info.java rename to uhabits-core/src/main/java/org/isoron/uhabits/models/package-info.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/utils/ColorConstants.java b/uhabits-core/src/main/java/org/isoron/uhabits/utils/ColorConstants.java new file mode 100644 index 000000000..294f3e6cd --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/utils/ColorConstants.java @@ -0,0 +1,20 @@ +package org.isoron.uhabits.utils; + +public class ColorConstants +{ + public static String[] CSV_PALETTE = { + "#D32F2F", // 0 red + "#E64A19", // 1 orange + "#F9A825", // 2 yellow + "#AFB42B", // 3 light green + "#388E3C", // 4 dark green + "#00897B", // 5 teal + "#00ACC1", // 6 cyan + "#039BE5", // 7 blue + "#5E35B1", // 8 deep purple + "#8E24AA", // 9 purple + "#D81B60", // 10 pink + "#303030", // 11 dark grey + "#aaaaaa" // 12 light grey + }; +} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DateFormats.java b/uhabits-core/src/main/java/org/isoron/uhabits/utils/DateFormats.java similarity index 78% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/DateFormats.java rename to uhabits-core/src/main/java/org/isoron/uhabits/utils/DateFormats.java index 779170efe..dc1df5231 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DateFormats.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/utils/DateFormats.java @@ -24,27 +24,17 @@ import android.support.annotation.*; import java.text.*; import java.util.*; -import static android.text.format.DateFormat.*; - public class DateFormats { @NonNull - private static SimpleDateFormat fromSkeleton(@NonNull String skeleton, - @NonNull Locale locale) + public static SimpleDateFormat fromSkeleton(@NonNull String skeleton, + @NonNull Locale locale) { SimpleDateFormat df = new SimpleDateFormat(skeleton, locale); df.setTimeZone(TimeZone.getTimeZone("UTC")); return df; } - @NonNull - public static SimpleDateFormat fromSkeleton(@NonNull String skeleton) - { - Locale locale = Locale.getDefault(); - skeleton = getBestDateTimePattern(locale, skeleton); - return fromSkeleton(skeleton, locale); - } - public static SimpleDateFormat getBackupDateFormat() { return fromSkeleton("yyyy-MM-dd HHmmss", Locale.US); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DateUtils.java b/uhabits-core/src/main/java/org/isoron/uhabits/utils/DateUtils.java similarity index 83% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/DateUtils.java rename to uhabits-core/src/main/java/org/isoron/uhabits/utils/DateUtils.java index cce452145..cb0f20fbe 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DateUtils.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/utils/DateUtils.java @@ -19,11 +19,6 @@ package org.isoron.uhabits.utils; -import android.content.*; -import android.text.format.*; - -import org.isoron.uhabits.*; - import java.util.*; import static java.util.Calendar.*; @@ -54,48 +49,6 @@ public abstract class DateUtils return dayOfWeek + "\n" + dayOfMonth; } - public static String formatTime(Context context, int hours, int minutes) - { - int reminderMilliseconds = (hours * 60 + minutes) * 60 * 1000; - - Date date = new Date(reminderMilliseconds); - java.text.DateFormat df = DateFormat.getTimeFormat(context); - df.setTimeZone(TimeZone.getTimeZone("UTC")); - - return df.format(date); - } - - public static String formatWeekdayList(Context context, boolean weekday[]) - { - String shortDayNames[] = getShortDayNames(); - String longDayNames[] = getLongDayNames(); - StringBuilder buffer = new StringBuilder(); - - int count = 0; - int first = 0; - boolean isFirst = true; - for (int i = 0; i < 7; i++) - { - if (weekday[i]) - { - if (isFirst) first = i; - else buffer.append(", "); - - buffer.append(shortDayNames[i]); - isFirst = false; - count++; - } - } - - if (count == 1) return longDayNames[first]; - if (count == 2 && weekday[0] && weekday[1]) - return context.getString(R.string.weekends); - if (count == 5 && !weekday[0] && !weekday[1]) - return context.getString(R.string.any_weekday); - if (count == 7) return context.getString(R.string.any_day); - return buffer.toString(); - } - public static GregorianCalendar getCalendar(long timestamp) { GregorianCalendar day = From acd653db7017f30b8282f53ee5cdea2514ea2e1c Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Thu, 25 May 2017 09:31:54 -0400 Subject: [PATCH 06/27] Create org.isoron.androidbase package --- .../java/org/isoron/uhabits/AndroidTestComponent.java | 1 + .../androidTest/java/org/isoron/uhabits/BaseAndroidTest.java | 1 + .../androidTest/java/org/isoron/uhabits/HabitLoggerTest.java | 2 +- .../java/org/isoron/uhabits/HabitsApplicationTest.java | 2 +- .../src/main/java/org/isoron/androidbase}/AppContext.java | 2 +- .../java/org/isoron/{uhabits => androidbase}/AppModule.java | 2 +- .../{uhabits => androidbase}/activities/ActivityContext.java | 2 +- .../{uhabits => androidbase}/activities/ActivityModule.java | 2 +- .../{uhabits => androidbase}/activities/ActivityScope.java | 2 +- .../{uhabits => androidbase}/activities/BaseActivity.java | 3 ++- .../activities/BaseExceptionHandler.java | 2 +- .../isoron/{uhabits => androidbase}/activities/BaseMenu.java | 2 +- .../{uhabits => androidbase}/activities/BaseRootView.java | 3 ++- .../isoron/{uhabits => androidbase}/activities/BaseScreen.java | 2 +- .../{uhabits => androidbase}/activities/BaseSelectionMenu.java | 2 +- .../isoron/{uhabits => androidbase}/activities/BaseSystem.java | 2 +- .../src/main/java/org/isoron/uhabits/AppComponent.java | 1 + .../src/main/java/org/isoron/uhabits/HabitsApplication.java | 1 + .../java/org/isoron/uhabits/activities/ActivityComponent.java | 1 + .../main/java/org/isoron/uhabits/activities/ThemeSwitcher.java | 1 + .../org/isoron/uhabits/activities/about/AboutActivity.java | 2 +- .../org/isoron/uhabits/activities/about/AboutRootView.java | 2 +- .../activities/common/dialogs/ColorPickerDialogFactory.java | 2 +- .../uhabits/activities/common/dialogs/ConfirmDeleteDialog.java | 2 +- .../isoron/uhabits/activities/habits/edit/EditHabitDialog.java | 2 +- .../uhabits/activities/habits/list/ListHabitsActivity.java | 1 + .../uhabits/activities/habits/list/ListHabitsComponent.java | 2 +- .../uhabits/activities/habits/list/ListHabitsController.java | 2 +- .../isoron/uhabits/activities/habits/list/ListHabitsMenu.java | 1 + .../uhabits/activities/habits/list/ListHabitsRootView.java | 2 +- .../uhabits/activities/habits/list/ListHabitsScreen.java | 1 + .../activities/habits/list/ListHabitsSelectionMenu.java | 2 +- .../activities/habits/list/model/HabitCardListAdapter.java | 2 +- .../uhabits/activities/habits/show/ShowHabitActivity.java | 2 +- .../uhabits/activities/habits/show/ShowHabitComponent.java | 2 +- .../uhabits/activities/habits/show/ShowHabitController.java | 2 +- .../isoron/uhabits/activities/habits/show/ShowHabitModule.java | 2 +- .../uhabits/activities/habits/show/ShowHabitRootView.java | 2 +- .../isoron/uhabits/activities/habits/show/ShowHabitScreen.java | 2 +- .../isoron/uhabits/activities/habits/show/ShowHabitsMenu.java | 2 +- .../isoron/uhabits/activities/settings/SettingsActivity.java | 2 +- .../org/isoron/uhabits/automation/EditSettingActivity.java | 2 +- .../org/isoron/uhabits/automation/EditSettingRootView.java | 2 +- .../main/java/org/isoron/uhabits/intents/IntentScheduler.java | 1 + .../java/org/isoron/uhabits/intents/PendingIntentFactory.java | 1 + .../src/main/java/org/isoron/uhabits/io/LoopDBImporter.java | 1 + .../org/isoron/uhabits/notifications/NotificationTray.java | 1 + .../main/java/org/isoron/uhabits/preferences/Preferences.java | 1 + .../java/org/isoron/uhabits/preferences/WidgetPreferences.java | 1 + .../src/main/java/org/isoron/uhabits/sync/SyncManager.java | 1 + .../src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java | 2 +- .../src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java | 3 +-- .../src/main/java/org/isoron/uhabits/utils/FileUtils.java | 2 -- .../src/main/java/org/isoron/uhabits/utils/MidnightTimer.java | 2 +- .../main/java/org/isoron/uhabits/widgets/WidgetUpdater.java | 2 +- .../java/org/isoron/uhabits/activities/BaseActivityTest.java | 1 + .../java/org/isoron/uhabits/activities/BaseScreenTest.java | 1 + .../activities/habits/list/ListHabitsControllerTest.java | 2 +- .../uhabits/activities/habits/list/ListHabitsMenuTest.java | 1 + .../uhabits/activities/habits/list/ListHabitsScreenTest.java | 1 + 60 files changed, 61 insertions(+), 42 deletions(-) rename {uhabits-core/src/main/java/org/isoron/uhabits => uhabits-android/src/main/java/org/isoron/androidbase}/AppContext.java (96%) rename uhabits-android/src/main/java/org/isoron/{uhabits => androidbase}/AppModule.java (97%) rename uhabits-android/src/main/java/org/isoron/{uhabits => androidbase}/activities/ActivityContext.java (95%) rename uhabits-android/src/main/java/org/isoron/{uhabits => androidbase}/activities/ActivityModule.java (96%) rename uhabits-android/src/main/java/org/isoron/{uhabits => androidbase}/activities/ActivityScope.java (95%) rename uhabits-android/src/main/java/org/isoron/{uhabits => androidbase}/activities/BaseActivity.java (97%) rename uhabits-android/src/main/java/org/isoron/{uhabits => androidbase}/activities/BaseExceptionHandler.java (97%) rename uhabits-android/src/main/java/org/isoron/{uhabits => androidbase}/activities/BaseMenu.java (98%) rename uhabits-android/src/main/java/org/isoron/{uhabits => androidbase}/activities/BaseRootView.java (97%) rename uhabits-android/src/main/java/org/isoron/{uhabits => androidbase}/activities/BaseScreen.java (99%) rename uhabits-android/src/main/java/org/isoron/{uhabits => androidbase}/activities/BaseSelectionMenu.java (98%) rename uhabits-android/src/main/java/org/isoron/{uhabits => androidbase}/activities/BaseSystem.java (99%) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java index 55a756d92..093740d8e 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java @@ -20,6 +20,7 @@ package org.isoron.uhabits; +import org.isoron.androidbase.*; import org.isoron.uhabits.models.sqlite.*; import org.isoron.uhabits.tasks.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java index 38258775d..2409d9b6d 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java @@ -27,6 +27,7 @@ import android.support.annotation.*; import android.support.test.*; import android.util.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.tasks.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java index bf252ef61..edf512827 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java @@ -23,8 +23,8 @@ import android.os.*; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.activities.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java index d97f03ea3..8371c593f 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java @@ -22,7 +22,7 @@ package org.isoron.uhabits; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; -import org.isoron.uhabits.activities.*; +import org.isoron.androidbase.activities.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/AppContext.java b/uhabits-android/src/main/java/org/isoron/androidbase/AppContext.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/AppContext.java rename to uhabits-android/src/main/java/org/isoron/androidbase/AppContext.java index ebd0aab10..d7521e26d 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/AppContext.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/AppContext.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits; +package org.isoron.androidbase; import java.lang.annotation.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/AppModule.java b/uhabits-android/src/main/java/org/isoron/androidbase/AppModule.java similarity index 97% rename from uhabits-android/src/main/java/org/isoron/uhabits/AppModule.java rename to uhabits-android/src/main/java/org/isoron/androidbase/AppModule.java index c5aa66c70..6e672994b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/AppModule.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/AppModule.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits; +package org.isoron.androidbase; import android.content.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityContext.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityContext.java similarity index 95% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityContext.java rename to uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityContext.java index c75c28dae..5749c4ecc 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityContext.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityContext.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.androidbase.activities; import java.lang.annotation.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityModule.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java similarity index 96% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityModule.java rename to uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java index dcf743241..f3910c989 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityModule.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.androidbase.activities; import android.content.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityScope.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityScope.java similarity index 95% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityScope.java rename to uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityScope.java index 3d02e80ae..82dad3ce9 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityScope.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityScope.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.androidbase.activities; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseActivity.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseActivity.java similarity index 97% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseActivity.java rename to uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseActivity.java index 2167311cb..dc8f28ed6 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseActivity.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseActivity.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.androidbase.activities; import android.content.*; import android.os.*; @@ -26,6 +26,7 @@ import android.support.v7.app.*; import android.view.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.activities.*; import static android.R.anim.fade_in; import static android.R.anim.fade_out; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseExceptionHandler.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseExceptionHandler.java similarity index 97% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseExceptionHandler.java rename to uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseExceptionHandler.java index 5ea4638d9..e0f4c7777 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseExceptionHandler.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseExceptionHandler.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.androidbase.activities; import android.support.annotation.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseMenu.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseMenu.java similarity index 98% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseMenu.java rename to uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseMenu.java index 0a1e8026c..0b30aec2b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseMenu.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseMenu.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.androidbase.activities; import android.support.annotation.*; import android.view.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseRootView.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java similarity index 97% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseRootView.java rename to uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java index 93fbe562f..38238a6f5 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseRootView.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.androidbase.activities; import android.content.*; import android.support.annotation.*; @@ -27,6 +27,7 @@ import android.view.*; import android.widget.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.activities.*; import org.isoron.uhabits.utils.*; import static android.os.Build.VERSION.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseScreen.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseScreen.java similarity index 99% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseScreen.java rename to uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseScreen.java index 302ec7db1..9be10c58e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseScreen.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseScreen.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.androidbase.activities; import android.content.*; import android.graphics.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseSelectionMenu.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java similarity index 98% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseSelectionMenu.java rename to uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java index 2b3c56d25..87396e216 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseSelectionMenu.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.androidbase.activities; import android.support.annotation.*; import android.support.v7.view.ActionMode; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseSystem.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSystem.java similarity index 99% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseSystem.java rename to uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSystem.java index bacf911b3..bbb47b685 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/BaseSystem.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSystem.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.androidbase.activities; import android.content.*; import android.os.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java index 3dc205dd2..4c39f48cc 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java @@ -21,6 +21,7 @@ package org.isoron.uhabits; import android.content.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.intents.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java index 8e2e1e8ad..2e298ce9e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java @@ -24,6 +24,7 @@ import android.content.*; import com.activeandroid.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.models.sqlite.*; import org.isoron.uhabits.notifications.*; import org.isoron.uhabits.preferences.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityComponent.java index 918a70b4b..4a085df13 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityComponent.java @@ -19,6 +19,7 @@ package org.isoron.uhabits.activities; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.dialogs.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java index d560800ec..6a92b421d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java @@ -21,6 +21,7 @@ package org.isoron.uhabits.activities; import android.support.annotation.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.preferences.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java index b887766a5..543f032c6 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.activities.about; import android.os.*; -import org.isoron.uhabits.activities.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.intents.*; /** diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java index e4d18bbd6..4d03b5313 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java @@ -24,10 +24,10 @@ import android.support.annotation.*; import android.support.v7.widget.Toolbar; import android.widget.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.BuildConfig; import org.isoron.uhabits.*; import org.isoron.uhabits.R; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.intents.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.utils.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.java index e13368916..f959bee62 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.java @@ -21,8 +21,8 @@ package org.isoron.uhabits.activities.common.dialogs; import android.content.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.utils.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java index cf5ef4b89..83fed5857 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java @@ -24,8 +24,8 @@ import android.support.v7.app.*; import com.google.auto.factory.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.R; -import org.isoron.uhabits.activities.*; import butterknife.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java index 93504ee7e..c2bad78f4 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java @@ -28,9 +28,9 @@ import android.view.*; import com.android.datetimepicker.time.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.R; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.views.*; import org.isoron.uhabits.commands.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java index ff8e50d8a..462c90645 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java @@ -22,6 +22,7 @@ package org.isoron.uhabits.activities.habits.list; import android.content.*; import android.os.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.habits.list.model.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java index 4f8161d40..fd36e8293 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java @@ -19,8 +19,8 @@ package org.isoron.uhabits.activities.habits.list; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.utils.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java index efd734938..3e45a6411 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java @@ -21,8 +21,8 @@ package org.isoron.uhabits.activities.habits.list; import android.support.annotation.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.commands.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java index aa3826c4c..68b8ae69b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java @@ -22,6 +22,7 @@ package org.isoron.uhabits.activities.habits.list; import android.support.annotation.*; import android.view.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.activities.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java index 538d8ae5a..bc120ea6d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java @@ -25,8 +25,8 @@ import android.support.v7.widget.Toolbar; import android.view.*; import android.widget.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.R; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java index 6c0a6f9ce..c26974e95 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java @@ -28,6 +28,7 @@ import android.text.*; import android.view.*; import android.widget.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java index 9543fe352..ca63f925c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java @@ -22,10 +22,10 @@ package org.isoron.uhabits.activities.habits.list; import android.support.annotation.*; import android.view.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java index 949794fbf..4367bbb23 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java @@ -23,7 +23,7 @@ import android.support.annotation.*; import android.support.v7.widget.*; import android.view.*; -import org.isoron.uhabits.activities.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.activities.habits.list.*; import org.isoron.uhabits.activities.habits.list.views.*; import org.isoron.uhabits.models.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java index 7d9a90eef..611b979b5 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java @@ -24,8 +24,8 @@ import android.net.*; import android.os.*; import android.support.annotation.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.models.*; /** diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java index e1974c23e..497ea8f61 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java @@ -19,8 +19,8 @@ package org.isoron.uhabits.activities.habits.show; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java index c4a463199..960e5abfb 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.activities.habits.show; import android.support.annotation.*; -import org.isoron.uhabits.activities.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java index bf4cbee25..92f29ecaf 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java @@ -19,7 +19,7 @@ package org.isoron.uhabits.activities.habits.show; -import org.isoron.uhabits.activities.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.models.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java index 7c2f16364..42f888014 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java @@ -24,8 +24,8 @@ import android.os.*; import android.support.annotation.*; import android.support.v7.widget.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.R; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.habits.show.views.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.utils.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java index ec61d3b8f..d1f680c52 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.activities.habits.show; import android.support.annotation.*; -import org.isoron.uhabits.activities.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.*; import org.isoron.uhabits.models.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java index 03f688a06..6d157f09e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java @@ -22,8 +22,8 @@ package org.isoron.uhabits.activities.habits.show; import android.support.annotation.*; import android.view.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.tasks.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.java index 914e7e714..15bfce36f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.java @@ -21,8 +21,8 @@ package org.isoron.uhabits.activities.settings; import android.os.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.utils.*; /** diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.java index d92e73480..3ca38f919 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.java @@ -21,8 +21,8 @@ package org.isoron.uhabits.automation; import android.os.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.models.*; public class EditSettingActivity extends BaseActivity diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.java index 10fad0a0d..bcd0061b8 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.java @@ -25,8 +25,8 @@ import android.support.v7.widget.*; import android.support.v7.widget.Toolbar; import android.widget.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.R; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.utils.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.java b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.java index a53547654..5757a4b83 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.java @@ -24,6 +24,7 @@ import android.content.*; import android.os.*; import android.support.annotation.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java index 12ef4c65b..cb3a8867c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java @@ -24,6 +24,7 @@ import android.content.*; import android.net.*; import android.support.annotation.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.receivers.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java index bfcf5886f..6ca1ffddd 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java @@ -27,6 +27,7 @@ import android.util.*; import com.activeandroid.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.utils.DatabaseUtils; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java index 838e4b4a1..bfff186b8 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java @@ -26,6 +26,7 @@ import android.support.annotation.*; import android.support.v4.app.*; import android.support.v4.app.NotificationCompat.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.intents.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/Preferences.java b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/Preferences.java index 878aaa681..33d324851 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/Preferences.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/Preferences.java @@ -22,6 +22,7 @@ package org.isoron.uhabits.preferences; import android.content.*; import android.preference.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.*; import org.isoron.uhabits.models.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java index 56566f639..0fb10a8d4 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java @@ -22,6 +22,7 @@ package org.isoron.uhabits.preferences; import android.content.*; import android.preference.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java index ebfee4be8..101786103 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java @@ -23,6 +23,7 @@ import android.content.*; import android.support.annotation.*; import android.util.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.preferences.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java index 1b0abf3a3..2af56b28d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java @@ -24,7 +24,7 @@ import android.support.annotation.*; import com.google.auto.factory.*; -import org.isoron.uhabits.AppContext; +import org.isoron.androidbase.AppContext; import org.isoron.uhabits.io.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.utils.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java index 26f523194..b731071d6 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java @@ -25,8 +25,7 @@ import android.support.annotation.*; import com.google.auto.factory.AutoFactory; import com.google.auto.factory.Provided; -import org.isoron.uhabits.AppContext; -import org.isoron.uhabits.activities.ActivityContext; +import org.isoron.androidbase.AppContext; import org.isoron.uhabits.utils.*; import java.io.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/FileUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/FileUtils.java index 4cee13ac3..685480614 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/FileUtils.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/FileUtils.java @@ -25,8 +25,6 @@ import android.support.annotation.*; import android.support.v4.content.*; import android.util.*; -import org.isoron.uhabits.*; - import java.io.*; public abstract class FileUtils diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java index 30021ae71..340505d70 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java @@ -19,7 +19,7 @@ package org.isoron.uhabits.utils; -import org.isoron.uhabits.activities.*; +import org.isoron.androidbase.activities.*; import java.util.*; import java.util.concurrent.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.java index 72f3e441a..1d326a46a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.java @@ -23,7 +23,7 @@ import android.appwidget.*; import android.content.*; import android.support.annotation.*; -import org.isoron.uhabits.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.tasks.*; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java index cf3050970..c3bef6aab 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java @@ -27,6 +27,7 @@ import android.support.v7.widget.Toolbar; import android.view.*; import android.widget.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.junit.*; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseScreenTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseScreenTest.java index f087aca4d..0cbcee956 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseScreenTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseScreenTest.java @@ -25,6 +25,7 @@ import android.support.v7.view.ActionMode; import android.support.v7.widget.*; import android.view.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java index 74b71a74b..e963cf808 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java @@ -19,8 +19,8 @@ package org.isoron.uhabits.activities.habits.list; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java index c457fe0a7..c3cf921c7 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java @@ -21,6 +21,7 @@ package org.isoron.uhabits.activities.habits.list; import android.view.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.habits.list.model.*; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java index e292c3b56..888c8eeba 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java @@ -22,6 +22,7 @@ package org.isoron.uhabits.activities.habits.list; import android.content.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; From 370e7343d7e5b73b28dd4df845446f917e8c93d8 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Thu, 25 May 2017 10:00:56 -0400 Subject: [PATCH 07/27] Move commands to uhabits-core --- .../habits/list/ListHabitsScreen.java | 9 ++++-- .../uhabits/commands/CommandParser.java | 25 +++++++++++++++ .../org/isoron/uhabits/sync/SyncManager.java | 14 ++++++++- .../isoron/uhabits/utils/DatabaseUtils.java | 7 ----- .../activities/BaseActivityTest.java | 4 +-- .../activities/BaseScreenTest.java | 4 +-- .../habits/list/ListHabitsScreenTest.java | 8 +++-- uhabits-core/build.gradle | 1 + .../commands/ArchiveHabitsCommand.java | 13 -------- .../commands/ChangeHabitColorCommand.java | 13 -------- .../org/isoron/uhabits/commands/Command.java | 25 ++------------- .../uhabits/commands/CommandRunner.java | 0 .../uhabits/commands/CreateHabitCommand.java | 13 -------- .../commands/CreateRepetitionCommand.java | 0 .../uhabits/commands/DeleteHabitsCommand.java | 13 -------- .../uhabits/commands/EditHabitCommand.java | 13 -------- .../commands/ToggleRepetitionCommand.java | 0 .../commands/UnarchiveHabitsCommand.java | 13 -------- .../isoron/uhabits/commands/package-info.java | 0 .../org/isoron/uhabits/utils/StringUtils.java | 31 +++++++++++++++++++ 20 files changed, 90 insertions(+), 116 deletions(-) rename uhabits-android/src/test/java/org/isoron/{uhabits => androidbase}/activities/BaseActivityTest.java (98%) rename uhabits-android/src/test/java/org/isoron/{uhabits => androidbase}/activities/BaseScreenTest.java (98%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java (91%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java (92%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/commands/Command.java (80%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/commands/CommandRunner.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java (92%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/commands/CreateRepetitionCommand.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java (91%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java (93%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java (91%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/commands/package-info.java (100%) create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/utils/StringUtils.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java index c26974e95..62c968a68 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java @@ -90,6 +90,9 @@ public class ListHabitsScreen extends BaseScreen @NonNull private Preferences prefs; + @NonNull + private final CommandParser commandParser; + @Inject public ListHabitsScreen(@NonNull BaseActivity activity, @NonNull CommandRunner commandRunner, @@ -99,9 +102,11 @@ public class ListHabitsScreen extends BaseScreen @NonNull ConfirmDeleteDialogFactory confirmDeleteDialogFactory, @NonNull ColorPickerDialogFactory colorPickerFactory, @NonNull EditHabitDialogFactory editHabitDialogFactory, - @NonNull Preferences prefs) + @NonNull Preferences prefs, + @NonNull CommandParser commandParser) { super(activity); + this.commandParser = commandParser; setRootView(rootView); this.prefs = prefs; this.colorPickerFactory = colorPickerFactory; @@ -122,7 +127,7 @@ public class ListHabitsScreen extends BaseScreen @Nullable Long refreshKey) { if(command.isRemote()) return; - showMessage(command.getExecuteStringId()); + showMessage(commandParser.getExecuteString(command)); } public void onDettached() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java index 1adf190a4..370c43653 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java @@ -23,6 +23,7 @@ import android.support.annotation.*; import com.google.gson.*; +import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.json.*; @@ -42,6 +43,30 @@ public class CommandParser this.modelFactory = modelFactory; } + @StringRes + public Integer getExecuteString(@NonNull Command command) + { + if(command instanceof ArchiveHabitsCommand) + return R.string.toast_habit_archived; + + if(command instanceof ChangeHabitColorCommand) + return R.string.toast_habit_changed; + + if(command instanceof CreateHabitCommand) + return R.string.toast_habit_created; + + if(command instanceof DeleteHabitsCommand) + return R.string.toast_habit_deleted; + + if(command instanceof EditHabitCommand) + return R.string.toast_habit_changed; + + if(command instanceof UnarchiveHabitsCommand) + return R.string.toast_habit_unarchived; + + return null; + } + @NonNull public Command parse(@NonNull JSONObject json) throws JSONException { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java index 101786103..6bebe1a5d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java @@ -108,13 +108,25 @@ public class SyncManager implements CommandRunner.Listener connect(context, serverURL); } + private JSONObject toJSONObject(String json) + { + try + { + return new JSONObject(json); + } + catch (JSONException e) + { + throw new RuntimeException(e); + } + } + @Override public void onCommandExecuted(@NonNull Command command, @Nullable Long refreshKey) { if (command.isRemote()) return; - JSONObject msg = command.toJson(); + JSONObject msg = toJSONObject(command.toJson()); Long now = new Date().getTime(); Event e = new Event(command.getId(), now, msg.toString()); e.save(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java index 146842e2c..f4e9445a3 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java @@ -30,9 +30,7 @@ import org.isoron.uhabits.models.sqlite.records.*; import org.isoron.uhabits.sync.*; import java.io.*; -import java.math.*; import java.text.*; -import java.util.*; public abstract class DatabaseUtils { @@ -70,11 +68,6 @@ public abstract class DatabaseUtils return databaseFilename; } - public static String getRandomId() - { - return new BigInteger(260, new Random()).toString(32).substring(0, 32); - } - @SuppressWarnings("unchecked") public static void initializeActiveAndroid(Context context) { diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java b/uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseActivityTest.java similarity index 98% rename from uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java rename to uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseActivityTest.java index c3bef6aab..80fd4c592 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseActivityTest.java +++ b/uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseActivityTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.androidbase.activities; import android.content.*; import android.os.*; @@ -27,8 +27,8 @@ import android.support.v7.widget.Toolbar; import android.view.*; import android.widget.*; -import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseScreenTest.java b/uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseScreenTest.java similarity index 98% rename from uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseScreenTest.java rename to uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseScreenTest.java index 0cbcee956..1b984d853 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/BaseScreenTest.java +++ b/uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseScreenTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.androidbase.activities; import android.content.*; import android.support.annotation.*; @@ -25,7 +25,6 @@ import android.support.v7.view.ActionMode; import android.support.v7.widget.*; import android.view.*; -import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.junit.*; import org.junit.runner.*; @@ -38,6 +37,7 @@ import static android.view.View.*; import static junit.framework.Assert.assertNotNull; import static org.hamcrest.core.IsEqual.*; import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Mockito.*; import static org.robolectric.Robolectric.*; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java index 888c8eeba..5d5a68037 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java @@ -71,6 +71,8 @@ public class ListHabitsScreenTest extends BaseUnitTest private Preferences prefs; + private CommandParser commandParser; + @Before @Override public void setUp() @@ -86,10 +88,11 @@ public class ListHabitsScreenTest extends BaseUnitTest colorPickerDialogFactory = mock(ColorPickerDialogFactory.class); dialogFactory = mock(EditHabitDialogFactory.class); prefs = mock(Preferences.class); + commandParser = mock(CommandParser.class); screen = spy(new ListHabitsScreen(activity, commandRunner, rootView, intentFactory, themeSwitcher, confirmDeleteDialogFactory, - colorPickerDialogFactory, dialogFactory, prefs)); + colorPickerDialogFactory, dialogFactory, prefs, commandParser)); doNothing().when(screen).showMessage(anyInt()); @@ -122,7 +125,8 @@ public class ListHabitsScreenTest extends BaseUnitTest public void testOnCommand() { Command c = mock(Command.class); - when(c.getExecuteStringId()).thenReturn(R.string.toast_habit_deleted); + when(commandParser.getExecuteString(c)).thenReturn( + R.string.toast_habit_deleted); screen.onCommandExecuted(c, null); verify(screen).showMessage(R.string.toast_habit_deleted); } diff --git a/uhabits-core/build.gradle b/uhabits-core/build.gradle index 914660c4c..ebdeef42e 100644 --- a/uhabits-core/build.gradle +++ b/uhabits-core/build.gradle @@ -26,6 +26,7 @@ dependencies { implementation 'com.google.auto.factory:auto-factory:1.0-beta3' implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation 'org.apache.commons:commons-lang3:3.5' + implementation 'com.google.code.gson:gson:2.7' implementation ('com.opencsv:opencsv:3.9') { exclude group: 'commons-logging', module: 'commons-logging' diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java similarity index 91% rename from uhabits-android/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java index 1d508356f..0773b64e7 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java @@ -21,7 +21,6 @@ package org.isoron.uhabits.commands; import android.support.annotation.*; -import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import java.util.*; @@ -50,18 +49,6 @@ public class ArchiveHabitsCommand extends Command habitList.update(selected); } - @Override - public Integer getExecuteStringId() - { - return R.string.toast_habit_archived; - } - - @Override - public Integer getUndoStringId() - { - return R.string.toast_habit_unarchived; - } - @Override public void undo() { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java similarity index 92% rename from uhabits-android/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java index ab1e4b7e3..b3683901f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java @@ -21,7 +21,6 @@ package org.isoron.uhabits.commands; import android.support.annotation.*; -import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import java.util.*; @@ -61,18 +60,6 @@ public class ChangeHabitColorCommand extends Command habitList.update(selected); } - @Override - public Integer getExecuteStringId() - { - return R.string.toast_habit_changed; - } - - @Override - public Integer getUndoStringId() - { - return R.string.toast_habit_changed; - } - @NonNull @Override public Record toRecord() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/Command.java b/uhabits-core/src/main/java/org/isoron/uhabits/commands/Command.java similarity index 80% rename from uhabits-android/src/main/java/org/isoron/uhabits/commands/Command.java rename to uhabits-core/src/main/java/org/isoron/uhabits/commands/Command.java index 6059845e9..721efde98 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/commands/Command.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/commands/Command.java @@ -24,7 +24,6 @@ import android.support.annotation.*; import com.google.gson.*; import org.isoron.uhabits.utils.*; -import org.json.*; /** * A Command represents a desired set of changes that should be performed on the @@ -43,7 +42,7 @@ public abstract class Command public Command() { - id = DatabaseUtils.getRandomId(); + id = StringUtils.getRandomId(); isRemote = false; } @@ -55,11 +54,6 @@ public abstract class Command public abstract void execute(); - public Integer getExecuteStringId() - { - return null; - } - public String getId() { return id; @@ -70,11 +64,6 @@ public abstract class Command this.id = id; } - public Integer getUndoStringId() - { - return null; - } - public boolean isRemote() { return isRemote; @@ -86,17 +75,9 @@ public abstract class Command } @NonNull - public JSONObject toJson() + public String toJson() { - try - { - String json = new GsonBuilder().create().toJson(toRecord()); - return new JSONObject(json); - } - catch (JSONException e) - { - throw new RuntimeException(e); - } + return new GsonBuilder().create().toJson(toRecord()); } @NonNull diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandRunner.java b/uhabits-core/src/main/java/org/isoron/uhabits/commands/CommandRunner.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandRunner.java rename to uhabits-core/src/main/java/org/isoron/uhabits/commands/CommandRunner.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java similarity index 92% rename from uhabits-android/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java index c0800b8e6..61fbb9d4d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java @@ -23,7 +23,6 @@ import android.support.annotation.*; import com.google.auto.factory.*; -import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; /** @@ -62,18 +61,6 @@ public class CreateHabitCommand extends Command savedId = savedHabit.getId(); } - @Override - public Integer getExecuteStringId() - { - return R.string.toast_habit_created; - } - - @Override - public Integer getUndoStringId() - { - return R.string.toast_habit_deleted; - } - @NonNull @Override public Record toRecord() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CreateRepetitionCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/commands/CreateRepetitionCommand.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/commands/CreateRepetitionCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/commands/CreateRepetitionCommand.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java similarity index 91% rename from uhabits-android/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java index fbc74c257..082990c28 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java @@ -21,7 +21,6 @@ package org.isoron.uhabits.commands; import android.support.annotation.*; -import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import java.util.*; @@ -52,23 +51,11 @@ public class DeleteHabitsCommand extends Command habitList.remove(h); } - @Override - public Integer getExecuteStringId() - { - return R.string.toast_habit_deleted; - } - public List getSelected() { return Collections.unmodifiableList(selected); } - @Override - public Integer getUndoStringId() - { - return R.string.toast_habit_restored; - } - @Override @NonNull public Record toRecord() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java similarity index 93% rename from uhabits-android/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java index 0f4ccb6aa..48c37ecc1 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java @@ -23,7 +23,6 @@ import android.support.annotation.*; import com.google.auto.factory.*; -import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; /** @@ -77,18 +76,6 @@ public class EditHabitCommand extends Command copyAttributes(this.modified); } - @Override - public Integer getExecuteStringId() - { - return R.string.toast_habit_changed; - } - - @Override - public Integer getUndoStringId() - { - return R.string.toast_habit_changed_back; - } - @NonNull @Override public Record toRecord() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java similarity index 91% rename from uhabits-android/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java index d66425348..a9e4f608c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java @@ -21,7 +21,6 @@ package org.isoron.uhabits.commands; import android.support.annotation.*; -import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import java.util.*; @@ -51,18 +50,6 @@ public class UnarchiveHabitsCommand extends Command habitList.update(selected); } - @Override - public Integer getExecuteStringId() - { - return R.string.toast_habit_unarchived; - } - - @Override - public Integer getUndoStringId() - { - return R.string.toast_habit_archived; - } - @Override @NonNull public Record toRecord() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/package-info.java b/uhabits-core/src/main/java/org/isoron/uhabits/commands/package-info.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/commands/package-info.java rename to uhabits-core/src/main/java/org/isoron/uhabits/commands/package-info.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/utils/StringUtils.java b/uhabits-core/src/main/java/org/isoron/uhabits/utils/StringUtils.java new file mode 100644 index 000000000..2a22c78b6 --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/utils/StringUtils.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2017 Á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.utils; + +import java.math.*; +import java.util.*; + +public class StringUtils +{ + public static String getRandomId() + { + return new BigInteger(260, new Random()).toString(32).substring(0, 32); + } +} From cb4ab3b436d41a6fd1f0546921be9301399f8d29 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Thu, 25 May 2017 12:23:09 -0400 Subject: [PATCH 08/27] Move ExportCSVTask to uhabits-core --- uhabits-android/build.gradle | 17 +++++------ .../org/isoron/uhabits/BaseAndroidTest.java | 5 ++++ .../java/org/isoron/uhabits/BaseViewTest.java | 4 ++- .../uhabits/io/HabitsCSVExporterTest.java | 2 +- .../org/isoron/uhabits/io/ImportTest.java | 1 + .../uhabits/tasks/ExportCSVTaskTest.java | 4 ++- .../uhabits/tasks/ExportDBTaskTest.java | 19 ++++++------ .../androidbase/activities/BaseMenu.java | 6 ++++ .../androidbase/activities/BaseSystem.java | 18 ++++++++++- .../utils/FileUtils.java | 30 ++++--------------- .../java/org/isoron/uhabits/AppComponent.java | 1 + .../habits/list/ListHabitsController.java | 11 ++++--- .../habits/list/ListHabitsScreen.java | 1 + .../habits/show/ShowHabitsMenu.java | 10 ++++++- .../uhabits/commands/CommandParser.java | 20 ++++++------- .../org/isoron/uhabits/io/LoopDBImporter.java | 2 +- .../org/isoron/uhabits/sync/SyncManager.java | 2 +- .../{ => android}/AndroidTaskRunner.java | 5 ++-- .../tasks/{ => android}/ExportDBTask.java | 22 +++++++++----- .../tasks/{ => android}/ImportDataTask.java | 5 ++-- .../tasks/{ => android}/package-info.java | 4 +-- .../isoron/uhabits/utils/DatabaseUtils.java | 1 + .../habits/show/ShowHabitsMenuTest.java | 8 +++-- uhabits-core/build.gradle | 3 +- .../isoron/uhabits/io/HabitsCSVExporter.java | 0 .../isoron/uhabits/tasks/ExportCSVTask.java | 21 +++++-------- 26 files changed, 126 insertions(+), 96 deletions(-) rename uhabits-android/src/main/java/org/isoron/{uhabits => androidbase}/utils/FileUtils.java (75%) rename uhabits-android/src/main/java/org/isoron/uhabits/tasks/{ => android}/AndroidTaskRunner.java (95%) rename uhabits-android/src/main/java/org/isoron/uhabits/tasks/{ => android}/ExportDBTask.java (76%) rename uhabits-android/src/main/java/org/isoron/uhabits/tasks/{ => android}/ImportDataTask.java (93%) rename uhabits-android/src/main/java/org/isoron/uhabits/tasks/{ => android}/package-info.java (88%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java (100%) rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java (80%) diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle index 612f3fa36..ed401e697 100644 --- a/uhabits-android/build.gradle +++ b/uhabits-android/build.gradle @@ -33,8 +33,8 @@ android { } compileOptions { - targetCompatibility 1.8 - sourceCompatibility 1.8 + targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_1_8 } testOptions { @@ -52,7 +52,6 @@ android { } dependencies { - implementation project(":uhabits-core") implementation 'com.android.support:appcompat-v7:25.3.1' @@ -61,7 +60,6 @@ dependencies { implementation 'com.android.support:support-v4:25.3.1' implementation 'com.getpebble:pebblekit:3.0.0' implementation 'com.github.paolorotolo:appintro:3.4.0' - implementation 'com.google.auto.factory:auto-factory:1.0-beta3' implementation 'com.google.dagger:dagger:2.11-rc2' implementation 'com.jakewharton:butterknife:8.6.1-SNAPSHOT' implementation 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' @@ -75,18 +73,21 @@ dependencies { testImplementation 'org.hamcrest:hamcrest-library:1.4-atlassian-1' testImplementation 'org.mockito:mockito-core:2.8.9' testImplementation 'org.json:json:20160810' + testImplementation 'org.robolectric:robolectric:3.4-rc2' androidTestImplementation 'com.android.support:support-annotations:25.3.1' androidTestImplementation 'com.android.support.test:rules:0.5' androidTestImplementation 'com.android.support.test:runner:0.5' - androidTestImplementation 'com.google.auto.factory:auto-factory:1.0-beta3' androidTestImplementation "com.google.dexmaker:dexmaker:1.2" androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2' androidTestImplementation 'org.mockito:mockito-core:1.10.19' androidTestImplementation 'com.google.guava:guava:20.0' compileOnly 'javax.annotation:jsr250-api:1.0' + compileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' + + androidTestCompileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' annotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' @@ -99,12 +100,10 @@ dependencies { androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' androidTestAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' androidTestAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' - - implementation ('com.opencsv:opencsv:3.9') { + implementation('com.opencsv:opencsv:3.9') { exclude group: 'commons-logging', module: 'commons-logging' } - - implementation ('io.socket:socket.io-client:+') { + implementation('io.socket:socket.io-client:+') { exclude group: 'org.json', module: 'json' } } diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java index 2409d9b6d..f1c17ee25 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java @@ -28,6 +28,7 @@ import android.support.test.*; import android.util.*; import org.isoron.androidbase.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.tasks.*; @@ -68,6 +69,8 @@ public class BaseAndroidTest protected ModelFactory modelFactory; + protected BaseSystem baseSystem; + @Before public void setUp() { @@ -90,6 +93,8 @@ public class BaseAndroidTest .appModule(new AppModule(targetContext.getApplicationContext())) .build(); + baseSystem = new BaseSystem(targetContext); + HabitsApplication.setComponent(component); prefs = component.getPreferences(); habitList = component.getHabitList(); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java index c6d73d59f..2237abac1 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java @@ -24,6 +24,8 @@ import android.support.annotation.*; import android.view.*; import android.widget.*; +import org.isoron.androidbase.activities.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.*; @@ -170,7 +172,7 @@ public class BaseViewTest extends BaseAndroidTest { File dir = FileUtils.getSDCardDir("test-screenshots"); if (dir == null) - dir = FileUtils.getFilesDir(targetContext, "test-screenshots"); + dir = baseSystem.getFilesDir("test-screenshots"); if (dir == null) throw new RuntimeException( "Could not find suitable dir for screenshots"); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java index 4a82c1239..c784f2a9a 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java @@ -24,9 +24,9 @@ import android.support.test.*; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java index 343e64ea2..073e0799c 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java @@ -24,6 +24,7 @@ import android.support.test.*; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.utils.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java index aa999d7b3..7c2d3a641 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java @@ -54,9 +54,11 @@ public class ExportCSVTaskTest extends BaseAndroidTest List selected = new LinkedList<>(); for (Habit h : habitList) selected.add(h); + File outputDir = baseSystem.getFilesDir("CSV"); + assertNotNull(outputDir); taskRunner.execute( - new ExportCSVTask(targetContext,habitList, selected, archiveFilename -> { + new ExportCSVTask(habitList, selected, outputDir, archiveFilename -> { assertThat(archiveFilename, is(not(nullValue()))); File f = new File(archiveFilename); assertTrue(f.exists()); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java index 76f5e2315..c2aaf6514 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java @@ -23,20 +23,19 @@ import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.tasks.android.*; import org.junit.*; import org.junit.runner.*; import java.io.*; import static junit.framework.Assert.*; -import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.CoreMatchers.*; -import static org.hamcrest.core.IsNot.not; @RunWith(AndroidJUnit4.class) @MediumTest public class ExportDBTaskTest extends BaseAndroidTest { + @Override @Before public void setUp() { @@ -46,13 +45,13 @@ public class ExportDBTaskTest extends BaseAndroidTest @Test public void testExportCSV() throws Throwable { - ExportDBTask task = new ExportDBTask(targetContext, filename -> { - assertThat(filename, is(not(nullValue()))); - - File f = new File(filename); - assertTrue(f.exists()); - assertTrue(f.canRead()); - }); + ExportDBTask task = + new ExportDBTask(targetContext, baseSystem, filename -> { + assertNotNull(filename); + File f = new File(filename); + assertTrue(f.exists()); + assertTrue(f.canRead()); + }); taskRunner.execute(task); } diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseMenu.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseMenu.java index 0b30aec2b..0dbaaac92 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseMenu.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseMenu.java @@ -41,6 +41,12 @@ public abstract class BaseMenu this.activity = activity; } + @NonNull + public BaseActivity getActivity() + { + return activity; + } + /** * Declare that the menu has changed, and should be recreated. */ diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSystem.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSystem.java index bbb47b685..4a372ab72 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSystem.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSystem.java @@ -22,8 +22,11 @@ package org.isoron.androidbase.activities; import android.content.*; import android.os.*; import android.support.annotation.*; +import android.support.v4.content.*; +import android.util.*; import android.view.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.utils.*; @@ -52,6 +55,19 @@ public class BaseSystem this.context = context; } + @Nullable + public File getFilesDir(@Nullable String relativePath) + { + File externalFilesDirs[] = ContextCompat.getExternalFilesDirs(context, null); + if (externalFilesDirs == null) + { + Log.e("BaseSystem", "getFilesDir: getExternalFilesDirs returned null"); + return null; + } + + return FileUtils.getDir(externalFilesDirs, relativePath); + } + /** * Captures a bug report and saves it to a file in the SD card. *

@@ -70,7 +86,7 @@ public class BaseSystem if (context == null) throw new RuntimeException( "application context should not be null"); - File dir = FileUtils.getFilesDir(context, "Logs"); + File dir = getFilesDir("Logs"); if (dir == null) throw new IOException("log dir should not be null"); File logFile = diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/FileUtils.java b/uhabits-android/src/main/java/org/isoron/androidbase/utils/FileUtils.java similarity index 75% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/FileUtils.java rename to uhabits-android/src/main/java/org/isoron/androidbase/utils/FileUtils.java index 685480614..59ca4a9b4 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/FileUtils.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/utils/FileUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,12 +17,10 @@ * with this program. If not, see . */ -package org.isoron.uhabits.utils; +package org.isoron.androidbase.utils; -import android.content.*; import android.os.*; import android.support.annotation.*; -import android.support.v4.content.*; import android.util.*; import java.io.*; @@ -52,8 +50,8 @@ public abstract class FileUtils } @Nullable - private static File getDir(@NonNull File potentialParentDirs[], - @Nullable String relativePath) + public static File getDir(@NonNull File potentialParentDirs[], + @Nullable String relativePath) { if (relativePath == null) relativePath = ""; @@ -67,7 +65,7 @@ public abstract class FileUtils if (chosenDir == null) { - Log.e("DatabaseHelper", + Log.e("FileUtils", "getDir: all potential parents are null or non-writable"); return null; } @@ -76,7 +74,7 @@ public abstract class FileUtils String.format("%s/%s/", chosenDir.getAbsolutePath(), relativePath)); if (!dir.exists() && !dir.mkdirs()) { - Log.e("DatabaseHelper", + Log.e("FileUtils", "getDir: chosen dir does not exist and cannot be created"); return null; } @@ -84,22 +82,6 @@ public abstract class FileUtils return dir; } - @Nullable - public static File getFilesDir(@NonNull Context context, @Nullable String relativePath) - { - File externalFilesDirs[] = - ContextCompat.getExternalFilesDirs(context, null); - - if (externalFilesDirs == null) - { - Log.e("DatabaseHelper", - "getFilesDir: getExternalFilesDirs returned null"); - return null; - } - - return getDir(externalFilesDirs, relativePath); - } - @Nullable public static File getSDCardDir(@Nullable String relativePath) { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java index 4c39f48cc..4795df75e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java @@ -32,6 +32,7 @@ import org.isoron.uhabits.notifications.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.sync.*; import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.tasks.android.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java index 3e45a6411..9e0abbeae 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java @@ -29,6 +29,7 @@ import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.tasks.android.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.*; @@ -105,11 +106,13 @@ public class ListHabitsController { List selected = new LinkedList<>(); for (Habit h : habitList) selected.add(h); + File outputDir = system.getFilesDir("CSV"); - taskRunner.execute(exportCSVFactory.create(selected, filename -> { - if (filename != null) screen.showSendFileScreen(filename); - else screen.showMessage(R.string.could_not_export); - })); + taskRunner.execute( + exportCSVFactory.create(selected, outputDir, filename -> { + if (filename != null) screen.showSendFileScreen(filename); + else screen.showMessage(R.string.could_not_export); + })); } public void onExportDB() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java index 62c968a68..6297a37d2 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java @@ -29,6 +29,7 @@ import android.view.*; import android.widget.*; import org.isoron.androidbase.activities.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java index 6d157f09e..01f079323 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java @@ -27,6 +27,7 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.tasks.*; +import java.io.*; import java.util.*; import javax.inject.*; @@ -34,6 +35,9 @@ import javax.inject.*; @ActivityScope public class ShowHabitsMenu extends BaseMenu { + @NonNull + private final BaseSystem system; + @NonNull private final ShowHabitScreen screen; @@ -48,12 +52,14 @@ public class ShowHabitsMenu extends BaseMenu @Inject public ShowHabitsMenu(@NonNull BaseActivity activity, + @NonNull BaseSystem system, @NonNull ShowHabitScreen screen, @NonNull Habit habit, @NonNull ExportCSVTaskFactory exportCSVFactory, @NonNull TaskRunner taskRunner) { super(activity); + this.system = system; this.screen = screen; this.habit = habit; this.taskRunner = taskRunner; @@ -64,7 +70,9 @@ public class ShowHabitsMenu extends BaseMenu { List selected = new LinkedList<>(); selected.add(habit); - ExportCSVTask task = exportCSVFactory.create(selected, filename -> { + File outputDir = system.getFilesDir("CSV"); + ExportCSVTask task = exportCSVFactory.create(selected, + outputDir, filename -> { if (filename != null) screen.showSendFileScreen(filename); else screen.showMessage(R.string.could_not_export); }); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java index 370c43653..d7331e458 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java @@ -68,41 +68,41 @@ public class CommandParser } @NonNull - public Command parse(@NonNull JSONObject json) throws JSONException + public Command parse(@NonNull String json) throws JSONException { - String event = json.getString("event"); + String event = new JSONObject(json).getString("event"); Gson gson = new GsonBuilder().create(); if (event.equals("Archive")) return gson - .fromJson(json.toString(), ArchiveHabitsCommand.Record.class) + .fromJson(json, ArchiveHabitsCommand.Record.class) .toCommand(habitList); if (event.equals("ChangeColor")) return gson - .fromJson(json.toString(), ChangeHabitColorCommand.Record.class) + .fromJson(json, ChangeHabitColorCommand.Record.class) .toCommand(habitList); if (event.equals("CreateHabit")) return gson - .fromJson(json.toString(), CreateHabitCommand.Record.class) + .fromJson(json, CreateHabitCommand.Record.class) .toCommand(modelFactory, habitList); if (event.equals("CreateRep")) return gson - .fromJson(json.toString(), CreateRepetitionCommand.Record.class) + .fromJson(json, CreateRepetitionCommand.Record.class) .toCommand(habitList); if (event.equals("DeleteHabit")) return gson - .fromJson(json.toString(), DeleteHabitsCommand.Record.class) + .fromJson(json, DeleteHabitsCommand.Record.class) .toCommand(habitList); if (event.equals("EditHabit")) return gson - .fromJson(json.toString(), EditHabitCommand.Record.class) + .fromJson(json, EditHabitCommand.Record.class) .toCommand(modelFactory, habitList); if (event.equals("Toggle")) return gson - .fromJson(json.toString(), ToggleRepetitionCommand.Record.class) + .fromJson(json, ToggleRepetitionCommand.Record.class) .toCommand(habitList); if (event.equals("Unarchive")) return gson - .fromJson(json.toString(), UnarchiveHabitsCommand.Record.class) + .fromJson(json, UnarchiveHabitsCommand.Record.class) .toCommand(habitList); throw new IllegalStateException("Unknown command"); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java index 6ca1ffddd..1c7559e8a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java @@ -28,10 +28,10 @@ import android.util.*; import com.activeandroid.*; import org.isoron.androidbase.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.utils.DatabaseUtils; -import org.isoron.uhabits.utils.*; import java.io.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java index 6bebe1a5d..833e1b936 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java @@ -316,7 +316,7 @@ public class SyncManager implements CommandRunner.Listener private void executeCommand(JSONObject root) throws JSONException { - Command received = commandParser.parse(root); + Command received = commandParser.parse(root.toString()); received.setRemote(true); for (Event e : pendingConfirmation) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/AndroidTaskRunner.java similarity index 95% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/AndroidTaskRunner.java index e1626fe34..bb96eb05c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/AndroidTaskRunner.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,11 +17,12 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks; +package org.isoron.uhabits.tasks.android; import android.os.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.tasks.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ExportDBTask.java similarity index 76% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ExportDBTask.java index b731071d6..9c94c4dcb 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ExportDBTask.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,15 +17,16 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks; +package org.isoron.uhabits.tasks.android; -import android.content.Context; +import android.content.*; import android.support.annotation.*; -import com.google.auto.factory.AutoFactory; -import com.google.auto.factory.Provided; +import com.google.auto.factory.*; -import org.isoron.androidbase.AppContext; +import org.isoron.androidbase.*; +import org.isoron.androidbase.activities.*; +import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.utils.*; import java.io.*; @@ -38,11 +39,16 @@ public class ExportDBTask implements Task @NonNull private Context context; + private BaseSystem system; + @NonNull private final Listener listener; - public ExportDBTask(@Provided @AppContext @NonNull Context context, @NonNull Listener listener) + public ExportDBTask(@Provided @AppContext @NonNull Context context, + @Provided @NonNull BaseSystem system, + @NonNull Listener listener) { + this.system = system; this.listener = listener; this.context = context; } @@ -54,7 +60,7 @@ public class ExportDBTask implements Task try { - File dir = FileUtils.getFilesDir(context, "Backups"); + File dir = system.getFilesDir("Backups"); if (dir == null) return; filename = DatabaseUtils.saveDatabaseCopy(context, dir); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ImportDataTask.java similarity index 93% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ImportDataTask.java index e19e7b8fc..560795f99 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ImportDataTask.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,13 +17,14 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks; +package org.isoron.uhabits.tasks.android; import android.support.annotation.*; import com.google.auto.factory.*; import org.isoron.uhabits.io.*; +import org.isoron.uhabits.tasks.*; import java.io.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/package-info.java similarity index 88% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/package-info.java index cc837895e..b70215e3e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/package-info.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -21,4 +21,4 @@ * Provides async tasks for useful operations such as {@link * org.isoron.uhabits.tasks.ExportCSVTask}. */ -package org.isoron.uhabits.tasks; \ No newline at end of file +package org.isoron.uhabits.tasks.android; \ No newline at end of file diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java index f4e9445a3..f8126d685 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java @@ -24,6 +24,7 @@ import android.support.annotation.*; import com.activeandroid.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.sqlite.*; import org.isoron.uhabits.models.sqlite.records.*; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java index 90cfdf512..444fb0b48 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java @@ -21,6 +21,7 @@ package org.isoron.uhabits.activities.habits.show; import android.view.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.tasks.*; @@ -43,19 +44,20 @@ public class ShowHabitsMenuTest extends BaseUnitTest private TaskRunner taskRunner; - private ExportCSVTask task; + private BaseSystem system; @Override public void setUp() { super.setUp(); activity = mock(ShowHabitActivity.class); + system = mock(BaseSystem.class); screen = mock(ShowHabitScreen.class); habit = mock(Habit.class); exportCSVFactory = mock(ExportCSVTaskFactory.class); taskRunner = mock(TaskRunner.class); - menu = new ShowHabitsMenu(activity, screen, habit, exportCSVFactory, - taskRunner); + menu = new ShowHabitsMenu(activity, system, screen, habit, + exportCSVFactory, taskRunner); } @Test diff --git a/uhabits-core/build.gradle b/uhabits-core/build.gradle index ebdeef42e..e0ea34bed 100644 --- a/uhabits-core/build.gradle +++ b/uhabits-core/build.gradle @@ -21,9 +21,10 @@ apply plugin: 'java' dependencies { compileOnly 'javax.annotation:jsr250-api:1.0' + compileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' + implementation 'com.google.dagger:dagger:2.11-rc2' implementation 'com.android.support:support-annotations:25.3.1' - implementation 'com.google.auto.factory:auto-factory:1.0-beta3' implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation 'org.apache.commons:commons-lang3:3.5' implementation 'com.google.code.gson:gson:2.7' diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java b/uhabits-core/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java rename to uhabits-core/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java b/uhabits-core/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java similarity index 80% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java rename to uhabits-core/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java index 2af56b28d..a869848fb 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -19,15 +19,12 @@ package org.isoron.uhabits.tasks; -import android.content.Context; import android.support.annotation.*; import com.google.auto.factory.*; -import org.isoron.androidbase.AppContext; import org.isoron.uhabits.io.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; import java.io.*; import java.util.*; @@ -37,27 +34,26 @@ public class ExportCSVTask implements Task { private String archiveFilename; - @NonNull - private final Context context; - @NonNull private final List selectedHabits; + private File outputDir; + @NonNull private final ExportCSVTask.Listener listener; @NonNull private final HabitList habitList; - public ExportCSVTask(@Provided @AppContext @NonNull Context context, - @Provided @NonNull HabitList habitList, + public ExportCSVTask(@Provided @NonNull HabitList habitList, @NonNull List selectedHabits, + @NonNull File outputDir, @NonNull Listener listener) { - this.context = context; this.listener = listener; this.habitList = habitList; this.selectedHabits = selectedHabits; + this.outputDir = outputDir; } @Override @@ -65,11 +61,8 @@ public class ExportCSVTask implements Task { try { - File dir = FileUtils.getFilesDir(context, "CSV"); - if (dir == null) return; - HabitsCSVExporter exporter; - exporter = new HabitsCSVExporter(habitList, selectedHabits, dir); + exporter = new HabitsCSVExporter(habitList, selectedHabits, outputDir); archiveFilename = exporter.writeArchive(); } catch (IOException e) From 29d1de46e7f856a8f05eada6fcbcaa7d9de77ad8 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Thu, 25 May 2017 15:59:03 -0400 Subject: [PATCH 09/27] Reorganize tests --- uhabits-android/build.gradle | 74 +++--------- .../isoron/uhabits/AndroidTestComponent.java | 15 ++- .../org/isoron/uhabits/BaseAndroidTest.java | 17 +-- .../org/isoron/uhabits/HabitLoggerTest.java | 2 +- .../isoron/uhabits/HabitsApplicationTest.java | 2 +- .../common/views/FrequencyChartTest.java | 2 +- .../common/views/HistoryChartTest.java | 2 +- .../{activities => }/BaseSystem.java | 16 ++- .../CACertSSLContextProvider.java} | 12 +- .../activities/BaseExceptionHandler.java | 1 + .../androidbase/activities/BaseScreen.java | 25 ++++ .../java/org/isoron/uhabits/AppComponent.java | 6 + .../habits/list/ListHabitsActivity.java | 3 +- .../habits/list/ListHabitsComponent.java | 2 - .../habits/list/ListHabitsController.java | 1 + .../habits/list/views/HeaderView.java | 8 +- .../habits/show/ShowHabitsMenu.java | 1 + .../activities/settings/SettingsFragment.java | 9 +- .../notifications/NotificationTray.java | 2 +- .../RingtoneManager.java} | 33 +++-- .../org/isoron/uhabits/sync/SyncManager.java | 13 +- .../uhabits/tasks/android/ExportDBTask.java | 1 - .../org/isoron/uhabits/utils/ColorUtils.java | 1 - .../org/isoron/uhabits/utils/WidgetUtils.java | 59 --------- .../uhabits/widgets/BaseWidgetProvider.java | 40 +++++- .../habits/list/ListHabitsControllerTest.java | 3 +- .../habits/show/ShowHabitsMenuTest.java | 2 +- uhabits-core/build.gradle | 27 ++--- .../uhabits/tasks/SingleThreadTaskRunner.java | 12 -- .../isoron/uhabits/utils/MidnightTimer.java | 6 +- .../java/org/isoron/uhabits/BaseUnitTest.java | 61 ++++++++++ .../commands/ArchiveHabitsCommandTest.java | 2 +- .../commands/ChangeHabitColorCommandTest.java | 2 +- .../commands/CreateHabitCommandTest.java | 2 +- .../commands/CreateRepetitionCommandTest.java | 2 +- .../commands/DeleteHabitsCommandTest.java | 2 +- .../commands/EditHabitCommandTest.java | 2 +- .../commands/ToggleRepetitionCommandTest.java | 2 +- .../commands/UnarchiveHabitsCommandTest.java | 2 +- .../uhabits/models/CheckmarkListTest.java | 2 +- .../isoron/uhabits/models/HabitFixtures.java | 4 +- .../isoron/uhabits/models/HabitListTest.java | 114 +++++++++--------- .../org/isoron/uhabits/models/HabitTest.java | 11 +- .../uhabits/models/RepetitionListTest.java | 2 +- .../isoron/uhabits/models/ScoreListTest.java | 4 +- .../org/isoron/uhabits/models/ScoreTest.java | 2 +- .../isoron/uhabits/models/StreakListTest.java | 2 +- .../uhabits/models/WeekdayListTest.java | 2 +- .../tasks/SingleThreadTaskRunnerTest.java | 2 +- .../isoron/uhabits/utils/DateUtilsTest.java | 2 +- 50 files changed, 305 insertions(+), 316 deletions(-) rename uhabits-android/src/main/java/org/isoron/androidbase/{activities => }/BaseSystem.java (94%) rename uhabits-android/src/main/java/org/isoron/{uhabits/utils/SSLUtils.java => androidbase/CACertSSLContextProvider.java} (83%) rename uhabits-android/src/main/java/org/isoron/uhabits/{utils/RingtoneUtils.java => notifications/RingtoneManager.java} (77%) delete mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/utils/WidgetUtils.java rename {uhabits-android => uhabits-core}/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java (94%) create mode 100644 uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java (96%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java (97%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java (97%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java (97%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java (97%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java (98%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java (97%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java (96%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java (98%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/models/HabitFixtures.java (95%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/models/HabitListTest.java (97%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/models/HabitTest.java (85%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java (98%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/models/ScoreListTest.java (97%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/models/ScoreTest.java (97%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/models/StreakListTest.java (98%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java (96%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java (95%) rename {uhabits-android => uhabits-core}/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java (98%) diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle index ed401e697..138e9009e 100644 --- a/uhabits-android/build.gradle +++ b/uhabits-android/build.gradle @@ -12,10 +12,9 @@ android { buildConfigField "Integer", "databaseVersion", "19" buildConfigField "String", "databaseFilename", "\"uhabits.db\"" - buildConfigField "int", "roboSdk", (System.getenv("ROBO_SDK")?: "25") + buildConfigField "int", "roboSdk", (System.getenv("ROBO_SDK") ?: "25") testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - testInstrumentationRunnerArgument "size", "medium" } buildTypes { @@ -23,9 +22,6 @@ android { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } - debug { - testCoverageEnabled = true - } } lintOptions { @@ -53,7 +49,6 @@ android { dependencies { implementation project(":uhabits-core") - implementation 'com.android.support:appcompat-v7:25.3.1' implementation 'com.android.support:design:25.3.1' implementation 'com.android.support:preference-v14:25.3.1' @@ -68,14 +63,25 @@ dependencies { implementation 'com.google.code.gson:gson:2.7' implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation 'com.google.guava:guava:20.0' + compileOnly 'javax.annotation:jsr250-api:1.0' + compileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' + annotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' + annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' + annotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' + testImplementation project(":uhabits-core") testImplementation 'junit:junit:5.0-SNAPSHOT' testImplementation 'org.hamcrest:hamcrest-library:1.4-atlassian-1' testImplementation 'org.mockito:mockito-core:2.8.9' testImplementation 'org.json:json:20160810' - testImplementation 'org.robolectric:robolectric:3.4-rc2' + testCompileOnly 'javax.annotation:jsr250-api:1.0' + testCompileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' + testAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' + testAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' + testAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' + androidTestImplementation project(":uhabits-core") androidTestImplementation 'com.android.support:support-annotations:25.3.1' androidTestImplementation 'com.android.support.test:rules:0.5' androidTestImplementation 'com.android.support.test:runner:0.5' @@ -83,23 +89,11 @@ dependencies { androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2' androidTestImplementation 'org.mockito:mockito-core:1.10.19' androidTestImplementation 'com.google.guava:guava:20.0' - - compileOnly 'javax.annotation:jsr250-api:1.0' - compileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' - androidTestCompileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' - - annotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' - annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' - annotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' - - testAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' - testAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' - testAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' - androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' androidTestAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' androidTestAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' + implementation('com.opencsv:opencsv:3.9') { exclude group: 'commons-logging', module: 'commons-logging' } @@ -107,43 +101,3 @@ dependencies { exclude group: 'org.json', module: 'json' } } - -jacoco { - toolVersion = "0.7.4.201502262128" -} - -task coverageReport(type: JacocoReport, dependsOn: ['testDebugUnitTest']) { - - jacocoClasspath = configurations['androidJacocoAnt'] - - reports { - html.enabled = true - xml.enabled = true - } - - def excludes = [ - '**/R.class', - '**/R$*.class', - '**/BuildConfig.*', - '**/Manifest*', - '**/*Test*.*', - '**/*$Lambda$*', - '**/*$ViewBinder*', - '**/*MembersInjector*', - '**/*_Provide*', - '**/*Module_*', - '**/com/android/**/*', - 'android/**/*', - '**/*Dagger*', - '**/*_Factory*' - ] - - def srcDir = "${project.projectDir}/src/main/java" - def classDir = "${buildDir}/intermediates/classes/debug" - def jvmExecData = "${buildDir}/jacoco/testDebugUnitTest.exec" - def connectedExecData = "${buildDir}/outputs/code-coverage/connected/coverage.ec" - - sourceDirectories = files(srcDir) - classDirectories = files(fileTree(dir: classDir, excludes: excludes)) - executionData = files(jvmExecData, connectedExecData) -} diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java index 093740d8e..7fbfa78e9 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java @@ -26,12 +26,21 @@ import org.isoron.uhabits.tasks.*; import dagger.*; +@Module +class SingleThreadModule +{ + @Provides + @AppScope + public static TaskRunner provideTaskRunner() + { + return new SingleThreadTaskRunner(); + } +} + @AppScope @Component(modules = { - AppModule.class, SingleThreadTaskRunner.class, SQLModelFactory.class + AppModule.class, SingleThreadModule.class, SQLModelFactory.class }) public interface AndroidTestComponent extends AppComponent { - - } diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java index f1c17ee25..7d27e177d 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java @@ -27,8 +27,9 @@ import android.support.annotation.*; import android.support.test.*; import android.util.*; +import junit.framework.*; + import org.isoron.androidbase.*; -import org.isoron.androidbase.activities.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.tasks.*; @@ -38,17 +39,14 @@ import org.junit.*; import java.util.*; import java.util.concurrent.*; -import static junit.framework.Assert.*; -import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.*; -public class BaseAndroidTest +public class BaseAndroidTest extends TestCase { // 8:00am, January 25th, 2015 (UTC) public static final long FIXED_LOCAL_TIME = 1422172800000L; - private static boolean isLooperPrepared; - protected Context testContext; protected Context targetContext; @@ -71,14 +69,11 @@ public class BaseAndroidTest protected BaseSystem baseSystem; + @Override @Before public void setUp() { - if (!isLooperPrepared) - { - Looper.prepare(); - isLooperPrepared = true; - } + if (Looper.myLooper() == null) Looper.prepare(); targetContext = InstrumentationRegistry.getTargetContext(); testContext = InstrumentationRegistry.getContext(); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java index edf512827..b7e5f3b1f 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java @@ -23,7 +23,7 @@ import android.os.*; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; -import org.isoron.androidbase.activities.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.models.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java index 8371c593f..fae3ff95e 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java @@ -22,7 +22,7 @@ package org.isoron.uhabits; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; -import org.isoron.androidbase.activities.*; +import org.isoron.androidbase.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java index 2bdf05438..563a3c2ec 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java @@ -19,8 +19,8 @@ package org.isoron.uhabits.activities.common.views; +import android.support.test.filters.*; import android.support.test.runner.*; -import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java index 05a2c5a06..d3ee2f3b8 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java @@ -19,8 +19,8 @@ package org.isoron.uhabits.activities.common.views; +import android.support.test.filters.*; import android.support.test.runner.*; -import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSystem.java b/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java similarity index 94% rename from uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSystem.java rename to uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java index 4a372ab72..0aea883c7 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSystem.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.androidbase.activities; +package org.isoron.androidbase; import android.content.*; import android.os.*; @@ -44,13 +44,19 @@ import javax.inject.*; * a bug report, obtaining device information, or requesting runtime * permissions. */ -@ActivityScope -public class BaseSystem +@AppScope +public class BaseSystem implements CACertSSLContextProvider { private Context context; + @Override + public Context getContext() + { + return context; + } + @Inject - public BaseSystem(@ActivityContext Context context) + public BaseSystem(@AppContext Context context) { this.context = context; } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/SSLUtils.java b/uhabits-android/src/main/java/org/isoron/androidbase/CACertSSLContextProvider.java similarity index 83% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/SSLUtils.java rename to uhabits-android/src/main/java/org/isoron/androidbase/CACertSSLContextProvider.java index 812e94dee..b69a10e9a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/SSLUtils.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/CACertSSLContextProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,10 +17,9 @@ * with this program. If not, see . */ -package org.isoron.uhabits.utils; +package org.isoron.androidbase; import android.content.*; -import android.support.annotation.*; import java.io.*; import java.security.*; @@ -29,14 +28,14 @@ import java.security.cert.*; import javax.net.ssl.*; -public abstract class SSLUtils +public interface CACertSSLContextProvider { - public static SSLContext getCACertSSLContext(@NonNull Context context) + default SSLContext getCACertSSLContext() { try { CertificateFactory cf = CertificateFactory.getInstance("X.509"); - InputStream caInput = context.getAssets().open("cacert.pem"); + InputStream caInput = getContext().getAssets().open("cacert.pem"); Certificate ca = cf.generateCertificate(caInput); KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); @@ -58,4 +57,5 @@ public abstract class SSLUtils } } + Context getContext(); } diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseExceptionHandler.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseExceptionHandler.java index e0f4c7777..12738f2f9 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseExceptionHandler.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseExceptionHandler.java @@ -21,6 +21,7 @@ package org.isoron.androidbase.activities; import android.support.annotation.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.sqlite.*; diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseScreen.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseScreen.java index 9be10c58e..f1583cb81 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseScreen.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseScreen.java @@ -24,8 +24,10 @@ import android.graphics.*; import android.graphics.drawable.*; import android.net.*; import android.os.*; +import android.provider.*; import android.support.annotation.*; import android.support.design.widget.*; +import android.support.v4.app.*; import android.support.v4.content.res.*; import android.support.v7.app.*; import android.support.v7.view.ActionMode; @@ -34,10 +36,18 @@ import android.view.*; import android.widget.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.notifications.*; import org.isoron.uhabits.utils.*; import java.io.*; +import static android.media.RingtoneManager.ACTION_RINGTONE_PICKER; +import static android.media.RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI; +import static android.media.RingtoneManager.EXTRA_RINGTONE_EXISTING_URI; +import static android.media.RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT; +import static android.media.RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT; +import static android.media.RingtoneManager.EXTRA_RINGTONE_TYPE; +import static android.media.RingtoneManager.TYPE_NOTIFICATION; import static android.os.Build.VERSION.*; import static android.os.Build.VERSION_CODES.*; import static android.support.v4.content.FileProvider.*; @@ -117,6 +127,21 @@ public class BaseScreen } } + public static void showRingtonePicker(Fragment fragment, + int requestCode) + { + Uri existingRingtoneUri = RingtoneManager.getRingtoneUri(fragment.getContext()); + Uri defaultRingtoneUri = Settings.System.DEFAULT_NOTIFICATION_URI; + + Intent intent = new Intent(ACTION_RINGTONE_PICKER); + intent.putExtra(EXTRA_RINGTONE_TYPE, TYPE_NOTIFICATION); + intent.putExtra(EXTRA_RINGTONE_SHOW_DEFAULT, true); + intent.putExtra(EXTRA_RINGTONE_SHOW_SILENT, true); + intent.putExtra(EXTRA_RINGTONE_DEFAULT_URI, defaultRingtoneUri); + intent.putExtra(EXTRA_RINGTONE_EXISTING_URI, existingRingtoneUri); + fragment.startActivityForResult(intent, requestCode); + } + /** * Notifies the screen that its contents should be updated. */ diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java index 4795df75e..90a1861b9 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java @@ -44,6 +44,8 @@ import dagger.*; }) public interface AppComponent { + BaseSystem getBaseSystem(); + CommandRunner getCommandRunner(); @AppContext @@ -75,6 +77,8 @@ public interface AppComponent ReminderScheduler getReminderScheduler(); + RingtoneManager getRingtoneManager(); + SyncManager getSyncManager(); TaskRunner getTaskRunner(); @@ -82,4 +86,6 @@ public interface AppComponent WidgetPreferences getWidgetPreferences(); WidgetUpdater getWidgetUpdater(); + + MidnightTimer getMidnightTimer(); } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java index 462c90645..57d694561 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java @@ -60,6 +60,7 @@ public class ListHabitsActivity extends BaseActivity super.onCreate(savedInstanceState); HabitsApplication app = (HabitsApplication) getApplicationContext(); + midnightTimer = app.getComponent().getMidnightTimer(); component = DaggerListHabitsComponent .builder() @@ -83,8 +84,6 @@ public class ListHabitsActivity extends BaseActivity screen.setSelectionMenu(selectionMenu); rootView.setController(controller, selectionMenu); - midnightTimer = component.getMidnightTimer(); - if(prefs.isSyncFeatureEnabled()) startService(new Intent(this, SyncService.class)); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java index fd36e8293..c67fba112 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java @@ -40,8 +40,6 @@ public interface ListHabitsComponent ListHabitsMenu getMenu(); - MidnightTimer getMidnightTimer(); - NumberButtonControllerFactory getNumberButtonControllerFactory(); ListHabitsRootView getRootView(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java index 9e0abbeae..58160bb68 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java @@ -21,6 +21,7 @@ package org.isoron.uhabits.activities.habits.list; import android.support.annotation.*; +import org.isoron.androidbase.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.controllers.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java index 12e0b11b9..761301d39 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java @@ -70,13 +70,7 @@ public class HeaderView extends ScrollableChart { HabitsApplication app = (HabitsApplication) appContext; prefs = app.getComponent().getPreferences(); - } - - if (context instanceof ListHabitsActivity) - { - ListHabitsComponent component = - ((ListHabitsActivity) context).getListHabitsComponent(); - midnightTimer = component.getMidnightTimer(); + midnightTimer = app.getComponent().getMidnightTimer(); } init(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java index 01f079323..352b9b7b4 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java @@ -22,6 +22,7 @@ package org.isoron.uhabits.activities.habits.show; import android.support.annotation.*; import android.view.*; +import org.isoron.androidbase.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java index 0f9ee800d..dbd733b62 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java @@ -25,10 +25,11 @@ import android.os.*; import android.support.annotation.*; import android.support.v7.preference.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.R; +import org.isoron.uhabits.notifications.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.utils.*; import static org.isoron.uhabits.activities.habits.list.ListHabitsScreen.*; @@ -47,7 +48,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { if (requestCode == RINGTONE_REQUEST_CODE) { - RingtoneUtils.parseRingtoneData(getContext(), data); + RingtoneManager.parseRingtoneData(getContext(), data); updateRingtoneDescription(); return; } @@ -113,7 +114,7 @@ public class SettingsFragment extends PreferenceFragmentCompat if (key.equals("reminderSound")) { - RingtoneUtils.startRingtonePickerActivity(this, + BaseScreen.showRingtonePicker(this, RINGTONE_REQUEST_CODE); return true; } @@ -158,7 +159,7 @@ public class SettingsFragment extends PreferenceFragmentCompat private void updateRingtoneDescription() { - String ringtoneName = RingtoneUtils.getRingtoneName(getContext()); + String ringtoneName = RingtoneManager.getRingtoneName(getContext()); if (ringtoneName == null) return; Preference ringtonePreference = findPreference("reminderSound"); ringtonePreference.setSummary(ringtoneName); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java index bfff186b8..d2b0f7942 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java @@ -40,7 +40,7 @@ import java.util.*; import javax.inject.*; import static android.graphics.BitmapFactory.*; -import static org.isoron.uhabits.utils.RingtoneUtils.*; +import static org.isoron.uhabits.notifications.RingtoneManager.*; @AppScope public class NotificationTray diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/RingtoneUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/RingtoneManager.java similarity index 77% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/RingtoneUtils.java rename to uhabits-android/src/main/java/org/isoron/uhabits/notifications/RingtoneManager.java index c6a3b4a30..622b25f8c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/RingtoneUtils.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/RingtoneManager.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.utils; +package org.isoron.uhabits.notifications; import android.content.*; import android.media.*; @@ -25,14 +25,25 @@ import android.net.*; import android.preference.*; import android.provider.*; import android.support.annotation.*; -import android.support.v4.app.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.*; +import javax.inject.*; + import static android.media.RingtoneManager.*; -public abstract class RingtoneUtils +@AppScope +public class RingtoneManager { + private Context context; + + @Inject + public RingtoneManager(@AppContext @NonNull Context context) + { + this.context = context; + } + @Nullable public static String getRingtoneName(Context context) { @@ -101,18 +112,4 @@ public abstract class RingtoneUtils } } - public static void startRingtonePickerActivity(Fragment fragment, - int requestCode) - { - Uri existingRingtoneUri = getRingtoneUri(fragment.getContext()); - Uri defaultRingtoneUri = Settings.System.DEFAULT_NOTIFICATION_URI; - - Intent intent = new Intent(ACTION_RINGTONE_PICKER); - intent.putExtra(EXTRA_RINGTONE_TYPE, TYPE_NOTIFICATION); - intent.putExtra(EXTRA_RINGTONE_SHOW_DEFAULT, true); - intent.putExtra(EXTRA_RINGTONE_SHOW_SILENT, true); - intent.putExtra(EXTRA_RINGTONE_DEFAULT_URI, defaultRingtoneUri); - intent.putExtra(EXTRA_RINGTONE_EXISTING_URI, existingRingtoneUri); - fragment.startActivityForResult(intent, requestCode); - } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java index 833e1b936..18449f204 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java @@ -19,7 +19,6 @@ package org.isoron.uhabits.sync; -import android.content.*; import android.support.annotation.*; import android.util.*; @@ -27,7 +26,6 @@ import org.isoron.androidbase.*; import org.isoron.uhabits.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.utils.*; import org.json.*; import java.net.*; @@ -84,12 +82,15 @@ public class SyncManager implements CommandRunner.Listener private boolean isListening; + private BaseSystem system; + @Inject - public SyncManager(@AppContext @NonNull Context context, + public SyncManager(@NonNull BaseSystem system, @NonNull Preferences prefs, @NonNull CommandRunner commandRunner, @NonNull CommandParser commandParser) { + this.system = system; Log.i("SyncManager", this.toString()); this.prefs = prefs; @@ -105,7 +106,7 @@ public class SyncManager implements CommandRunner.Listener String serverURL = prefs.getSyncAddress(); Log.d("SyncManager", clientId); - connect(context, serverURL); + connect(serverURL); } private JSONObject toJSONObject(String json) @@ -164,11 +165,11 @@ public class SyncManager implements CommandRunner.Listener isListening = false; } - private void connect(@AppContext @NonNull Context context, String serverURL) + private void connect(String serverURL) { try { - IO.setDefaultSSLContext(SSLUtils.getCACertSSLContext(context)); + IO.setDefaultSSLContext(system.getCACertSSLContext()); socket = IO.socket(serverURL); logSocketEvent(socket, EVENT_CONNECT, "Connected"); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ExportDBTask.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ExportDBTask.java index 9c94c4dcb..3f9ef1180 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ExportDBTask.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ExportDBTask.java @@ -25,7 +25,6 @@ import android.support.annotation.*; import com.google.auto.factory.*; import org.isoron.androidbase.*; -import org.isoron.androidbase.activities.*; import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.utils.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ColorUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ColorUtils.java index ac5afdf89..16845892f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ColorUtils.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ColorUtils.java @@ -25,7 +25,6 @@ import android.util.*; public abstract class ColorUtils { - public static int colorToPaletteIndex(Context context, int color) { StyledResources res = new StyledResources(context); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/WidgetUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/WidgetUtils.java deleted file mode 100644 index ab55d0b9a..000000000 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/WidgetUtils.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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.utils; - -import android.appwidget.*; -import android.content.*; -import android.os.*; -import android.support.annotation.*; -import android.widget.*; - -import org.isoron.uhabits.widgets.*; - -import static android.appwidget.AppWidgetManager.*; -import static org.isoron.uhabits.utils.InterfaceUtils.*; - -public abstract class WidgetUtils -{ - @NonNull - public static WidgetDimensions getDimensionsFromOptions( - @NonNull Context ctx, @NonNull Bundle options) - { - int maxWidth = - (int) dpToPixels(ctx, options.getInt(OPTION_APPWIDGET_MAX_WIDTH)); - int maxHeight = - (int) dpToPixels(ctx, options.getInt(OPTION_APPWIDGET_MAX_HEIGHT)); - int minWidth = - (int) dpToPixels(ctx, options.getInt(OPTION_APPWIDGET_MIN_WIDTH)); - int minHeight = - (int) dpToPixels(ctx, options.getInt(OPTION_APPWIDGET_MIN_HEIGHT)); - - return new WidgetDimensions(minWidth, maxHeight, maxWidth, minHeight); - } - - public static void updateAppWidget(@NonNull AppWidgetManager manager, - @NonNull BaseWidget widget) - { - RemoteViews landscape = widget.getLandscapeRemoteViews(); - RemoteViews portrait = widget.getPortraitRemoteViews(); - RemoteViews views = new RemoteViews(landscape, portrait); - manager.updateAppWidget(widget.getId(), views); - } -} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java index 74dc1fe2c..583947682 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java @@ -31,7 +31,8 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; -import static org.isoron.uhabits.utils.WidgetUtils.*; +import static android.appwidget.AppWidgetManager.*; +import static org.isoron.uhabits.utils.InterfaceUtils.*; public abstract class BaseWidgetProvider extends AppWidgetProvider { @@ -39,6 +40,31 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider private WidgetPreferences widgetPrefs; + public static void updateAppWidget(@NonNull AppWidgetManager manager, + @NonNull BaseWidget widget) + { + RemoteViews landscape = widget.getLandscapeRemoteViews(); + RemoteViews portrait = widget.getPortraitRemoteViews(); + RemoteViews views = new RemoteViews(landscape, portrait); + manager.updateAppWidget(widget.getId(), views); + } + + @NonNull + public WidgetDimensions getDimensionsFromOptions(@NonNull Context ctx, + @NonNull Bundle options) + { + int maxWidth = + (int) dpToPixels(ctx, options.getInt(OPTION_APPWIDGET_MAX_WIDTH)); + int maxHeight = + (int) dpToPixels(ctx, options.getInt(OPTION_APPWIDGET_MAX_HEIGHT)); + int minWidth = + (int) dpToPixels(ctx, options.getInt(OPTION_APPWIDGET_MIN_WIDTH)); + int minHeight = + (int) dpToPixels(ctx, options.getInt(OPTION_APPWIDGET_MIN_HEIGHT)); + + return new WidgetDimensions(minWidth, maxHeight, maxWidth, minHeight); + } + @Override public void onAppWidgetOptionsChanged(@Nullable Context context, @Nullable AppWidgetManager manager, @@ -100,7 +126,8 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider updateDependencies(context); - new Thread(() -> { + new Thread(() -> + { Looper.prepare(); for (int id : widgetIds) update(context, manager, id); @@ -128,8 +155,10 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider RemoteViews errorView = new RemoteViews(context.getPackageName(), R.layout.widget_error); - if(e instanceof HabitNotFoundException) { - errorView.setCharSequence(R.id.label, "setText", context.getString(R.string.habit_not_found)); + if (e instanceof HabitNotFoundException) + { + errorView.setCharSequence(R.id.label, "setText", + context.getString(R.string.habit_not_found)); } manager.updateAppWidget(widgetId, errorView); @@ -143,8 +172,7 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider { BaseWidget widget = getWidgetFromId(context, widgetId); Bundle options = manager.getAppWidgetOptions(widgetId); - widget.setDimensions( - getDimensionsFromOptions(context, options)); + widget.setDimensions(getDimensionsFromOptions(context, options)); updateAppWidget(manager, widget); } diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java index e963cf808..5e59ade30 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java @@ -19,13 +19,14 @@ package org.isoron.uhabits.activities.habits.list; -import org.isoron.androidbase.activities.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.tasks.android.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.*; import org.junit.*; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java index 444fb0b48..d5ca80721 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.activities.habits.show; import android.view.*; -import org.isoron.androidbase.activities.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.tasks.*; diff --git a/uhabits-core/build.gradle b/uhabits-core/build.gradle index e0ea34bed..ef7677ada 100644 --- a/uhabits-core/build.gradle +++ b/uhabits-core/build.gradle @@ -1,37 +1,24 @@ -/* - * Copyright (C) 2017 Á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 . - */ - apply plugin: 'java' dependencies { + compileOnly 'javax.annotation:jsr250-api:1.0' compileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' - implementation 'com.google.dagger:dagger:2.11-rc2' implementation 'com.android.support:support-annotations:25.3.1' implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation 'org.apache.commons:commons-lang3:3.5' implementation 'com.google.code.gson:gson:2.7' + testImplementation 'junit:junit:4+' + testImplementation 'org.hamcrest:hamcrest-library:1.4-atlassian-1' + testImplementation 'org.mockito:mockito-core:2.8.9' + testImplementation 'org.json:json:20160810' + implementation ('com.opencsv:opencsv:3.9') { exclude group: 'commons-logging', module: 'commons-logging' } + compile 'junit:junit:4.12' } sourceCompatibility = "1.8" diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java b/uhabits-core/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java index db05b0955..245d76d30 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java @@ -19,20 +19,8 @@ package org.isoron.uhabits.tasks; -import org.isoron.uhabits.*; - -import dagger.*; - -@Module public class SingleThreadTaskRunner implements TaskRunner { - @Provides - @AppScope - public static TaskRunner provideTaskRunner() - { - return new SingleThreadTaskRunner(); - } - @Override public void addListener(Listener listener) { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java b/uhabits-core/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java similarity index 94% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java rename to uhabits-core/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java index 340505d70..44283af94 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -19,7 +19,7 @@ package org.isoron.uhabits.utils; -import org.isoron.androidbase.activities.*; +import org.isoron.uhabits.*; import java.util.*; import java.util.concurrent.*; @@ -29,7 +29,7 @@ import javax.inject.*; /** * A class that emits events when a new day starts. */ -@ActivityScope +@AppScope public class MidnightTimer { private final List listeners; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java new file mode 100644 index 000000000..bceada3bc --- /dev/null +++ b/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2017 Á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; + +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.models.memory.*; +import org.isoron.uhabits.utils.*; +import org.junit.*; + +import java.util.*; + +public class BaseUnitTest +{ + protected HabitList habitList; + + protected HabitFixtures fixtures; + + protected MemoryModelFactory modelFactory; + + @Before + public void setUp() + { + // 8:00am, January 25th, 2015 (UTC) + long fixed_local_time = 1422172800000L; + DateUtils.setFixedLocalTime(fixed_local_time); + + modelFactory = new MemoryModelFactory(); + habitList = modelFactory.buildHabitList(); + fixtures = new HabitFixtures(modelFactory); + } + + @After + public void tearDown() + { + DateUtils.setFixedLocalTime(null); + } + + public long timestamp(int year, int month, int day) + { + GregorianCalendar cal = DateUtils.getStartOfTodayCalendar(); + cal.set(year, month, day); + return cal.getTimeInMillis(); + } +} diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java similarity index 96% rename from uhabits-android/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java index 516c01ddf..dd0b9e53c 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java similarity index 97% rename from uhabits-android/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java index 78c39306d..88716a22a 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java similarity index 97% rename from uhabits-android/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java index 566a91b6f..ac812e560 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java similarity index 97% rename from uhabits-android/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java index 23ceb1192..01426474a 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java similarity index 97% rename from uhabits-android/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java index b3fc7aa53..17fafab36 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java similarity index 98% rename from uhabits-android/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java index 6766497a4..185f4b94f 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java similarity index 97% rename from uhabits-android/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java index 4f0eb461a..3ce74245a 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java similarity index 96% rename from uhabits-android/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java index 09b9004e3..4f12101b9 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java similarity index 98% rename from uhabits-android/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java index e441910a8..7bc708d96 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/models/HabitFixtures.java b/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitFixtures.java similarity index 95% rename from uhabits-android/src/test/java/org/isoron/uhabits/models/HabitFixtures.java rename to uhabits-core/src/test/java/org/isoron/uhabits/models/HabitFixtures.java index f49db1320..21344456c 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/models/HabitFixtures.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitFixtures.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -19,7 +19,7 @@ package org.isoron.uhabits.models; -import org.isoron.uhabits.utils.DateUtils; +import org.isoron.uhabits.utils.*; public class HabitFixtures { diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/models/HabitListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitListTest.java similarity index 97% rename from uhabits-android/src/test/java/org/isoron/uhabits/models/HabitListTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/models/HabitListTest.java index 961e1536c..ef31ce056 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/models/HabitListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitListTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -26,11 +26,9 @@ import org.junit.*; import java.io.*; import java.util.*; -import static junit.framework.Assert.*; import static org.hamcrest.CoreMatchers.*; -import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.core.IsEqual.equalTo; import static org.isoron.uhabits.models.HabitList.Order.*; +import static org.junit.Assert.*; @SuppressWarnings("JavaDoc") public class HabitListTest extends BaseUnitTest @@ -70,12 +68,6 @@ public class HabitListTest extends BaseUnitTest .build()); } - @Test - public void test_size() - { - assertThat(habitList.size(), equalTo(10)); - } - @Test public void test_countActive() { @@ -114,6 +106,54 @@ public class HabitListTest extends BaseUnitTest assertThat(habit1, equalTo(habit2)); } + @Test + public void test_ordering() + { + HabitList list = modelFactory.buildHabitList(); + Habit h1 = fixtures.createEmptyHabit(); + h1.setName("A Habit"); + h1.setColor(2); + + Habit h2 = fixtures.createEmptyHabit(); + h2.setName("B Habit"); + h2.setColor(2); + + Habit h3 = fixtures.createEmptyHabit(); + h3.setName("C Habit"); + h3.setColor(0); + + Habit h4 = fixtures.createEmptyHabit(); + h4.setName("D Habit"); + h4.setColor(1); + + list.add(h3); + list.add(h1); + list.add(h4); + list.add(h2); + + list.setOrder(BY_POSITION); + assertThat(list.getByPosition(0), equalTo(h3)); + assertThat(list.getByPosition(1), equalTo(h1)); + assertThat(list.getByPosition(2), equalTo(h4)); + assertThat(list.getByPosition(3), equalTo(h2)); + + list.setOrder(BY_NAME); + assertThat(list.getByPosition(0), equalTo(h1)); + assertThat(list.getByPosition(1), equalTo(h2)); + assertThat(list.getByPosition(2), equalTo(h3)); + assertThat(list.getByPosition(3), equalTo(h4)); + + list.remove(h1); + list.add(h1); + assertThat(list.getByPosition(0), equalTo(h1)); + + list.setOrder(BY_COLOR); + assertThat(list.getByPosition(0), equalTo(h3)); + assertThat(list.getByPosition(1), equalTo(h4)); + assertThat(list.getByPosition(2), equalTo(h1)); + assertThat(list.getByPosition(3), equalTo(h2)); + } + @Test public void test_reorder() { @@ -150,6 +190,12 @@ public class HabitListTest extends BaseUnitTest } } + @Test + public void test_size() + { + assertThat(habitList.size(), equalTo(10)); + } + @Test public void test_writeCSV() throws IOException { @@ -180,52 +226,4 @@ public class HabitListTest extends BaseUnitTest MatcherAssert.assertThat(writer.toString(), equalTo(expectedCSV)); } - - @Test - public void test_ordering() - { - HabitList list = modelFactory.buildHabitList(); - Habit h1 = fixtures.createEmptyHabit(); - h1.setName("A Habit"); - h1.setColor(2); - - Habit h2 = fixtures.createEmptyHabit(); - h2.setName("B Habit"); - h2.setColor(2); - - Habit h3 = fixtures.createEmptyHabit(); - h3.setName("C Habit"); - h3.setColor(0); - - Habit h4 = fixtures.createEmptyHabit(); - h4.setName("D Habit"); - h4.setColor(1); - - list.add(h3); - list.add(h1); - list.add(h4); - list.add(h2); - - list.setOrder(BY_POSITION); - assertThat(list.getByPosition(0), equalTo(h3)); - assertThat(list.getByPosition(1), equalTo(h1)); - assertThat(list.getByPosition(2), equalTo(h4)); - assertThat(list.getByPosition(3), equalTo(h2)); - - list.setOrder(BY_NAME); - assertThat(list.getByPosition(0), equalTo(h1)); - assertThat(list.getByPosition(1), equalTo(h2)); - assertThat(list.getByPosition(2), equalTo(h3)); - assertThat(list.getByPosition(3), equalTo(h4)); - - list.remove(h1); - list.add(h1); - assertThat(list.getByPosition(0), equalTo(h1)); - - list.setOrder(BY_COLOR); - assertThat(list.getByPosition(0), equalTo(h3)); - assertThat(list.getByPosition(1), equalTo(h4)); - assertThat(list.getByPosition(2), equalTo(h1)); - assertThat(list.getByPosition(3), equalTo(h2)); - } } \ No newline at end of file diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/models/HabitTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitTest.java similarity index 85% rename from uhabits-android/src/test/java/org/isoron/uhabits/models/HabitTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/models/HabitTest.java index 327d04267..3c11e1101 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/models/HabitTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -23,7 +23,6 @@ import org.isoron.uhabits.*; import org.junit.*; import static org.hamcrest.CoreMatchers.*; -import static org.hamcrest.core.IsNot.not; import static org.junit.Assert.*; public class HabitTest extends BaseUnitTest @@ -41,10 +40,10 @@ public class HabitTest extends BaseUnitTest assertFalse(habit.isArchived()); assertThat(habit.hasReminder(), is(false)); - assertThat(habit.getStreaks(), is(not(nullValue()))); - assertThat(habit.getScores(), is(not(nullValue()))); - assertThat(habit.getRepetitions(), is(not(nullValue()))); - assertThat(habit.getCheckmarks(), is(not(nullValue()))); + assertNotNull(habit.getStreaks()); + assertNotNull(habit.getScores()); + assertNotNull(habit.getRepetitions()); + assertNotNull(habit.getCheckmarks()); } @Test diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java similarity index 98% rename from uhabits-android/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java index 585387604..edba652c2 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/models/ScoreListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/models/ScoreListTest.java similarity index 97% rename from uhabits-android/src/test/java/org/isoron/uhabits/models/ScoreListTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/models/ScoreListTest.java index f0295ad08..e27ade824 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/models/ScoreListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/models/ScoreListTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -28,7 +28,7 @@ import java.util.*; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.number.IsCloseTo.closeTo; +import static org.hamcrest.number.IsCloseTo.*; public class ScoreListTest extends BaseUnitTest { diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/models/ScoreTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/models/ScoreTest.java similarity index 97% rename from uhabits-android/src/test/java/org/isoron/uhabits/models/ScoreTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/models/ScoreTest.java index 0a94ad036..c794bbf35 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/models/ScoreTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/models/ScoreTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/models/StreakListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/models/StreakListTest.java similarity index 98% rename from uhabits-android/src/test/java/org/isoron/uhabits/models/StreakListTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/models/StreakListTest.java index 5d34c6fd5..8bf4fc78a 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/models/StreakListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/models/StreakListTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java similarity index 96% rename from uhabits-android/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java index 406b6e39b..142cb7082 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java similarity index 95% rename from uhabits-android/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java index 57b694a7b..95d3019d6 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java similarity index 98% rename from uhabits-android/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java index dbb0df07e..ed32cbeab 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * From df0cf57984506ef7463bf266d7155e03b95f0b0b Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Thu, 25 May 2017 18:41:59 -0400 Subject: [PATCH 10/27] Move tests to androidTest --- uhabits-android/build.gradle | 4 +- .../org/isoron/uhabits/BaseAndroidTest.java | 7 +++ .../habits/list/ListHabitsControllerTest.java | 5 +- .../habits/list/ListHabitsMenuTest.java | 5 +- .../habits/list/ListHabitsScreenTest.java | 7 +-- .../CheckmarkButtonControllerTest.java | 4 +- .../controllers/HabitCardControllerTest.java | 4 +- .../HabitCardListControllerTest.java | 4 +- .../habits/list/controllers/package-info.java | 0 .../list/model/HabitCardListCacheTest.java | 11 ++-- .../habits/show/ShowHabitsMenuTest.java | 4 +- .../uhabits/commands/CommandParserTest.java | 55 +++++++++-------- .../receivers/ReminderControllerTest.java | 4 +- .../receivers/WidgetControllerTest.java | 4 +- .../uhabits/utils/ReminderSchedulerTest.java | 5 +- .../java/org/isoron/uhabits/BaseUnitTest.java | 61 ------------------- 16 files changed, 63 insertions(+), 121 deletions(-) rename uhabits-android/src/{test => androidTest}/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java (96%) rename uhabits-android/src/{test => androidTest}/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java (97%) rename uhabits-android/src/{test => androidTest}/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java (96%) rename uhabits-android/src/{test => androidTest}/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java (95%) rename uhabits-android/src/{test => androidTest}/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java (93%) rename uhabits-android/src/{test => androidTest}/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java (97%) rename uhabits-android/src/{test => androidTest}/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java (100%) rename uhabits-android/src/{test => androidTest}/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java (94%) rename uhabits-android/src/{test => androidTest}/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java (94%) rename uhabits-android/src/{test => androidTest}/java/org/isoron/uhabits/commands/CommandParserTest.java (66%) rename uhabits-android/src/{test => androidTest}/java/org/isoron/uhabits/receivers/ReminderControllerTest.java (95%) rename uhabits-android/src/{test => androidTest}/java/org/isoron/uhabits/receivers/WidgetControllerTest.java (96%) rename uhabits-android/src/{test => androidTest}/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java (97%) delete mode 100644 uhabits-android/src/test/java/org/isoron/uhabits/BaseUnitTest.java diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle index 138e9009e..e6d6a25a1 100644 --- a/uhabits-android/build.gradle +++ b/uhabits-android/build.gradle @@ -86,8 +86,8 @@ dependencies { androidTestImplementation 'com.android.support.test:rules:0.5' androidTestImplementation 'com.android.support.test:runner:0.5' androidTestImplementation "com.google.dexmaker:dexmaker:1.2" - androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2' - androidTestImplementation 'org.mockito:mockito-core:1.10.19' + androidTestImplementation 'com.linkedin.dexmaker:dexmaker-mockito:2.2.0' + androidTestImplementation 'org.mockito:mockito-core:2.8.9' androidTestImplementation 'com.google.guava:guava:20.0' androidTestCompileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java index 7d27e177d..573db0d54 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java @@ -154,4 +154,11 @@ public class BaseAndroidTest extends TestCase fail(); } } + + public long timestamp(int year, int month, int day) + { + GregorianCalendar cal = DateUtils.getStartOfTodayCalendar(); + cal.set(year, month, day); + return cal.getTimeInMillis(); + } } diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java similarity index 96% rename from uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java index 5e59ade30..1b51941fe 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -33,9 +33,8 @@ import org.junit.*; import static org.mockito.Mockito.*; -public class ListHabitsControllerTest extends BaseUnitTest +public class ListHabitsControllerTest extends BaseAndroidTest { - private ListHabitsController controller; private ImportDataTaskFactory importTaskFactory; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java similarity index 97% rename from uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java index c3cf921c7..e7648b0c2 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -30,10 +30,9 @@ import org.isoron.uhabits.preferences.*; import org.junit.*; import org.mockito.*; -import static junit.framework.Assert.*; import static org.mockito.Mockito.*; -public class ListHabitsMenuTest extends BaseUnitTest +public class ListHabitsMenuTest extends BaseAndroidTest { private BaseActivity activity; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java similarity index 96% rename from uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java index 5d5a68037..6692aad5a 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -37,13 +37,10 @@ import org.junit.runner.*; import org.junit.runners.*; import static org.isoron.uhabits.activities.habits.list.ListHabitsScreen.*; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.*; -import static org.mockito.Mockito.eq; @RunWith(JUnit4.class) -public class ListHabitsScreenTest extends BaseUnitTest +public class ListHabitsScreenTest extends BaseAndroidTest { private BaseActivity activity; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java similarity index 95% rename from uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java index e9e6375c5..2c01d26fb 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -27,7 +27,7 @@ import org.junit.*; import static org.mockito.Mockito.*; -public class CheckmarkButtonControllerTest extends BaseUnitTest +public class CheckmarkButtonControllerTest extends BaseAndroidTest { private CheckmarkButtonController controller; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java similarity index 93% rename from uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java index 554716de6..b5626b448 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -27,7 +27,7 @@ import org.junit.*; import static org.mockito.Mockito.*; -public class HabitCardControllerTest extends BaseUnitTest +public class HabitCardControllerTest extends BaseAndroidTest { private Habit habit; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java similarity index 97% rename from uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java index d3dc4e898..c4597fd23 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -29,7 +29,7 @@ import java.util.*; import static org.mockito.Mockito.*; -public class HabitCardListControllerTest extends BaseUnitTest +public class HabitCardListControllerTest extends BaseAndroidTest { private LinkedList habits; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java similarity index 100% rename from uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java similarity index 94% rename from uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java index b9965ad6c..fd254bdb3 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -28,12 +28,11 @@ import org.junit.*; import java.util.*; -import static junit.framework.Assert.*; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.core.IsEqual.*; import static org.mockito.Mockito.*; -public class HabitCardListCacheTest extends BaseUnitTest +public class HabitCardListCacheTest extends BaseAndroidTest { private HabitCardListCache cache; @@ -45,11 +44,12 @@ public class HabitCardListCacheTest extends BaseUnitTest public void setUp() { super.setUp(); + habitList.removeAll(); for (int i = 0; i < 10; i++) { - if (i == 3) habitList.add(fixtures.createLongHabit()); - else habitList.add(fixtures.createShortHabit()); + if (i == 3) fixtures.createLongHabit(); + else fixtures.createShortHabit(); } SingleThreadTaskRunner taskRunner = new SingleThreadTaskRunner(); @@ -68,7 +68,6 @@ public class HabitCardListCacheTest extends BaseUnitTest public void tearDown() { cache.onDetached(); - super.tearDown(); } @Test diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java similarity index 94% rename from uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java index d5ca80721..dd244a736 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -30,7 +30,7 @@ import org.junit.*; import static org.mockito.Matchers.any; import static org.mockito.Mockito.*; -public class ShowHabitsMenuTest extends BaseUnitTest +public class ShowHabitsMenuTest extends BaseAndroidTest { private ShowHabitActivity activity; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/commands/CommandParserTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/commands/CommandParserTest.java similarity index 66% rename from uhabits-android/src/test/java/org/isoron/uhabits/commands/CommandParserTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/commands/CommandParserTest.java index c043bc8b6..c849a6776 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/commands/CommandParserTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/commands/CommandParserTest.java @@ -21,6 +21,7 @@ package org.isoron.uhabits.commands; import android.support.annotation.*; +import org.hamcrest.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.json.*; @@ -28,11 +29,9 @@ import org.junit.*; import java.util.*; -import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.Matchers.*; +import static org.hamcrest.CoreMatchers.*; - -public class CommandParserTest extends BaseUnitTest +public class CommandParserTest extends BaseAndroidTest { @NonNull private CommandParser parser; @@ -59,8 +58,8 @@ public class CommandParserTest extends BaseUnitTest original = new ArchiveHabitsCommand(habitList, selected); decoded = (ArchiveHabitsCommand) parser.parse(original.toJson()); - assertThat(decoded.getId(), equalTo(original.getId())); - assertThat(decoded.selected, equalTo(original.selected)); + MatcherAssert.assertThat(decoded.getId(), equalTo(original.getId())); + MatcherAssert.assertThat(decoded.selected, equalTo(original.selected)); } @Test @@ -70,9 +69,9 @@ public class CommandParserTest extends BaseUnitTest original = new ChangeHabitColorCommand(habitList, selected, 20); decoded = (ChangeHabitColorCommand) parser.parse(original.toJson()); - assertThat(decoded.getId(), equalTo(original.getId())); - assertThat(decoded.newColor, equalTo(original.newColor)); - assertThat(decoded.selected, equalTo(original.selected)); + MatcherAssert.assertThat(decoded.getId(), equalTo(original.getId())); + MatcherAssert.assertThat(decoded.newColor, equalTo(original.newColor)); + MatcherAssert.assertThat(decoded.selected, equalTo(original.selected)); } @Test @@ -87,9 +86,10 @@ public class CommandParserTest extends BaseUnitTest decoded = (CreateHabitCommand) parser.parse(original.toJson()); - assertThat(decoded.getId(), equalTo(original.getId())); - assertThat(decoded.savedId, equalTo(original.savedId)); - assertThat(decoded.model.getData(), equalTo(model.getData())); + MatcherAssert.assertThat(decoded.getId(), equalTo(original.getId())); + MatcherAssert.assertThat(decoded.savedId, equalTo(original.savedId)); + MatcherAssert.assertThat(decoded.model.getData(), equalTo(model + .getData())); } @Test @@ -99,10 +99,11 @@ public class CommandParserTest extends BaseUnitTest original = new CreateRepetitionCommand(habit, 1000, 5); decoded = (CreateRepetitionCommand) parser.parse(original.toJson()); - assertThat(decoded.getId(), equalTo(original.getId())); - assertThat(decoded.timestamp, equalTo(original.timestamp)); - assertThat(decoded.value, equalTo(original.value)); - assertThat(decoded.habit, equalTo(original.habit)); + MatcherAssert.assertThat(decoded.getId(), equalTo(original.getId())); + MatcherAssert.assertThat(decoded.timestamp, equalTo(original + .timestamp)); + MatcherAssert.assertThat(decoded.value, equalTo(original.value)); + MatcherAssert.assertThat(decoded.habit, equalTo(original.habit)); } @Test @@ -112,8 +113,8 @@ public class CommandParserTest extends BaseUnitTest original = new DeleteHabitsCommand(habitList, selected); decoded = (DeleteHabitsCommand) parser.parse(original.toJson()); - assertThat(decoded.getId(), equalTo(original.getId())); - assertThat(decoded.selected, equalTo(original.selected)); + MatcherAssert.assertThat(decoded.getId(), equalTo(original.getId())); + MatcherAssert.assertThat(decoded.selected, equalTo(original.selected)); } @Test @@ -129,9 +130,10 @@ public class CommandParserTest extends BaseUnitTest decoded = (EditHabitCommand) parser.parse(original.toJson()); - assertThat(decoded.getId(), equalTo(original.getId())); - assertThat(decoded.savedId, equalTo(original.savedId)); - assertThat(decoded.modified.getData(), equalTo(modified.getData())); + MatcherAssert.assertThat(decoded.getId(), equalTo(original.getId())); + MatcherAssert.assertThat(decoded.savedId, equalTo(original.savedId)); + MatcherAssert.assertThat(decoded.modified.getData(), equalTo(modified + .getData())); } @Test @@ -141,9 +143,10 @@ public class CommandParserTest extends BaseUnitTest original = new ToggleRepetitionCommand(habit, 1000); decoded = (ToggleRepetitionCommand) parser.parse(original.toJson()); - assertThat(decoded.getId(), equalTo(original.getId())); - assertThat(decoded.timestamp, equalTo(original.timestamp)); - assertThat(decoded.habit, equalTo(original.habit)); + MatcherAssert.assertThat(decoded.getId(), equalTo(original.getId())); + MatcherAssert.assertThat(decoded.timestamp, equalTo(original + .timestamp)); + MatcherAssert.assertThat(decoded.habit, equalTo(original.habit)); } @Test @@ -153,7 +156,7 @@ public class CommandParserTest extends BaseUnitTest original = new UnarchiveHabitsCommand(habitList, selected); decoded = (UnarchiveHabitsCommand) parser.parse(original.toJson()); - assertThat(decoded.getId(), equalTo(original.getId())); - assertThat(decoded.selected, equalTo(original.selected)); + MatcherAssert.assertThat(decoded.getId(), equalTo(original.getId())); + MatcherAssert.assertThat(decoded.selected, equalTo(original.selected)); } } \ No newline at end of file diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java similarity index 95% rename from uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java index aabf6527a..f7d046a18 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -28,7 +28,7 @@ import org.junit.*; import static org.mockito.Mockito.*; -public class ReminderControllerTest extends BaseUnitTest +public class ReminderControllerTest extends BaseAndroidTest { private ReminderController controller; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java similarity index 96% rename from uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java index b57b41cd7..69906cea4 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -31,7 +31,7 @@ import static org.hamcrest.core.IsEqual.*; import static org.isoron.uhabits.models.Checkmark.*; import static org.mockito.Mockito.*; -public class WidgetControllerTest extends BaseUnitTest +public class WidgetControllerTest extends BaseAndroidTest { private WidgetController controller; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java similarity index 97% rename from uhabits-android/src/test/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java index 073ebd291..7ee249a1f 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -31,8 +31,7 @@ import java.util.*; import static org.mockito.Mockito.*; -@SuppressWarnings("JavaDoc") -public class ReminderSchedulerTest extends BaseUnitTest +public class ReminderSchedulerTest extends BaseAndroidTest { private Habit habit; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/BaseUnitTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/BaseUnitTest.java deleted file mode 100644 index 5bd3d841a..000000000 --- a/uhabits-android/src/test/java/org/isoron/uhabits/BaseUnitTest.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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; - -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.models.memory.*; -import org.isoron.uhabits.utils.*; -import org.junit.*; - -import java.util.*; - -public class BaseUnitTest -{ - protected HabitList habitList; - - protected HabitFixtures fixtures; - - protected MemoryModelFactory modelFactory; - - @Before - public void setUp() - { - // 8:00am, January 25th, 2015 (UTC) - long fixed_local_time = 1422172800000L; - DateUtils.setFixedLocalTime(fixed_local_time); - - modelFactory = new MemoryModelFactory(); - habitList = modelFactory.buildHabitList(); - fixtures = new HabitFixtures(modelFactory); - } - - @After - public void tearDown() - { - DateUtils.setFixedLocalTime(null); - } - - public long timestamp(int year, int month, int day) - { - GregorianCalendar cal = DateUtils.getStartOfTodayCalendar(); - cal.set(year, month, day); - return cal.getTimeInMillis(); - } -} From fa4944700c80b6bd70caab612ec3c9dfa41e9982 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Fri, 26 May 2017 15:48:18 -0400 Subject: [PATCH 11/27] Move UI behavior to uhabits-core --- .../org/isoron/uhabits/BaseAndroidTest.java | 2 +- .../habits/list/ListHabitsControllerTest.java | 4 +- .../habits/list/ListHabitsMenuTest.java | 4 +- .../habits/list/ListHabitsScreenTest.java | 4 +- .../CheckmarkButtonControllerTest.java | 4 +- .../habits/list/views/HeaderViewTest.java | 4 +- .../habits/show/ShowHabitsMenuTest.java | 83 ---------------- .../receivers/ReminderControllerTest.java | 4 +- .../androidbase/activities/BaseRootView.java | 20 +++- .../java/org/isoron/uhabits/AppComponent.java | 2 +- .../org/isoron/uhabits/HabitsApplication.java | 2 +- .../uhabits/activities/ThemeSwitcher.java | 4 +- .../activities/about/AboutActivity.java | 10 +- .../activities/about/AboutRootView.java | 69 +++---------- .../uhabits/activities/about/AboutScreen.java | 73 ++++++++++++++ .../habits/edit/EditHabitDialog.java | 2 +- .../habits/list/ListHabitsActivity.java | 2 +- .../habits/list/ListHabitsController.java | 4 +- .../habits/list/ListHabitsMenu.java | 4 +- .../habits/list/ListHabitsScreen.java | 4 +- .../CheckmarkButtonController.java | 4 +- .../controllers/NumberButtonController.java | 4 +- .../list/model/HabitCardListAdapter.java | 4 +- .../habits/list/model/HintList.java | 4 +- .../habits/list/views/CheckmarkPanelView.java | 4 +- .../habits/list/views/HeaderView.java | 7 +- .../habits/list/views/NumberPanelView.java | 4 +- .../habits/show/ShowHabitActivity.java | 44 +++++++-- .../habits/show/ShowHabitComponent.java | 8 +- .../habits/show/ShowHabitController.java | 33 +++---- .../habits/show/ShowHabitModule.java | 27 ++++- .../habits/show/ShowHabitRootView.java | 29 +----- .../habits/show/ShowHabitScreen.java | 43 +++++--- .../habits/show/ShowHabitsMenu.java | 50 ++-------- .../habits/show/views/ScoreCard.java | 2 +- .../activities/settings/SettingsFragment.java | 2 +- .../notifications/NotificationTray.java | 6 +- ...eferences.java => AndroidPreferences.java} | 47 ++++----- .../uhabits/receivers/PebbleReceiver.java | 2 +- .../uhabits/receivers/ReminderController.java | 4 +- .../uhabits/receivers/WidgetReceiver.java | 2 +- .../org/isoron/uhabits/sync/SyncManager.java | 4 +- .../org/isoron/uhabits/sync/SyncService.java | 4 +- .../isoron/uhabits/widgets/ScoreWidget.java | 2 +- uhabits-core/build.gradle | 1 + .../uhabits/preferences/Preferences.java | 26 +++++ .../uhabits/ui/about/AboutBehavior.java | 90 +++++++++++++++++ .../ui/habits/show/ShowHabitBehavior.java | 65 ++++++++++++ .../ui/habits/show/ShowHabitMenuBehavior.java | 98 +++++++++++++++++++ .../java/org/isoron/uhabits/BaseUnitTest.java | 4 + .../show/ShowHabitMenuBehaviorTest.java | 72 ++++++++++++++ 51 files changed, 662 insertions(+), 339 deletions(-) delete mode 100644 uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java create mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java rename uhabits-android/src/main/java/org/isoron/uhabits/preferences/{Preferences.java => AndroidPreferences.java} (97%) create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/ui/about/AboutBehavior.java create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitBehavior.java create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehavior.java create mode 100644 uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehaviorTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java index 573db0d54..9ea0dec04 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java @@ -51,7 +51,7 @@ public class BaseAndroidTest extends TestCase protected Context targetContext; - protected Preferences prefs; + protected AndroidPreferences prefs; protected HabitList habitList; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java index 1b51941fe..ee469da95 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java @@ -47,7 +47,7 @@ public class ListHabitsControllerTest extends BaseAndroidTest private ListHabitsScreen screen; - private Preferences prefs; + private AndroidPreferences prefs; private ReminderScheduler reminderScheduler; @@ -69,7 +69,7 @@ public class ListHabitsControllerTest extends BaseAndroidTest commandRunner = mock(CommandRunner.class); adapter = mock(HabitCardListAdapter.class); screen = mock(ListHabitsScreen.class); - prefs = mock(Preferences.class); + prefs = mock(AndroidPreferences.class); reminderScheduler = mock(ReminderScheduler.class); taskRunner = new SingleThreadTaskRunner(); widgetUpdater = mock(WidgetUpdater.class); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java index e7648b0c2..a831cdfe9 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java @@ -40,7 +40,7 @@ public class ListHabitsMenuTest extends BaseAndroidTest private HabitCardListAdapter adapter; - private Preferences preferences; + private AndroidPreferences preferences; private ThemeSwitcher themeSwitcher; @@ -56,7 +56,7 @@ public class ListHabitsMenuTest extends BaseAndroidTest activity = mock(BaseActivity.class); screen = mock(ListHabitsScreen.class); adapter = mock(HabitCardListAdapter.class); - preferences = mock(Preferences.class); + preferences = mock(AndroidPreferences.class); themeSwitcher = mock(ThemeSwitcher.class); when(preferences.getShowArchived()).thenReturn(false); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java index 6692aad5a..b8aec240a 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java @@ -66,7 +66,7 @@ public class ListHabitsScreenTest extends BaseAndroidTest private ThemeSwitcher themeSwitcher; - private Preferences prefs; + private AndroidPreferences prefs; private CommandParser commandParser; @@ -84,7 +84,7 @@ public class ListHabitsScreenTest extends BaseAndroidTest confirmDeleteDialogFactory = mock(ConfirmDeleteDialogFactory.class); colorPickerDialogFactory = mock(ColorPickerDialogFactory.class); dialogFactory = mock(EditHabitDialogFactory.class); - prefs = mock(Preferences.class); + prefs = mock(AndroidPreferences.class); commandParser = mock(CommandParser.class); screen = spy(new ListHabitsScreen(activity, commandRunner, rootView, diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java index 2c01d26fb..be4ddb02e 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java @@ -39,7 +39,7 @@ public class CheckmarkButtonControllerTest extends BaseAndroidTest private int timestamp; - private Preferences prefs; + private AndroidPreferences prefs; @Override @Before @@ -49,7 +49,7 @@ public class CheckmarkButtonControllerTest extends BaseAndroidTest timestamp = 0; habit = mock(Habit.class); - prefs = mock(Preferences.class); + prefs = mock(AndroidPreferences.class); this.view = mock(CheckmarkButtonView.class); this.listener = mock(CheckmarkButtonController.Listener.class); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java index d60299766..1147748d9 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java @@ -41,7 +41,7 @@ public class HeaderViewTest extends BaseViewTest private HeaderView view; - private Preferences prefs; + private AndroidPreferences prefs; private MidnightTimer midnightTimer; @@ -50,7 +50,7 @@ public class HeaderViewTest extends BaseViewTest public void setUp() { super.setUp(); - prefs = mock(Preferences.class); + prefs = mock(AndroidPreferences.class); midnightTimer = mock(MidnightTimer.class); view = new HeaderView(targetContext, prefs, midnightTimer); view.setButtonCount(5); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java deleted file mode 100644 index dd244a736..000000000 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenuTest.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 2017 Á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.activities.habits.show; - -import android.view.*; - -import org.isoron.androidbase.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.tasks.*; -import org.junit.*; - -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.*; - -public class ShowHabitsMenuTest extends BaseAndroidTest -{ - private ShowHabitActivity activity; - - private ShowHabitScreen screen; - - private ShowHabitsMenu menu; - - private Habit habit; - - private ExportCSVTaskFactory exportCSVFactory; - - private TaskRunner taskRunner; - - private BaseSystem system; - - @Override - public void setUp() - { - super.setUp(); - activity = mock(ShowHabitActivity.class); - system = mock(BaseSystem.class); - screen = mock(ShowHabitScreen.class); - habit = mock(Habit.class); - exportCSVFactory = mock(ExportCSVTaskFactory.class); - taskRunner = mock(TaskRunner.class); - menu = new ShowHabitsMenu(activity, system, screen, habit, - exportCSVFactory, taskRunner); - } - - @Test - public void testOnDownloadHabit() - { - onItemSelected(R.id.export); - verify(taskRunner).execute(any()); - } - - @Test - public void testOnEditHabit() - { - onItemSelected(R.id.action_edit_habit); - verify(screen).showEditHabitDialog(); - } - - protected void onItemSelected(int actionId) - { - MenuItem item = mock(MenuItem.class); - when(item.getItemId()).thenReturn(actionId); - menu.onItemSelected(item); - } -} \ No newline at end of file diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java index f7d046a18..92e0da412 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java @@ -37,7 +37,7 @@ public class ReminderControllerTest extends BaseAndroidTest private NotificationTray notificationTray; - private Preferences preferences; + private AndroidPreferences preferences; @Override public void setUp() @@ -46,7 +46,7 @@ public class ReminderControllerTest extends BaseAndroidTest reminderScheduler = mock(ReminderScheduler.class); notificationTray = mock(NotificationTray.class); - preferences = mock(Preferences.class); + preferences = mock(AndroidPreferences.class); controller = new ReminderController(reminderScheduler, notificationTray, preferences); diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java index 38238a6f5..ba5ed7649 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java @@ -48,6 +48,8 @@ public abstract class BaseRootView extends FrameLayout private final ThemeSwitcher themeSwitcher; + boolean shouldDisplayHomeAsUp = false; + public BaseRootView(@NonNull Context context) { super(context); @@ -58,11 +60,23 @@ public abstract class BaseRootView extends FrameLayout public boolean getDisplayHomeAsUp() { - return false; + return shouldDisplayHomeAsUp; + } + + public void setDisplayHomeAsUp(boolean b) + { + shouldDisplayHomeAsUp = b; } @NonNull - public abstract Toolbar getToolbar(); + public Toolbar getToolbar() + { + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + if (toolbar == null) throw new RuntimeException( + "Your BaseRootView should have a " + + "toolbar with id R.id.toolbar"); + return toolbar; + } public int getToolbarColor() { @@ -86,7 +100,7 @@ public abstract class BaseRootView extends FrameLayout if (view != null) view.setVisibility(GONE); view = findViewById(R.id.headerShadow); - if(view != null) view.setVisibility(GONE); + if (view != null) view.setVisibility(GONE); } } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java index 90a1861b9..82007c403 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java @@ -73,7 +73,7 @@ public interface AppComponent PendingIntentFactory getPendingIntentFactory(); - Preferences getPreferences(); + AndroidPreferences getPreferences(); ReminderScheduler getReminderScheduler(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java index 2e298ce9e..19184b300 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java @@ -109,7 +109,7 @@ public class HabitsApplication extends Application notificationTray = component.getNotificationTray(); notificationTray.startListening(); - Preferences prefs = component.getPreferences(); + AndroidPreferences prefs = component.getPreferences(); prefs.initialize(); prefs.updateLastAppVersion(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java index 6a92b421d..b7b4bac9c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java @@ -37,11 +37,11 @@ public class ThemeSwitcher @NonNull private final BaseActivity activity; - private Preferences preferences; + private AndroidPreferences preferences; @Inject public ThemeSwitcher(@NonNull BaseActivity activity, - @NonNull Preferences preferences) + @NonNull AndroidPreferences preferences) { this.activity = activity; this.preferences = preferences; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java index 543f032c6..7af5e7025 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java @@ -22,7 +22,8 @@ package org.isoron.uhabits.activities.about; import android.os.*; import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.intents.*; +import org.isoron.uhabits.*; +import org.isoron.uhabits.ui.about.*; /** * Activity that allows the user to see information about the app itself. @@ -34,8 +35,11 @@ public class AboutActivity extends BaseActivity protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - AboutRootView rootView = new AboutRootView(this, new IntentFactory()); - BaseScreen screen = new BaseScreen(this); + HabitsApplication app = (HabitsApplication) getApplication(); + AppComponent cmp = app.getComponent(); + AboutScreen screen = new AboutScreen(this, cmp.getIntentFactory()); + AboutBehavior behavior = new AboutBehavior(cmp.getPreferences(), screen); + AboutRootView rootView = new AboutRootView(this, behavior); screen.setRootView(rootView); setScreen(screen); } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java index 4d03b5313..489fef7b7 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java @@ -21,15 +21,12 @@ package org.isoron.uhabits.activities.about; import android.content.*; import android.support.annotation.*; -import android.support.v7.widget.Toolbar; import android.widget.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.BuildConfig; -import org.isoron.uhabits.*; import org.isoron.uhabits.R; -import org.isoron.uhabits.intents.*; -import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.about.*; import org.isoron.uhabits.utils.*; import butterknife.*; @@ -48,47 +45,22 @@ public class AboutRootView extends BaseRootView @BindView(R.id.tvSource) TextView tvSource; - @BindView(R.id.toolbar) - Toolbar toolbar; - - int developerCountdown = 10; - - @Nullable - Preferences prefs; - - private final IntentFactory intents; + @NonNull + private final AboutBehavior behavior; - public AboutRootView(Context context, IntentFactory intents) + public AboutRootView(@NonNull Context context, + @NonNull AboutBehavior behavior) { super(context); - this.intents = intents; + this.behavior = behavior; addView(inflate(getContext(), R.layout.about, null)); ButterKnife.bind(this); - tvVersion.setText( - String.format(getResources().getString(R.string.version_n), - BuildConfig.VERSION_NAME)); + String version = getResources().getString(R.string.version_n); + tvVersion.setText(String.format(version, BuildConfig.VERSION_NAME)); - if (context.getApplicationContext() instanceof HabitsApplication) - { - HabitsApplication app = - (HabitsApplication) context.getApplicationContext(); - prefs = app.getComponent().getPreferences(); - } - } - - @Override - public boolean getDisplayHomeAsUp() - { - return true; - } - - @NonNull - @Override - public Toolbar getToolbar() - { - return toolbar; + setDisplayHomeAsUp(true); } @Override @@ -104,48 +76,37 @@ public class AboutRootView extends BaseRootView @OnClick(R.id.tvFeedback) public void onClickFeedback() { - Intent intent = intents.sendFeedback(getContext()); - getContext().startActivity(intent); + behavior.onSendFeedback(); } @OnClick(R.id.tvVersion) public void onClickIcon() { - developerCountdown--; - if (developerCountdown <= 0) - { - if (prefs == null) return; - prefs.setDeveloper(true); - String text = "You are now a developer"; - Toast.makeText(getContext(), text, Toast.LENGTH_LONG).show(); - } + behavior.onPressDeveloperCountdown(); } @OnClick(R.id.tvRate) public void onClickRate() { - Intent intent = intents.rateApp(getContext()); - getContext().startActivity(intent); + behavior.onRateApp(); } @OnClick(R.id.tvSource) public void onClickSource() { - Intent intent = intents.viewSourceCode(getContext()); - getContext().startActivity(intent); + behavior.onViewSourceCode(); } @OnClick(R.id.tvTranslate) public void onClickTranslate() { - Intent intent = intents.helpTranslate(getContext()); - getContext().startActivity(intent); + behavior.onTranslateApp(); } @Override protected void initToolbar() { super.initToolbar(); - toolbar.setTitle(getResources().getString(R.string.about)); + getToolbar().setTitle(getResources().getString(R.string.about)); } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java new file mode 100644 index 000000000..46698ac20 --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2017 Á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.activities.about; + +import android.support.annotation.*; +import android.widget.*; + +import org.isoron.androidbase.activities.*; +import org.isoron.uhabits.intents.*; +import org.isoron.uhabits.ui.about.*; + +import javax.inject.*; + +public class AboutScreen extends BaseScreen implements AboutBehavior.Screen +{ + @NonNull + private final IntentFactory intents; + + @Inject + public AboutScreen(@NonNull BaseActivity activity, + @NonNull IntentFactory intents) + { + super(activity); + this.intents = intents; + } + + @Override + public void showMessage(AboutBehavior.Message message) + { + Toast.makeText(activity, "OK", Toast.LENGTH_LONG).show(); + } + + @Override + public void showRateAppWebsite() + { + activity.startActivity(intents.rateApp(activity)); + } + + @Override + public void showSendFeedbackScreen() + { + activity.startActivity(intents.sendFeedback(activity)); + } + + @Override + public void showSourceCodeWebsite() + { + activity.startActivity(intents.viewSourceCode(activity)); + } + + @Override + public void showTranslationWebsite() + { + activity.startActivity(intents.helpTranslate(activity)); + } +} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java index c2bad78f4..56ade45da 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java @@ -49,7 +49,7 @@ public class EditHabitDialog extends AppCompatDialogFragment protected Habit originalHabit; - protected Preferences prefs; + protected AndroidPreferences prefs; protected CommandRunner commandRunner; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java index 57d694561..8953c49a9 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java @@ -45,7 +45,7 @@ public class ListHabitsActivity extends BaseActivity private boolean pureBlack; - private Preferences prefs; + private AndroidPreferences prefs; private MidnightTimer midnightTimer; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java index 58160bb68..81aadca72 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java @@ -57,7 +57,7 @@ public class ListHabitsController private final HabitCardListAdapter adapter; @NonNull - private final Preferences prefs; + private final AndroidPreferences prefs; @NonNull private final CommandRunner commandRunner; @@ -81,7 +81,7 @@ public class ListHabitsController @NonNull HabitList habitList, @NonNull HabitCardListAdapter adapter, @NonNull ListHabitsScreen screen, - @NonNull Preferences prefs, + @NonNull AndroidPreferences prefs, @NonNull ReminderScheduler reminderScheduler, @NonNull TaskRunner taskRunner, @NonNull WidgetUpdater widgetUpdater, diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java index 68b8ae69b..b4c601293 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java @@ -43,7 +43,7 @@ public class ListHabitsMenu extends BaseMenu private boolean showCompleted; - private final Preferences preferences; + private final AndroidPreferences preferences; private ThemeSwitcher themeSwitcher; @@ -51,7 +51,7 @@ public class ListHabitsMenu extends BaseMenu public ListHabitsMenu(@NonNull BaseActivity activity, @NonNull ListHabitsScreen screen, @NonNull HabitCardListAdapter adapter, - @NonNull Preferences preferences, + @NonNull AndroidPreferences preferences, @NonNull ThemeSwitcher themeSwitcher) { super(activity); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java index 6297a37d2..9563eadf2 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java @@ -89,7 +89,7 @@ public class ListHabitsScreen extends BaseScreen private final ThemeSwitcher themeSwitcher; @NonNull - private Preferences prefs; + private AndroidPreferences prefs; @NonNull private final CommandParser commandParser; @@ -103,7 +103,7 @@ public class ListHabitsScreen extends BaseScreen @NonNull ConfirmDeleteDialogFactory confirmDeleteDialogFactory, @NonNull ColorPickerDialogFactory colorPickerFactory, @NonNull EditHabitDialogFactory editHabitDialogFactory, - @NonNull Preferences prefs, + @NonNull AndroidPreferences prefs, @NonNull CommandParser commandParser) { super(activity); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonController.java index 382e12cda..b8b7e04a4 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonController.java @@ -37,14 +37,14 @@ public class CheckmarkButtonController private Listener listener; @NonNull - private final Preferences prefs; + private final AndroidPreferences prefs; @NonNull private Habit habit; private long timestamp; - public CheckmarkButtonController(@Provided @NonNull Preferences prefs, + public CheckmarkButtonController(@Provided @NonNull AndroidPreferences prefs, @NonNull Habit habit, long timestamp) { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/NumberButtonController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/NumberButtonController.java index 0cd31fe20..0198625d3 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/NumberButtonController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/NumberButtonController.java @@ -37,14 +37,14 @@ public class NumberButtonController private Listener listener; @NonNull - private final Preferences prefs; + private final AndroidPreferences prefs; @NonNull private Habit habit; private long timestamp; - public NumberButtonController(@Provided @NonNull Preferences prefs, + public NumberButtonController(@Provided @NonNull AndroidPreferences prefs, @NonNull Habit habit, long timestamp) { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java index 4367bbb23..7fbe0a9b1 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java @@ -58,13 +58,13 @@ public class HabitCardListAdapter private final HabitCardListCache cache; @NonNull - private Preferences preferences; + private AndroidPreferences preferences; private final MidnightTimer midnightTimer; @Inject public HabitCardListAdapter(@NonNull HabitCardListCache cache, - @NonNull Preferences preferences, + @NonNull AndroidPreferences preferences, @NonNull MidnightTimer midnightTimer) { this.preferences = preferences; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java index 8fa0d6274..c2f2967eb 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java @@ -33,7 +33,7 @@ import org.isoron.uhabits.utils.*; @AutoFactory public class HintList { - private final Preferences prefs; + private final AndroidPreferences prefs; @NonNull private final String[] hints; @@ -43,7 +43,7 @@ public class HintList * * @param hints initial list of hints */ - public HintList(@Provided @NonNull Preferences prefs, + public HintList(@Provided @NonNull AndroidPreferences prefs, @NonNull String hints[]) { this.prefs = prefs; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java index c61c378ce..16cc528e2 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java @@ -39,14 +39,14 @@ import static org.isoron.uhabits.utils.ColorUtils.*; import static org.isoron.uhabits.utils.InterfaceUtils.getDimension; public class CheckmarkPanelView extends LinearLayout - implements Preferences.Listener + implements AndroidPreferences.Listener { private static final int LEFT_TO_RIGHT = 0; private static final int RIGHT_TO_LEFT = 1; @Nullable - private Preferences prefs; + private AndroidPreferences prefs; private int values[]; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java index 761301d39..733e8fd64 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java @@ -27,7 +27,6 @@ import android.util.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.activities.habits.list.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.utils.*; @@ -36,13 +35,13 @@ import java.util.*; import static org.isoron.uhabits.utils.InterfaceUtils.*; public class HeaderView extends ScrollableChart - implements Preferences.Listener, MidnightTimer.MidnightListener + implements AndroidPreferences.Listener, MidnightTimer.MidnightListener { private int buttonCount; @Nullable - private Preferences prefs; + private AndroidPreferences prefs; @Nullable private MidnightTimer midnightTimer; @@ -52,7 +51,7 @@ public class HeaderView extends ScrollableChart private RectF rect; public HeaderView(@NonNull Context context, - @NonNull Preferences prefs, + @NonNull AndroidPreferences prefs, @NonNull MidnightTimer midnightTimer) { super(context); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java index 1397d0446..3bbcf95f3 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java @@ -39,14 +39,14 @@ import static org.isoron.uhabits.utils.ColorUtils.*; import static org.isoron.uhabits.utils.InterfaceUtils.*; public class NumberPanelView extends LinearLayout - implements Preferences.Listener + implements AndroidPreferences.Listener { private static final int LEFT_TO_RIGHT = 0; private static final int RIGHT_TO_LEFT = 1; @Nullable - private Preferences prefs; + private AndroidPreferences prefs; private double values[]; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java index 611b979b5..0a914d873 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java @@ -27,6 +27,9 @@ import android.support.annotation.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.habits.show.*; + +import java.io.*; /** * Activity that allows the user to see more information about a single habit. @@ -34,8 +37,24 @@ import org.isoron.uhabits.models.*; * Shows all the metadata for the habit, in addition to several charts. */ public class ShowHabitActivity extends BaseActivity + implements ShowHabitMenuBehavior.System { - private HabitList habits; + @Nullable + private HabitList habitList; + + @Nullable + private AppComponent appComponent; + + @Nullable + private ShowHabitScreen screen; + + @Override + public File getCSVOutputDir() + { + if(appComponent == null) throw new IllegalStateException(); + + return appComponent.getBaseSystem().getFilesDir("CSV"); + } @Override protected void onCreate(Bundle savedInstanceState) @@ -43,7 +62,8 @@ public class ShowHabitActivity extends BaseActivity super.onCreate(savedInstanceState); HabitsApplication app = (HabitsApplication) getApplicationContext(); - habits = app.getComponent().getHabitList(); + appComponent = app.getComponent(); + habitList = appComponent.getHabitList(); Habit habit = getHabitFromIntent(); ShowHabitComponent component = DaggerShowHabitComponent @@ -52,22 +72,30 @@ public class ShowHabitActivity extends BaseActivity .showHabitModule(new ShowHabitModule(this, habit)) .build(); - ShowHabitRootView rootView = component.getRootView(); - ShowHabitScreen screen = component.getScreen(); - - setScreen(screen); + screen = component.getScreen(); screen.setMenu(component.getMenu()); screen.setController(component.getController()); - rootView.setController(component.getController()); + component.getRootView().setController(component.getController()); + setScreen(screen); + } + + @Override + protected void onResume() + { + if(screen == null) throw new IllegalStateException(); + + super.onResume(); screen.reattachDialogs(); } @NonNull private Habit getHabitFromIntent() { + if(habitList == null) throw new IllegalStateException(); + Uri data = getIntent().getData(); - Habit habit = habits.getById(ContentUris.parseId(data)); + Habit habit = habitList.getById(ContentUris.parseId(data)); if (habit == null) throw new RuntimeException("habit not found"); return habit; } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java index 497ea8f61..3bfc99c54 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -19,6 +19,8 @@ package org.isoron.uhabits.activities.habits.show; +import android.support.annotation.*; + import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; @@ -29,11 +31,15 @@ import dagger.*; dependencies = { AppComponent.class }) public interface ShowHabitComponent { + @NonNull ShowHabitController getController(); + @NonNull ShowHabitsMenu getMenu(); + @NonNull ShowHabitRootView getRootView(); + @NonNull ShowHabitScreen getScreen(); } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java index 960e5abfb..7de9f0080 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -21,50 +21,39 @@ package org.isoron.uhabits.activities.habits.show; import android.support.annotation.*; -import org.isoron.androidbase.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.activities.habits.show.views.*; +import org.isoron.uhabits.ui.habits.show.*; import javax.inject.*; -@ActivityScope public class ShowHabitController - implements ShowHabitRootView.Controller, HistoryEditorDialog.Controller + implements HistoryCard.Controller, HistoryEditorDialog.Controller { - @NonNull - private final ShowHabitScreen screen; + private ShowHabitBehavior behavior; - @NonNull - private final Habit habit; - - @NonNull - private final CommandRunner commandRunner; + private ShowHabitScreen screen; @Inject - public ShowHabitController(@NonNull ShowHabitScreen screen, - @NonNull CommandRunner commandRunner, - @NonNull Habit habit) + public ShowHabitController(@NonNull ShowHabitBehavior behavior, + @NonNull ShowHabitScreen screen) { + this.behavior = behavior; this.screen = screen; - this.habit = habit; - this.commandRunner = commandRunner; } @Override public void onEditHistoryButtonClick() { - screen.showEditHistoryDialog(); + behavior.onEditHistory(); } @Override public void onToggleCheckmark(long timestamp) { - commandRunner.execute(new ToggleRepetitionCommand(habit, timestamp), - null); + behavior.onToggleCheckmark(timestamp); } - @Override public void onToolbarChanged() { screen.invalidateToolbar(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java index 92f29ecaf..3c683baac 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -19,17 +19,20 @@ package org.isoron.uhabits.activities.habits.show; +import android.support.annotation.*; + import org.isoron.androidbase.activities.*; import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.habits.show.*; import dagger.*; @Module public class ShowHabitModule extends ActivityModule { - private final Habit habit; + private Habit habit; - public ShowHabitModule(BaseActivity activity, Habit habit) + public ShowHabitModule(@NonNull BaseActivity activity, @NonNull Habit habit) { super(activity); this.habit = habit; @@ -40,4 +43,22 @@ public class ShowHabitModule extends ActivityModule { return habit; } + + @Provides + public ShowHabitBehavior.Screen getScreen(ShowHabitScreen screen) + { + return screen; + } + + @Provides + public ShowHabitMenuBehavior.Screen getMenuScreen(ShowHabitScreen screen) + { + return screen; + } + + @Provides + public ShowHabitMenuBehavior.System getSystem(BaseActivity activity) + { + return (ShowHabitActivity) activity; + } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java index 42f888014..986c4c9a8 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java @@ -65,8 +65,8 @@ public class ShowHabitRootView extends BaseRootView @BindView(R.id.toolbar) Toolbar toolbar; - @NonNull - private Controller controller; + @Nullable + private ShowHabitController controller; @Inject public ShowHabitRootView(@NonNull @ActivityContext Context context, @@ -78,25 +78,11 @@ public class ShowHabitRootView extends BaseRootView addView(inflate(getContext(), R.layout.show_habit, null)); ButterKnife.bind(this); - controller = new Controller() {}; - + setDisplayHomeAsUp(true); initCards(); initToolbar(); } - @Override - public boolean getDisplayHomeAsUp() - { - return true; - } - - @NonNull - @Override - public Toolbar getToolbar() - { - return toolbar; - } - @Override public int getToolbarColor() { @@ -114,10 +100,10 @@ public class ShowHabitRootView extends BaseRootView toolbar.setTitle(habit.getName()); }); - controller.onToolbarChanged(); + if(controller != null) controller.onToolbarChanged(); } - public void setController(@NonNull Controller controller) + public void setController(@NonNull ShowHabitController controller) { this.controller = controller; historyCard.setController(controller); @@ -158,9 +144,4 @@ public class ShowHabitRootView extends BaseRootView else barCard.setVisibility(GONE); } - - public interface Controller extends HistoryCard.Controller - { - default void onToolbarChanged() {} - } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java index d1f680c52..813b5d21e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java @@ -22,14 +22,17 @@ package org.isoron.uhabits.activities.habits.show; import android.support.annotation.*; import org.isoron.androidbase.activities.*; +import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.*; import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.habits.show.*; import javax.inject.*; @ActivityScope public class ShowHabitScreen extends BaseScreen + implements ShowHabitMenuBehavior.Screen, ShowHabitBehavior.Screen { @NonNull private final Habit habit; @@ -44,8 +47,7 @@ public class ShowHabitScreen extends BaseScreen public ShowHabitScreen(@NonNull BaseActivity activity, @NonNull Habit habit, @NonNull ShowHabitRootView view, - @NonNull - EditHabitDialogFactory editHabitDialogFactory) + @NonNull EditHabitDialogFactory editHabitDialogFactory) { super(activity); setRootView(view); @@ -53,37 +55,46 @@ public class ShowHabitScreen extends BaseScreen this.habit = habit; } - public void setController(@NonNull ShowHabitController controller) - { - this.controller = controller; - } - public void reattachDialogs() { - if(controller == null) throw new IllegalStateException(); + if (controller == null) throw new IllegalStateException(); HistoryEditorDialog historyEditor = (HistoryEditorDialog) activity .getSupportFragmentManager() .findFragmentByTag("historyEditor"); - if (historyEditor != null) - historyEditor.setController(controller); + if (historyEditor != null) historyEditor.setController(controller); } - public void showEditHabitDialog() + public void setController(@NonNull ShowHabitController controller) { - activity.showDialog( - editHabitDialogFactory.edit(habit), - "editHabit"); + this.controller = controller; } - public void showEditHistoryDialog() + @Override + public void showEditHabitScreen(@NonNull Habit habit) { - if(controller == null) throw new IllegalStateException(); + activity.showDialog(editHabitDialogFactory.edit(habit), "editHabit"); + } + + @Override + public void showEditHistoryScreen() + { + if (controller == null) throw new IllegalStateException(); HistoryEditorDialog dialog = new HistoryEditorDialog(); dialog.setHabit(habit); dialog.setController(controller); dialog.show(activity.getSupportFragmentManager(), "historyEditor"); } + + @Override + public void showMessage(ShowHabitMenuBehavior.Message m) + { + switch (m) + { + case COULD_NOT_EXPORT: + showMessage(R.string.could_not_export); + } + } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java index 352b9b7b4..ca0792f41 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java @@ -22,14 +22,9 @@ package org.isoron.uhabits.activities.habits.show; import android.support.annotation.*; import android.view.*; -import org.isoron.androidbase.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.tasks.*; - -import java.io.*; -import java.util.*; +import org.isoron.uhabits.ui.habits.show.*; import javax.inject.*; @@ -37,47 +32,14 @@ import javax.inject.*; public class ShowHabitsMenu extends BaseMenu { @NonNull - private final BaseSystem system; - - @NonNull - private final ShowHabitScreen screen; - - @NonNull - private final Habit habit; - - @NonNull - private final TaskRunner taskRunner; - - @NonNull - private ExportCSVTaskFactory exportCSVFactory; + ShowHabitMenuBehavior behavior; @Inject public ShowHabitsMenu(@NonNull BaseActivity activity, - @NonNull BaseSystem system, - @NonNull ShowHabitScreen screen, - @NonNull Habit habit, - @NonNull ExportCSVTaskFactory exportCSVFactory, - @NonNull TaskRunner taskRunner) + @NonNull ShowHabitMenuBehavior behavior) { super(activity); - this.system = system; - this.screen = screen; - this.habit = habit; - this.taskRunner = taskRunner; - this.exportCSVFactory = exportCSVFactory; - } - - public void exportHabit() - { - List selected = new LinkedList<>(); - selected.add(habit); - File outputDir = system.getFilesDir("CSV"); - ExportCSVTask task = exportCSVFactory.create(selected, - outputDir, filename -> { - if (filename != null) screen.showSendFileScreen(filename); - else screen.showMessage(R.string.could_not_export); - }); - taskRunner.execute(task); + this.behavior = behavior; } @Override @@ -86,11 +48,11 @@ public class ShowHabitsMenu extends BaseMenu switch (item.getItemId()) { case R.id.action_edit_habit: - screen.showEditHabitDialog(); + behavior.onEditHabit(); return true; case R.id.export: - this.exportHabit(); + behavior.onExportCSV(); return true; default: diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java index cbb278310..d40c61cd5 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java @@ -55,7 +55,7 @@ public class ScoreCard extends HabitCard private TaskRunner taskRunner; @Nullable - private Preferences prefs; + private AndroidPreferences prefs; public ScoreCard(Context context) { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java index dbd733b62..2cc1cd7d5 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java @@ -41,7 +41,7 @@ public class SettingsFragment extends PreferenceFragmentCompat private SharedPreferences sharedPrefs; @Nullable - private Preferences prefs; + private AndroidPreferences prefs; @Override public void onActivityResult(int requestCode, int resultCode, Intent data) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java index d2b0f7942..2a5db5863 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java @@ -44,7 +44,7 @@ import static org.isoron.uhabits.notifications.RingtoneManager.*; @AppScope public class NotificationTray - implements CommandRunner.Listener, Preferences.Listener + implements CommandRunner.Listener, AndroidPreferences.Listener { @NonNull private final Context context; @@ -59,7 +59,7 @@ public class NotificationTray private final CommandRunner commandRunner; @NonNull - private final Preferences preferences; + private final AndroidPreferences preferences; @NonNull private final HashMap active; @@ -69,7 +69,7 @@ public class NotificationTray @NonNull TaskRunner taskRunner, @NonNull PendingIntentFactory pendingIntents, @NonNull CommandRunner commandRunner, - @NonNull Preferences preferences) + @NonNull AndroidPreferences preferences) { this.context = context; this.taskRunner = taskRunner; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/Preferences.java b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java similarity index 97% rename from uhabits-android/src/main/java/org/isoron/uhabits/preferences/Preferences.java rename to uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java index 33d324851..9231967b4 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/Preferences.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java @@ -32,8 +32,8 @@ import java.util.*; import javax.inject.*; @AppScope -public class Preferences - implements SharedPreferences.OnSharedPreferenceChangeListener +public class AndroidPreferences + implements SharedPreferences.OnSharedPreferenceChangeListener, Preferences { private final Context context; @@ -44,7 +44,7 @@ public class Preferences private LinkedList listeners; @Inject - public Preferences(@AppContext Context context) + public AndroidPreferences(@AppContext Context context) { this.context = context; listeners = new LinkedList<>(); @@ -78,26 +78,6 @@ public class Preferences } } - public String getSyncAddress() - { - return prefs.getString("pref_sync_address", "https://sync.loophabits.org:4000"); - } - - public String getSyncClientId() - { - String id = prefs.getString("pref_sync_client_id", ""); - if(!id.isEmpty()) return id; - - id = UUID.randomUUID().toString(); - prefs.edit().putString("pref_sync_client_id", id).apply(); - return id; - } - - public boolean isSyncFeatureEnabled() - { - return prefs.getBoolean("pref_feature_sync", false); - } - public void setDefaultOrder(HabitList.Order order) { prefs.edit().putString("pref_default_order", order.name()).apply(); @@ -171,6 +151,22 @@ public class Preferences return Long.parseLong(prefs.getString("pref_snooze_interval", "15")); } + public String getSyncAddress() + { + return prefs.getString("pref_sync_address", + "https://sync.loophabits.org:4000"); + } + + public String getSyncClientId() + { + String id = prefs.getString("pref_sync_client_id", ""); + if (!id.isEmpty()) return id; + + id = UUID.randomUUID().toString(); + prefs.edit().putString("pref_sync_client_id", id).apply(); + return id; + } + public String getSyncKey() { return prefs.getString("pref_sync_key", ""); @@ -232,6 +228,11 @@ public class Preferences return prefs.getBoolean("pref_short_toggle", false); } + public boolean isSyncFeatureEnabled() + { + return prefs.getBoolean("pref_feature_sync", false); + } + @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java index 4d10d7ae5..7023a02b3 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java @@ -53,7 +53,7 @@ public class PebbleReceiver extends PebbleDataReceiver private HabitList filteredHabits; - private Preferences prefs; + private AndroidPreferences prefs; public PebbleReceiver() { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java index 22fd4bcd0..776fc4d85 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java @@ -37,12 +37,12 @@ public class ReminderController @NonNull private final NotificationTray notificationTray; - private Preferences preferences; + private AndroidPreferences preferences; @Inject public ReminderController(@NonNull ReminderScheduler reminderScheduler, @NonNull NotificationTray notificationTray, - @NonNull Preferences preferences) + @NonNull AndroidPreferences preferences) { this.reminderScheduler = reminderScheduler; this.notificationTray = notificationTray; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java index e8dd70729..00e55d5aa 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java @@ -61,7 +61,7 @@ public class WidgetReceiver extends BroadcastReceiver IntentParser parser = app.getComponent().getIntentParser(); WidgetController controller = component.getWidgetController(); - Preferences prefs = app.getComponent().getPreferences(); + AndroidPreferences prefs = app.getComponent().getPreferences(); if(prefs.isSyncFeatureEnabled()) context.startService(new Intent(context, SyncService.class)); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java index 18449f204..c851df87d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java @@ -72,7 +72,7 @@ public class SyncManager implements CommandRunner.Listener private boolean readyToEmit = false; @NonNull - private final Preferences prefs; + private final AndroidPreferences prefs; @NonNull private CommandRunner commandRunner; @@ -86,7 +86,7 @@ public class SyncManager implements CommandRunner.Listener @Inject public SyncManager(@NonNull BaseSystem system, - @NonNull Preferences prefs, + @NonNull AndroidPreferences prefs, @NonNull CommandRunner commandRunner, @NonNull CommandParser commandParser) { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncService.java b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncService.java index 3f8d59590..e1af21506 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncService.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncService.java @@ -29,11 +29,11 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.receivers.*; -public class SyncService extends Service implements Preferences.Listener +public class SyncService extends Service implements AndroidPreferences.Listener { private SyncManager syncManager; - private Preferences prefs; + private AndroidPreferences prefs; private ConnectivityReceiver connectivityReceiver; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.java index 7ff8cf1fe..325b3b464 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.java @@ -39,7 +39,7 @@ public class ScoreWidget extends BaseWidget @NonNull private Habit habit; - private final Preferences prefs; + private final AndroidPreferences prefs; public ScoreWidget(@NonNull Context context, int id, @NonNull Habit habit) { diff --git a/uhabits-core/build.gradle b/uhabits-core/build.gradle index ef7677ada..9cb41dc49 100644 --- a/uhabits-core/build.gradle +++ b/uhabits-core/build.gradle @@ -12,6 +12,7 @@ dependencies { testImplementation 'junit:junit:4+' testImplementation 'org.hamcrest:hamcrest-library:1.4-atlassian-1' + testImplementation 'org.apache.commons:commons-io:1.3.2' testImplementation 'org.mockito:mockito-core:2.8.9' testImplementation 'org.json:json:20160810' diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java b/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java new file mode 100644 index 000000000..cb3004b23 --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2017 Á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.preferences; + +public interface Preferences +{ + + void setDeveloper(boolean isDeveloper); +} diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/about/AboutBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/about/AboutBehavior.java new file mode 100644 index 000000000..faa382311 --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/about/AboutBehavior.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2017 Á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.ui.about; + +import android.support.annotation.*; + +import org.isoron.uhabits.preferences.*; + +public class AboutBehavior +{ + private int developerCountdown = 5; + + @NonNull + private Preferences prefs; + + @NonNull + private Screen screen; + + public AboutBehavior(@NonNull Preferences prefs, @NonNull Screen screen) + { + this.prefs = prefs; + this.screen = screen; + } + + public void onPressDeveloperCountdown() + { + developerCountdown--; + if (developerCountdown <= 0) + { + prefs.setDeveloper(true); + screen.showMessage(Message.YOU_ARE_NOW_A_DEVELOPER); + } + } + + public void onRateApp() + { + screen.showRateAppWebsite(); + } + + public void onSendFeedback() + { + screen.showSendFeedbackScreen(); + } + + public void onTranslateApp() + { + screen.showTranslationWebsite(); + } + + public void onViewSourceCode() + { + screen.showSourceCodeWebsite(); + } + + public enum Message + { + YOU_ARE_NOW_A_DEVELOPER + } + + public interface Screen + { + void showMessage(Message message); + + void showRateAppWebsite(); + + void showSendFeedbackScreen(); + + void showSourceCodeWebsite(); + + void showTranslationWebsite(); + } + +} diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitBehavior.java new file mode 100644 index 000000000..e66d6c71b --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitBehavior.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2017 Á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.ui.habits.show; + +import android.support.annotation.*; + +import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.models.*; + +import javax.inject.*; + +public class ShowHabitBehavior +{ + @NonNull + private final Habit habit; + + @NonNull + private final CommandRunner commandRunner; + + @NonNull + private Screen screen; + + @Inject + public ShowHabitBehavior(@NonNull CommandRunner commandRunner, + @NonNull Habit habit, + @NonNull Screen screen) + { + this.habit = habit; + this.commandRunner = commandRunner; + this.screen = screen; + } + + public void onEditHistory() + { + screen.showEditHistoryScreen(); + } + + public void onToggleCheckmark(long timestamp) + { + commandRunner.execute(new ToggleRepetitionCommand(habit, timestamp), + null); + } + + public interface Screen + { + void showEditHistoryScreen(); + } +} diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehavior.java new file mode 100644 index 000000000..ae1ec3377 --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehavior.java @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2017 Á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.ui.habits.show; + +import android.support.annotation.*; + +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.tasks.*; + +import java.io.*; +import java.util.*; + +import javax.inject.*; + +public class ShowHabitMenuBehavior +{ + private HabitList habitList; + + @NonNull + private final Habit habit; + + @NonNull + private final TaskRunner taskRunner; + + @NonNull + private Screen screen; + + @NonNull + private System system; + + @Inject + public ShowHabitMenuBehavior(@NonNull HabitList habitList, + @NonNull Habit habit, + @NonNull TaskRunner taskRunner, + @NonNull Screen screen, + @NonNull System system) + { + this.habitList = habitList; + this.habit = habit; + this.taskRunner = taskRunner; + this.screen = screen; + this.system = system; + } + + public void onEditHabit() + { + screen.showEditHabitScreen(habit); + } + + public void onExportCSV() + { + List selected = Collections.singletonList(habit); + File outputDir = system.getCSVOutputDir(); + + taskRunner.execute( + new ExportCSVTask(habitList, selected, outputDir, filename -> + { + if (filename != null) screen.showSendFileScreen(filename); + else screen.showMessage(Message.COULD_NOT_EXPORT); + })); + } + + public enum Message + { + COULD_NOT_EXPORT + } + + public interface Screen + { + void showEditHabitScreen(@NonNull Habit habit); + + void showMessage(Message m); + + void showSendFileScreen(String filename); + } + + public interface System + { + File getCSVOutputDir(); + } +} diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java index bceada3bc..35118052c 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java @@ -21,6 +21,7 @@ package org.isoron.uhabits; import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.memory.*; +import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.utils.*; import org.junit.*; @@ -34,6 +35,8 @@ public class BaseUnitTest protected MemoryModelFactory modelFactory; + protected SingleThreadTaskRunner taskRunner; + @Before public void setUp() { @@ -44,6 +47,7 @@ public class BaseUnitTest modelFactory = new MemoryModelFactory(); habitList = modelFactory.buildHabitList(); fixtures = new HabitFixtures(modelFactory); + taskRunner = new SingleThreadTaskRunner(); } @After diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehaviorTest.java new file mode 100644 index 000000000..7a3c491d2 --- /dev/null +++ b/uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehaviorTest.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2017 Á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.ui.habits.show; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; +import org.junit.*; + +import java.io.*; + +import static java.nio.file.Files.*; +import static org.apache.commons.io.FileUtils.*; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.*; + +public class ShowHabitMenuBehaviorTest extends BaseUnitTest +{ + private ShowHabitMenuBehavior.System system; + + private ShowHabitMenuBehavior.Screen screen; + + private Habit habit; + + private ShowHabitMenuBehavior menu; + + @Override + public void setUp() + { + super.setUp(); + system = mock(ShowHabitMenuBehavior.System.class); + screen = mock(ShowHabitMenuBehavior.Screen.class); + + habit = fixtures.createShortHabit(); + menu = new ShowHabitMenuBehavior(habitList, habit, taskRunner, screen, + system); + } + + @Test + public void testOnEditHabit() + { + menu.onEditHabit(); + verify(screen).showEditHabitScreen(habit); + } + + @Test + public void testOnExport() throws Exception + { + File outputDir = createTempDirectory("CSV").toFile(); + when(system.getCSVOutputDir()).thenReturn(outputDir); + menu.onExportCSV(); + assertThat(listFiles(outputDir, null, false).size(), equalTo(1)); + deleteDirectory(outputDir); + } +} \ No newline at end of file From 95385fa8f4eabae0ba5008e0284e39cbde5d5c85 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Fri, 26 May 2017 18:38:08 -0400 Subject: [PATCH 12/27] Activate coverage report for uhabits-core --- uhabits-core/build.gradle | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/uhabits-core/build.gradle b/uhabits-core/build.gradle index 9cb41dc49..fc0189b05 100644 --- a/uhabits-core/build.gradle +++ b/uhabits-core/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'java' +apply plugin: 'jacoco' dependencies { @@ -22,5 +23,14 @@ dependencies { compile 'junit:junit:4.12' } +jacocoTestReport { + reports { + xml.enabled = true + html.enabled = true + } +} + +check.dependsOn jacocoTestReport + sourceCompatibility = "1.8" targetCompatibility = "1.8" From 3e558be4d44594cae2d620d1a6a385dd70cbd836 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Fri, 26 May 2017 22:04:59 -0400 Subject: [PATCH 13/27] Move ListHabitsBehavior to uhabits-core --- .../isoron/uhabits/AndroidTestComponent.java | 20 +- .../habits/list/ListHabitsControllerTest.java | 129 ---------- .../org/isoron/androidbase/BaseSystem.java | 47 ++-- .../activities/ActivityComponent.java | 8 +- .../androidbase/activities/BaseActivity.java | 2 +- .../org/isoron/uhabits/HabitsApplication.java | 8 +- ...AppComponent.java => HabitsComponent.java} | 15 +- .../java/org/isoron/uhabits/HabitsModule.java | 35 +++ .../activities/about/AboutActivity.java | 2 +- .../habits/edit/EditHabitDialog.java | 2 +- .../habits/list/ListHabitsActivity.java | 4 +- .../habits/list/ListHabitsComponent.java | 5 +- .../habits/list/ListHabitsController.java | 124 ++-------- .../habits/list/ListHabitsModule.java | 48 ++++ .../habits/list/ListHabitsScreen.java | 120 ++++++---- .../habits/show/ShowHabitActivity.java | 16 +- .../habits/show/ShowHabitComponent.java | 2 +- .../habits/show/ShowHabitModule.java | 5 +- .../automation/FireSettingReceiver.java | 4 +- .../preferences/AndroidPreferences.java | 2 + .../receivers/ConnectivityReceiver.java | 2 +- .../uhabits/receivers/PebbleReceiver.java | 2 +- .../uhabits/receivers/ReminderReceiver.java | 4 +- .../uhabits/receivers/WidgetReceiver.java | 4 +- .../uhabits/widgets/HabitPickerDialog.java | 2 +- .../activities/BaseActivityTest.java | 1 - .../uhabits/preferences/Preferences.java | 8 + .../ui/habits/list/ListHabitsBehavior.java | 220 ++++++++++++++++++ .../java/org/isoron/uhabits/BaseUnitTest.java | 8 +- .../isoron/uhabits/models/HabitFixtures.java | 25 ++ .../habits/list/ListHabitsBehaviorTest.java | 132 +++++++++++ 31 files changed, 665 insertions(+), 341 deletions(-) delete mode 100644 uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java rename uhabits-android/src/main/java/org/isoron/{uhabits => androidbase}/activities/ActivityComponent.java (84%) rename uhabits-android/src/main/java/org/isoron/uhabits/{AppComponent.java => HabitsComponent.java} (93%) create mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java create mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehavior.java create mode 100644 uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehaviorTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java index 7fbfa78e9..2588208f1 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java @@ -26,6 +26,18 @@ import org.isoron.uhabits.tasks.*; import dagger.*; +@AppScope +@Component(modules = { + AppModule.class, + HabitsModule.class, + SingleThreadModule.class, + SQLModelFactory.class +}) +public interface AndroidTestComponent extends HabitsComponent +{ + +} + @Module class SingleThreadModule { @@ -36,11 +48,3 @@ class SingleThreadModule return new SingleThreadTaskRunner(); } } - -@AppScope -@Component(modules = { - AppModule.class, SingleThreadModule.class, SQLModelFactory.class -}) -public interface AndroidTestComponent extends AppComponent -{ -} diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java deleted file mode 100644 index ee469da95..000000000 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsControllerTest.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2017 Á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.activities.habits.list; - -import org.isoron.androidbase.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.habits.list.model.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.tasks.*; -import org.isoron.uhabits.tasks.android.*; -import org.isoron.uhabits.utils.*; -import org.isoron.uhabits.widgets.*; -import org.junit.*; - -import static org.mockito.Mockito.*; - -public class ListHabitsControllerTest extends BaseAndroidTest -{ - private ListHabitsController controller; - - private ImportDataTaskFactory importTaskFactory; - - private BaseSystem system; - - private CommandRunner commandRunner; - - private HabitCardListAdapter adapter; - - private ListHabitsScreen screen; - - private AndroidPreferences prefs; - - private ReminderScheduler reminderScheduler; - - private SingleThreadTaskRunner taskRunner; - - private WidgetUpdater widgetUpdater; - - private ExportCSVTaskFactory exportCSVFactory; - - private ExportDBTaskFactory exportDBFactory; - - @Override - public void setUp() - { - super.setUp(); - - habitList = mock(HabitList.class); - system = mock(BaseSystem.class); - commandRunner = mock(CommandRunner.class); - adapter = mock(HabitCardListAdapter.class); - screen = mock(ListHabitsScreen.class); - prefs = mock(AndroidPreferences.class); - reminderScheduler = mock(ReminderScheduler.class); - taskRunner = new SingleThreadTaskRunner(); - widgetUpdater = mock(WidgetUpdater.class); - importTaskFactory = mock(ImportDataTaskFactory.class); - exportCSVFactory = mock(ExportCSVTaskFactory.class); - exportDBFactory = mock(ExportDBTaskFactory.class); - - controller = - spy(new ListHabitsController(system, commandRunner, habitList, - adapter, screen, prefs, reminderScheduler, taskRunner, - widgetUpdater, importTaskFactory, exportCSVFactory, exportDBFactory)); - } - - @Test - public void testOnHabitClick() - { - Habit h = mock(Habit.class); - controller.onHabitClick(h); - verify(screen).showHabitScreen(h); - } - - @Test - public void testOnHabitReorder() - { - Habit from = mock(Habit.class); - Habit to = mock(Habit.class); - controller.onHabitReorder(from, to); - verify(habitList).reorder(from, to); - } - - @Test - public void onInvalidToggle() - { - controller.onInvalidToggle(); - verify(screen).showMessage(R.string.long_press_to_toggle); - } - - @Test - public void onStartup_notFirstLaunch() - { - when(prefs.isFirstRun()).thenReturn(false); - controller.onStartup(); - verify(prefs).incrementLaunchCount(); - } - - @Test - public void onStartup_firstLaunch() - { - long today = DateUtils.getStartOfToday(); - - when(prefs.isFirstRun()).thenReturn(true); - controller.onStartup(); - verify(prefs).setFirstRun(false); - verify(prefs).updateLastHint(-1, today); - verify(screen).showIntroScreen(); - } -} \ No newline at end of file diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java b/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java index 0aea883c7..8515c52dc 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java @@ -28,6 +28,8 @@ import android.view.*; import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.ui.habits.list.*; +import org.isoron.uhabits.ui.habits.show.*; import org.isoron.uhabits.utils.*; import java.io.*; @@ -45,7 +47,9 @@ import javax.inject.*; * permissions. */ @AppScope -public class BaseSystem implements CACertSSLContextProvider +public class BaseSystem implements CACertSSLContextProvider, + ListHabitsBehavior.System, + ShowHabitMenuBehavior.System { private Context context; @@ -84,24 +88,32 @@ public class BaseSystem implements CACertSSLContextProvider * @return the generated file. * @throws IOException when I/O errors occur. */ + @Override @NonNull - public File dumpBugReportToFile() throws IOException + public void dumpBugReportToFile() { - String date = - DateFormats.getBackupDateFormat().format(DateUtils.getLocalTime()); + try + { + String date = DateFormats + .getBackupDateFormat() + .format(DateUtils.getLocalTime()); - if (context == null) throw new RuntimeException( - "application context should not be null"); - File dir = getFilesDir("Logs"); - if (dir == null) throw new IOException("log dir should not be null"); + if (context == null) throw new IllegalStateException(); - File logFile = - new File(String.format("%s/Log %s.txt", dir.getPath(), date)); - FileWriter output = new FileWriter(logFile); - output.write(getBugReport()); - output.close(); + File dir = getFilesDir("Logs"); + if (dir == null) + throw new IOException("log dir should not be null"); - return logFile; + File logFile = + new File(String.format("%s/Log %s.txt", dir.getPath(), date)); + FileWriter output = new FileWriter(logFile); + output.write(getBugReport()); + output.close(); + } + catch (IOException e) + { + e.printStackTrace(); + } } /** @@ -112,6 +124,7 @@ public class BaseSystem implements CACertSSLContextProvider * @return a String containing the bug report. * @throws IOException when any I/O error occur. */ + @Override @NonNull public String getBugReport() throws IOException { @@ -125,6 +138,12 @@ public class BaseSystem implements CACertSSLContextProvider return log; } + @Override + public File getCSVOutputDir() + { + return getFilesDir("CSV"); + } + public String getLogcat() throws IOException { int maxLineCount = 250; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityComponent.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java similarity index 84% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityComponent.java rename to uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java index 4a085df13..c8f9dfbe0 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ActivityComponent.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,17 +17,17 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.androidbase.activities; -import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; import dagger.*; @ActivityScope @Component(modules = { ActivityModule.class }, - dependencies = { AppComponent.class }) + dependencies = { HabitsComponent.class }) public interface ActivityComponent { BaseActivity getActivity(); diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseActivity.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseActivity.java index dc8f28ed6..f7d80efe1 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseActivity.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseActivity.java @@ -126,7 +126,7 @@ abstract public class BaseActivity extends AppCompatActivity component = DaggerActivityComponent .builder() .activityModule(new ActivityModule(this)) - .appComponent(app.getComponent()) + .habitsComponent(app.getComponent()) .build(); component.getThemeSwitcher().apply(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java index 19184b300..8c5ed50b7 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java @@ -41,7 +41,7 @@ public class HabitsApplication extends Application { private Context context; - private static AppComponent component; + private static HabitsComponent component; private WidgetUpdater widgetUpdater; @@ -49,12 +49,12 @@ public class HabitsApplication extends Application private NotificationTray notificationTray; - public AppComponent getComponent() + public HabitsComponent getComponent() { return component; } - public static void setComponent(AppComponent component) + public static void setComponent(HabitsComponent component) { HabitsApplication.component = component; } @@ -78,7 +78,7 @@ public class HabitsApplication extends Application super.onCreate(); context = this; - component = DaggerAppComponent + component = DaggerHabitsComponent .builder() .appModule(new AppModule(context)) .build(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java similarity index 93% rename from uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java rename to uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java index 82007c403..6c7d6716c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/AppComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java @@ -40,10 +40,15 @@ import dagger.*; @AppScope @Component(modules = { - AppModule.class, AndroidTaskRunner.class, SQLModelFactory.class + AppModule.class, + HabitsModule.class, + AndroidTaskRunner.class, + SQLModelFactory.class }) -public interface AppComponent +public interface HabitsComponent { + AndroidPreferences getPreferences(); + BaseSystem getBaseSystem(); CommandRunner getCommandRunner(); @@ -67,13 +72,15 @@ public interface AppComponent IntentParser getIntentParser(); + MidnightTimer getMidnightTimer(); + ModelFactory getModelFactory(); NotificationTray getNotificationTray(); PendingIntentFactory getPendingIntentFactory(); - AndroidPreferences getPreferences(); + Preferences getCorePreferences(); ReminderScheduler getReminderScheduler(); @@ -86,6 +93,4 @@ public interface AppComponent WidgetPreferences getWidgetPreferences(); WidgetUpdater getWidgetUpdater(); - - MidnightTimer getMidnightTimer(); } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java new file mode 100644 index 000000000..00c285e14 --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2017 Á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; + +import org.isoron.uhabits.preferences.*; + +import dagger.*; + +@Module +public class HabitsModule +{ + @Provides + @AppScope + public static Preferences getPreferences(AndroidPreferences preferences) + { + return preferences; + } +} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java index 7af5e7025..7b5ae0361 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java @@ -36,7 +36,7 @@ public class AboutActivity extends BaseActivity { super.onCreate(savedInstanceState); HabitsApplication app = (HabitsApplication) getApplication(); - AppComponent cmp = app.getComponent(); + HabitsComponent cmp = app.getComponent(); AboutScreen screen = new AboutScreen(this, cmp.getIntentFactory()); AboutBehavior behavior = new AboutBehavior(cmp.getPreferences(), screen); AboutRootView rootView = new AboutRootView(this, behavior); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java index 56ade45da..58ccafe99 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java @@ -55,7 +55,7 @@ public class EditHabitDialog extends AppCompatDialogFragment protected HabitList habitList; - protected AppComponent component; + protected HabitsComponent component; protected ModelFactory modelFactory; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java index 8953c49a9..1571c8765 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java @@ -64,8 +64,8 @@ public class ListHabitsActivity extends BaseActivity component = DaggerListHabitsComponent .builder() - .appComponent(app.getComponent()) - .activityModule(new ActivityModule(this)) + .habitsComponent(app.getComponent()) + .listHabitsModule(new ListHabitsModule(this)) .build(); ListHabitsMenu menu = component.getMenu(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java index c67fba112..61ec5a4b2 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java @@ -23,13 +23,12 @@ import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; -import org.isoron.uhabits.utils.*; import dagger.*; @ActivityScope -@Component(modules = { ActivityModule.class }, - dependencies = { AppComponent.class }) +@Component(modules = { ListHabitsModule.class }, + dependencies = { HabitsComponent.class }) public interface ListHabitsComponent { HabitCardListAdapter getAdapter(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java index 81aadca72..ac4f1b7ae 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java @@ -21,21 +21,16 @@ package org.isoron.uhabits.activities.habits.list; import android.support.annotation.*; -import org.isoron.androidbase.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; -import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.tasks.android.*; -import org.isoron.uhabits.utils.*; -import org.isoron.uhabits.widgets.*; +import org.isoron.uhabits.ui.habits.list.*; import java.io.*; -import java.util.*; import javax.inject.*; @@ -43,82 +38,53 @@ import javax.inject.*; public class ListHabitsController implements HabitCardListController.HabitListener { - @NonNull - private final ListHabitsScreen screen; + private final ListHabitsBehavior behavior; @NonNull - private final BaseSystem system; - - @NonNull - private final HabitList habitList; + private final ListHabitsScreen screen; @NonNull private final HabitCardListAdapter adapter; - @NonNull - private final AndroidPreferences prefs; - - @NonNull - private final CommandRunner commandRunner; - @NonNull private final TaskRunner taskRunner; - private ReminderScheduler reminderScheduler; - - private WidgetUpdater widgetUpdater; - private ImportDataTaskFactory importTaskFactory; - private ExportCSVTaskFactory exportCSVFactory; - private ExportDBTaskFactory exportDBFactory; @Inject - public ListHabitsController(@NonNull BaseSystem system, - @NonNull CommandRunner commandRunner, - @NonNull HabitList habitList, + public ListHabitsController(@NonNull ListHabitsBehavior behavior, @NonNull HabitCardListAdapter adapter, @NonNull ListHabitsScreen screen, - @NonNull AndroidPreferences prefs, - @NonNull ReminderScheduler reminderScheduler, @NonNull TaskRunner taskRunner, - @NonNull WidgetUpdater widgetUpdater, @NonNull ImportDataTaskFactory importTaskFactory, - @NonNull ExportCSVTaskFactory exportCSVFactory, @NonNull ExportDBTaskFactory exportDBFactory) { + this.behavior = behavior; this.adapter = adapter; - this.commandRunner = commandRunner; - this.habitList = habitList; - this.prefs = prefs; this.screen = screen; - this.system = system; this.taskRunner = taskRunner; - this.reminderScheduler = reminderScheduler; - this.widgetUpdater = widgetUpdater; this.importTaskFactory = importTaskFactory; - this.exportCSVFactory = exportCSVFactory; this.exportDBFactory = exportDBFactory; } + @Override + public void onEdit(@NonNull Habit habit, long timestamp) + { + behavior.onEdit(habit, timestamp); + } + public void onExportCSV() { - List selected = new LinkedList<>(); - for (Habit h : habitList) selected.add(h); - File outputDir = system.getFilesDir("CSV"); - - taskRunner.execute( - exportCSVFactory.create(selected, outputDir, filename -> { - if (filename != null) screen.showSendFileScreen(filename); - else screen.showMessage(R.string.could_not_export); - })); + behavior.onExportCSV(); } public void onExportDB() { - taskRunner.execute(exportDBFactory.create(filename -> { + taskRunner.execute(exportDBFactory.create(filename -> + { if (filename != null) screen.showSendFileScreen(filename); else screen.showMessage(R.string.could_not_export); })); @@ -127,19 +93,20 @@ public class ListHabitsController @Override public void onHabitClick(@NonNull Habit h) { - screen.showHabitScreen(h); + behavior.onClickHabit(h); } @Override public void onHabitReorder(@NonNull Habit from, @NonNull Habit to) { - taskRunner.execute(() -> habitList.reorder(from, to)); + behavior.onReorderHabit(from, to); } public void onImportData(@NonNull File file, @NonNull OnFinishedListener finishedListener) { - taskRunner.execute(importTaskFactory.create(file, result -> { + taskRunner.execute(importTaskFactory.create(file, result -> + { switch (result) { case ImportDataTask.SUCCESS: @@ -166,21 +133,6 @@ public class ListHabitsController screen.showMessage(R.string.long_press_to_edit); } - @Override - public void onEdit(@NonNull Habit habit, long timestamp) - { - CheckmarkList checkmarks = habit.getCheckmarks(); - double oldValue = checkmarks.getValues(timestamp, timestamp)[0]; - - screen.showNumberPicker(oldValue / 1000, habit.getUnit(), newValue -> { - newValue = Math.round(newValue * 1000); - commandRunner.execute( - new CreateRepetitionCommand(habit, timestamp, (int) newValue), - habit.getId()); - }); - } - - @Override public void onInvalidToggle() { @@ -189,55 +141,23 @@ public class ListHabitsController public void onRepairDB() { - taskRunner.execute(() -> { - habitList.repair(); - screen.showMessage(R.string.database_repaired); - }); + behavior.onRepairDB(); } public void onSendBugReport() { - try - { - system.dumpBugReportToFile(); - } - catch (IOException e) - { - // ignored - } - - try - { - String log = system.getBugReport(); - int to = R.string.bugReportTo; - int subject = R.string.bugReportSubject; - screen.showSendEmailScreen(to, subject, log); - } - catch (IOException e) - { - e.printStackTrace(); - screen.showMessage(R.string.bug_report_failed); - } + behavior.onSendBugReport(); } public void onStartup() { - prefs.incrementLaunchCount(); - if (prefs.isFirstRun()) onFirstRun(); + behavior.onStartup(); } @Override public void onToggle(@NonNull Habit habit, long timestamp) { - commandRunner.execute(new ToggleRepetitionCommand(habit, timestamp), - habit.getId()); - } - - private void onFirstRun() - { - prefs.setFirstRun(false); - prefs.updateLastHint(-1, DateUtils.getStartOfToday()); - screen.showIntroScreen(); + behavior.onToggle(habit, timestamp); } public interface OnFinishedListener diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java new file mode 100644 index 000000000..ffdb14dba --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2017 Á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.activities.habits.list; + + +import org.isoron.androidbase.*; +import org.isoron.androidbase.activities.*; +import org.isoron.uhabits.ui.habits.list.*; + +import dagger.*; + +@Module +public class ListHabitsModule extends ActivityModule +{ + public ListHabitsModule(BaseActivity activity) + { + super(activity); + } + + @Provides + ListHabitsBehavior.Screen getScreen(ListHabitsScreen screen) + { + return screen; + } + + @Provides + ListHabitsBehavior.System getSystem(BaseSystem system) + { + return system; + } +} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java index 9563eadf2..3b4ef6e28 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java @@ -39,6 +39,7 @@ import org.isoron.uhabits.commands.*; import org.isoron.uhabits.intents.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.habits.list.*; import org.isoron.uhabits.utils.*; import java.io.*; @@ -51,7 +52,7 @@ import static android.view.inputmethod.EditorInfo.*; @ActivityScope public class ListHabitsScreen extends BaseScreen - implements CommandRunner.Listener + implements CommandRunner.Listener, ListHabitsBehavior.Screen { public static final int REQUEST_OPEN_DOCUMENT = 6; @@ -100,9 +101,12 @@ public class ListHabitsScreen extends BaseScreen @NonNull ListHabitsRootView rootView, @NonNull IntentFactory intentFactory, @NonNull ThemeSwitcher themeSwitcher, - @NonNull ConfirmDeleteDialogFactory confirmDeleteDialogFactory, - @NonNull ColorPickerDialogFactory colorPickerFactory, - @NonNull EditHabitDialogFactory editHabitDialogFactory, + @NonNull + ConfirmDeleteDialogFactory confirmDeleteDialogFactory, + @NonNull + ColorPickerDialogFactory colorPickerFactory, + @NonNull + EditHabitDialogFactory editHabitDialogFactory, @NonNull AndroidPreferences prefs, @NonNull CommandParser commandParser) { @@ -127,7 +131,7 @@ public class ListHabitsScreen extends BaseScreen public void onCommandExecuted(@NonNull Command command, @Nullable Long refreshKey) { - if(command.isRemote()) return; + if (command.isRemote()) return; showMessage(commandParser.getExecuteString(command)); } @@ -172,9 +176,16 @@ public class ListHabitsScreen extends BaseScreen activity.showDialog(picker, "picker"); } + public void showCreateBooleanHabitScreen() + { + EditHabitDialog dialog; + dialog = editHabitDialogFactory.createBoolean(); + activity.showDialog(dialog, "editHabit"); + } + public void showCreateHabitScreen() { - if(!prefs.isNumericalHabitsFeatureEnabled()) + if (!prefs.isNumericalHabitsFeatureEnabled()) { showCreateBooleanHabitScreen(); return; @@ -182,8 +193,9 @@ public class ListHabitsScreen extends BaseScreen Dialog dialog = new AlertDialog.Builder(activity) .setTitle("Type of habit") - .setItems(R.array.habitTypes, (d, which) -> { - if(which == 0) showCreateBooleanHabitScreen(); + .setItems(R.array.habitTypes, (d, which) -> + { + if (which == 0) showCreateBooleanHabitScreen(); else showCreateNumericalHabitScreen(); }) .create(); @@ -191,20 +203,6 @@ public class ListHabitsScreen extends BaseScreen dialog.show(); } - private void showCreateNumericalHabitScreen() - { - EditHabitDialog dialog; - dialog = editHabitDialogFactory.createNumerical(); - activity.showDialog(dialog, "editHabit"); - } - - public void showCreateBooleanHabitScreen() - { - EditHabitDialog dialog; - dialog = editHabitDialogFactory.createBoolean(); - activity.showDialog(dialog, "editHabit"); - } - public void showDeleteConfirmationScreen(ConfirmDeleteDialog.Callback callback) { activity.showDialog(confirmDeleteDialogFactory.create(callback)); @@ -223,6 +221,7 @@ public class ListHabitsScreen extends BaseScreen activity.startActivity(intent); } + @Override public void showHabitScreen(@NonNull Habit habit) { Intent intent = intentFactory.startShowHabitActivity(activity, habit); @@ -235,15 +234,48 @@ public class ListHabitsScreen extends BaseScreen activity.startActivityForResult(intent, REQUEST_OPEN_DOCUMENT); } + @Override public void showIntroScreen() { Intent intent = intentFactory.startIntroActivity(activity); activity.startActivity(intent); } + @Override + public void showMessage(@NonNull ListHabitsBehavior.Message m) + { + switch (m) + { + case COULD_NOT_EXPORT: + showMessage(R.string.could_not_export); + break; + + case IMPORT_SUCCESSFUL: + showMessage(R.string.habits_imported); + break; + + case IMPORT_FAILED: + showMessage(R.string.could_not_import); + break; + + case DATABASE_REPAIRED: + showMessage(R.string.database_repaired); + break; + + case COULD_NOT_GENERATE_BUG_REPORT: + showMessage(R.string.bug_report_failed); + break; + + case FILE_NOT_RECOGNIZED: + showMessage(R.string.file_not_recognized); + break; + } + } + + @Override public void showNumberPicker(double value, @NonNull String unit, - @NonNull NumberPickerCallback callback) + @NonNull ListHabitsBehavior.NumberPickerCallback callback) { LayoutInflater inflater = activity.getLayoutInflater(); View view = inflater.inflate(R.layout.number_picker_dialog, null); @@ -292,21 +324,12 @@ public class ListHabitsScreen extends BaseScreen dialog.show(); } - private void refreshInitialValue(NumberPicker picker2) + @Override + public void showSendBugReportToDeveloperScreen(String log) { - // Workaround for a bug on Android: - // https://code.google.com/p/android/issues/detail?id=35482 - try - { - Field f = NumberPicker.class.getDeclaredField("mInputText"); - f.setAccessible(true); - EditText inputText = (EditText) f.get(picker2); - inputText.setFilters(new InputFilter[0]); - } - catch (Exception e) - { - throw new RuntimeException(e); - } + int to = R.string.bugReportTo; + int subject = R.string.bugReportSubject; + showSendEmailScreen(to, subject, log); } public void showSettingsScreen() @@ -373,8 +396,27 @@ public class ListHabitsScreen extends BaseScreen } } - public interface NumberPickerCallback + private void refreshInitialValue(NumberPicker picker2) { - void onNumberPicked(double newValue); + // Workaround for a bug on Android: + // https://code.google.com/p/android/issues/detail?id=35482 + try + { + Field f = NumberPicker.class.getDeclaredField("mInputText"); + f.setAccessible(true); + EditText inputText = (EditText) f.get(picker2); + inputText.setFilters(new InputFilter[0]); + } + catch (Exception e) + { + throw new RuntimeException(e); + } + } + + private void showCreateNumericalHabitScreen() + { + EditHabitDialog dialog; + dialog = editHabitDialogFactory.createNumerical(); + activity.showDialog(dialog, "editHabit"); } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java index 0a914d873..5c5e8e003 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java @@ -27,9 +27,6 @@ import android.support.annotation.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.ui.habits.show.*; - -import java.io.*; /** * Activity that allows the user to see more information about a single habit. @@ -37,25 +34,16 @@ import java.io.*; * Shows all the metadata for the habit, in addition to several charts. */ public class ShowHabitActivity extends BaseActivity - implements ShowHabitMenuBehavior.System { @Nullable private HabitList habitList; @Nullable - private AppComponent appComponent; + private HabitsComponent appComponent; @Nullable private ShowHabitScreen screen; - @Override - public File getCSVOutputDir() - { - if(appComponent == null) throw new IllegalStateException(); - - return appComponent.getBaseSystem().getFilesDir("CSV"); - } - @Override protected void onCreate(Bundle savedInstanceState) { @@ -68,7 +56,7 @@ public class ShowHabitActivity extends BaseActivity ShowHabitComponent component = DaggerShowHabitComponent .builder() - .appComponent(app.getComponent()) + .habitsComponent(app.getComponent()) .showHabitModule(new ShowHabitModule(this, habit)) .build(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java index 3bfc99c54..f298f715b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java @@ -28,7 +28,7 @@ import dagger.*; @ActivityScope @Component(modules = { ShowHabitModule.class }, - dependencies = { AppComponent.class }) + dependencies = { HabitsComponent.class }) public interface ShowHabitComponent { @NonNull diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java index 3c683baac..d806bb854 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java @@ -21,6 +21,7 @@ package org.isoron.uhabits.activities.habits.show; import android.support.annotation.*; +import org.isoron.androidbase.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.ui.habits.show.*; @@ -57,8 +58,8 @@ public class ShowHabitModule extends ActivityModule } @Provides - public ShowHabitMenuBehavior.System getSystem(BaseActivity activity) + public ShowHabitMenuBehavior.System getSystem(BaseSystem system) { - return (ShowHabitActivity) activity; + return system; } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java index 7ff6af588..753f47b57 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java @@ -54,7 +54,7 @@ public class FireSettingReceiver extends BroadcastReceiver ReceiverComponent component = DaggerFireSettingReceiver_ReceiverComponent .builder() - .appComponent(app.getComponent()) + .habitsComponent(app.getComponent()) .build(); allHabits = app.getComponent().getHabitList(); @@ -99,7 +99,7 @@ public class FireSettingReceiver extends BroadcastReceiver } @ReceiverScope - @Component(dependencies = AppComponent.class) + @Component(dependencies = HabitsComponent.class) interface ReceiverComponent { WidgetController getWidgetController(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java index 9231967b4..b2c2ac2c0 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java @@ -31,6 +31,8 @@ import java.util.*; import javax.inject.*; +import dagger.*; + @AppScope public class AndroidPreferences implements SharedPreferences.OnSharedPreferenceChangeListener, Preferences diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ConnectivityReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ConnectivityReceiver.java index a61913a6b..39e9b2fd3 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ConnectivityReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ConnectivityReceiver.java @@ -36,7 +36,7 @@ public class ConnectivityReceiver extends BroadcastReceiver if (context == null) return; if (intent == null) return; - AppComponent component = + HabitsComponent component = ((HabitsApplication) context.getApplicationContext()).getComponent(); NetworkInfo networkInfo = diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java index 7023a02b3..aa44e3faf 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java @@ -73,7 +73,7 @@ public class PebbleReceiver extends PebbleDataReceiver HabitsApplication app = (HabitsApplication) context.getApplicationContext(); - AppComponent component = app.getComponent(); + HabitsComponent component = app.getComponent(); commandRunner = component.getCommandRunner(); taskRunner = component.getTaskRunner(); allHabits = component.getHabitList(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java index c8d022f61..5cf0c2600 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java @@ -56,7 +56,7 @@ public class ReminderReceiver extends BroadcastReceiver ReminderComponent component = DaggerReminderReceiver_ReminderComponent .builder() - .appComponent(app.getComponent()) + .habitsComponent(app.getComponent()) .build(); HabitList habits = app.getComponent().getHabitList(); @@ -105,7 +105,7 @@ public class ReminderReceiver extends BroadcastReceiver } @ReceiverScope - @Component(dependencies = AppComponent.class) + @Component(dependencies = HabitsComponent.class) interface ReminderComponent { ReminderController getReminderController(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java index 00e55d5aa..6c65d1a86 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java @@ -56,7 +56,7 @@ public class WidgetReceiver extends BroadcastReceiver WidgetComponent component = DaggerWidgetReceiver_WidgetComponent .builder() - .appComponent(app.getComponent()) + .habitsComponent(app.getComponent()) .build(); IntentParser parser = app.getComponent().getIntentParser(); @@ -93,7 +93,7 @@ public class WidgetReceiver extends BroadcastReceiver } @ReceiverScope - @Component(dependencies = AppComponent.class) + @Component(dependencies = HabitsComponent.class) interface WidgetComponent { WidgetController getWidgetController(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.java index e648db7e6..983e25250 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.java @@ -69,7 +69,7 @@ public class HabitPickerDialog extends Activity setContentView(R.layout.widget_configure_activity); HabitsApplication app = (HabitsApplication) getApplicationContext(); - AppComponent component = app.getComponent(); + HabitsComponent component = app.getComponent(); habitList = component.getHabitList(); preferences = component.getWidgetPreferences(); diff --git a/uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseActivityTest.java b/uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseActivityTest.java index 80fd4c592..17374c582 100644 --- a/uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseActivityTest.java +++ b/uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseActivityTest.java @@ -28,7 +28,6 @@ import android.view.*; import android.widget.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java b/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java index cb3004b23..9e82991d0 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java @@ -22,5 +22,13 @@ package org.isoron.uhabits.preferences; public interface Preferences { + void incrementLaunchCount(); + + boolean isFirstRun(); + void setDeveloper(boolean isDeveloper); + + void setFirstRun(boolean b); + + void updateLastHint(int i, long startOfToday); } diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehavior.java new file mode 100644 index 000000000..498d0d306 --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehavior.java @@ -0,0 +1,220 @@ +/* + * Copyright (C) 2017 Á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.ui.habits.list; + +import android.support.annotation.*; + +import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.utils.*; + +import java.io.*; +import java.util.*; + +import javax.inject.*; + +public class ListHabitsBehavior +{ + private HabitList habitList; + + private System system; + + private TaskRunner taskRunner; + + private Screen screen; + + private CommandRunner commandRunner; + + private Preferences prefs; + + @Inject + public ListHabitsBehavior(@NonNull HabitList habitList, + @NonNull System system, + @NonNull TaskRunner taskRunner, + @NonNull Screen screen, + @NonNull CommandRunner commandRunner, + @NonNull Preferences prefs) + { + this.habitList = habitList; + this.system = system; + this.taskRunner = taskRunner; + this.screen = screen; + this.commandRunner = commandRunner; + this.prefs = prefs; + } + + public void onClickHabit(@NonNull Habit h) + { + screen.showHabitScreen(h); + } + +// public void onExportDB() +// { +// taskRunner.execute(exportDBFactory.create(filename -> { +// if (filename != null) screen.showSendFileScreen(filename); +// else screen.showMessage(R.string.could_not_export); +// })); +// } + + public void onEdit(@NonNull Habit habit, long timestamp) + { + CheckmarkList checkmarks = habit.getCheckmarks(); + double oldValue = checkmarks.getValues(timestamp, timestamp)[0]; + + screen.showNumberPicker(oldValue / 1000, habit.getUnit(), newValue -> + { + newValue = Math.round(newValue * 1000); + commandRunner.execute( + new CreateRepetitionCommand(habit, timestamp, (int) newValue), + habit.getId()); + }); + } + + public void onExportCSV() + { + List selected = new LinkedList<>(); + for (Habit h : habitList) selected.add(h); + File outputDir = system.getCSVOutputDir(); + + taskRunner.execute( + new ExportCSVTask(habitList, selected, outputDir, filename -> + { + if (filename != null) screen.showSendFileScreen(filename); + else screen.showMessage(Message.COULD_NOT_EXPORT); + })); + } + +// public void onImportData(@NonNull File file, +// @NonNull OnFinishedListener finishedListener) +// { +// taskRunner.execute(importTaskFactory.create(file, result -> { +// switch (result) +// { +// case ImportDataTask.SUCCESS: +// adapter.refresh(); +// screen.showMessage(R.string.habits_imported); +// break; +// +// case ImportDataTask.NOT_RECOGNIZED: +// screen.showMessage(R.string.file_not_recognized); +// break; +// +// default: +// screen.showMessage(R.string.could_not_import); +// break; +// } +// +// finishedListener.onFinish(); +// })); +// } + + public void onReorderHabit(@NonNull Habit from, @NonNull Habit to) + { + taskRunner.execute(() -> habitList.reorder(from, to)); + } + + public void onRepairDB() + { + taskRunner.execute(() -> + { + habitList.repair(); + screen.showMessage(Message.DATABASE_REPAIRED); + }); + } + + public void onSendBugReport() + { + system.dumpBugReportToFile(); + + try + { + String log = system.getBugReport(); + screen.showSendBugReportToDeveloperScreen(log); + } + catch (IOException e) + { + e.printStackTrace(); + screen.showMessage(Message.COULD_NOT_GENERATE_BUG_REPORT); + } + } + + public void onStartup() + { + prefs.incrementLaunchCount(); + if (prefs.isFirstRun()) onFirstRun(); + } + + public void onToggle(@NonNull Habit habit, long timestamp) + { + commandRunner.execute(new ToggleRepetitionCommand(habit, timestamp), + habit.getId()); + } + + public void onFirstRun() + { + prefs.setFirstRun(false); + prefs.updateLastHint(-1, DateUtils.getStartOfToday()); + screen.showIntroScreen(); + } + + public enum Message + { + COULD_NOT_EXPORT, IMPORT_SUCCESSFUL, IMPORT_FAILED, DATABASE_REPAIRED, + COULD_NOT_GENERATE_BUG_REPORT, FILE_NOT_RECOGNIZED + } + + public interface NumberPickerCallback + { + void onNumberPicked(double newValue); + } + + public interface OnFinishedListener + { + void onFinish(); + } + + public interface Screen + { + void showHabitScreen(@NonNull Habit h); + + void showIntroScreen(); + + void showMessage(@NonNull Message m); + + void showNumberPicker(double value, + @NonNull String unit, + @NonNull NumberPickerCallback callback); + + void showSendBugReportToDeveloperScreen(String log); + + void showSendFileScreen(@NonNull String filename); + } + + public interface System + { + void dumpBugReportToFile(); + + String getBugReport() throws IOException; + + File getCSVOutputDir(); + } +} diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java index 35118052c..d78adaac8 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java @@ -19,6 +19,7 @@ package org.isoron.uhabits; +import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.memory.*; import org.isoron.uhabits.tasks.*; @@ -27,6 +28,8 @@ import org.junit.*; import java.util.*; +import static org.mockito.Mockito.*; + public class BaseUnitTest { protected HabitList habitList; @@ -37,6 +40,8 @@ public class BaseUnitTest protected SingleThreadTaskRunner taskRunner; + protected CommandRunner commandRunner; + @Before public void setUp() { @@ -45,9 +50,10 @@ public class BaseUnitTest DateUtils.setFixedLocalTime(fixed_local_time); modelFactory = new MemoryModelFactory(); - habitList = modelFactory.buildHabitList(); + habitList = spy(modelFactory.buildHabitList()); fixtures = new HabitFixtures(modelFactory); taskRunner = new SingleThreadTaskRunner(); + commandRunner = new CommandRunner(taskRunner); } @After diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitFixtures.java b/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitFixtures.java index 21344456c..29afe1aab 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitFixtures.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitFixtures.java @@ -62,6 +62,31 @@ public class HabitFixtures return habit; } + public Habit createNumericalHabit() + { + Habit habit = modelFactory.buildHabit(); + habit.setType(Habit.NUMBER_HABIT); + habit.setName("Run"); + habit.setDescription("How many miles did you run today?"); + habit.setUnit("miles"); + habit.setTargetType(Habit.AT_LEAST); + habit.setTargetValue(2.0); + habit.setColor(1); + + long day = DateUtils.millisecondsInOneDay; + long today = DateUtils.getStartOfToday(); + int times[] = { 0, 1, 3, 5, 7, 8, 9, 10 }; + int values[] = { 100, 200, 300, 400, 500, 600, 700, 800 }; + + for(int i = 0; i < times.length; i++) + { + long timestamp = today - times[i] * day; + habit.getRepetitions().add(new Repetition(timestamp, values[i])); + } + + return habit; + } + public Habit createShortHabit() { Habit habit = modelFactory.buildHabit(); diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehaviorTest.java new file mode 100644 index 000000000..528f70fb0 --- /dev/null +++ b/uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehaviorTest.java @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2017 Á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.ui.habits.list; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.utils.*; +import org.junit.*; +import org.junit.runner.*; +import org.mockito.*; +import org.mockito.junit.*; + +import static junit.framework.TestCase.assertTrue; +import static org.hamcrest.CoreMatchers.*; +import static org.isoron.uhabits.ui.habits.list.ListHabitsBehavior.Message.*; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class ListHabitsBehaviorTest extends BaseUnitTest +{ + @Mock + private ListHabitsBehavior.System system; + + @Mock + private Preferences prefs; + + private ListHabitsBehavior behavior; + + @Mock + private ListHabitsBehavior.Screen screen; + + private Habit habit1, habit2; + + @Captor + ArgumentCaptor captor; + + @Override + @Before + public void setUp() + { + super.setUp(); + habit1 = fixtures.createShortHabit(); + habit2 = fixtures.createNumericalHabit(); + habitList.add(habit1); + habitList.add(habit2); + clearInvocations(habitList); + + behavior = new ListHabitsBehavior(habitList, system, taskRunner, screen, + commandRunner, prefs); + } + + @Test + public void testOnEdit() + { + behavior.onEdit(habit2, DateUtils.getStartOfToday()); + verify(screen).showNumberPicker(eq(0.1), eq("miles"), captor.capture()); + captor.getValue().onNumberPicked(100); + assertThat(habit2.getCheckmarks().getTodayValue(), equalTo(100000)); + } + + @Test + public void testOnHabitClick() + { + behavior.onClickHabit(habit1); + verify(screen).showHabitScreen(habit1); + } + + @Test + public void testOnHabitReorder() + { + Habit from = habit1; + Habit to = habit2; + behavior.onReorderHabit(from, to); + verify(habitList).reorder(from, to); + } + + @Test + public void testOnRepairDB() + { + behavior.onRepairDB(); + verify(habitList).repair(); + verify(screen).showMessage(DATABASE_REPAIRED); + } + + @Test + public void testOnStartup_firstLaunch() + { + long today = DateUtils.getStartOfToday(); + + when(prefs.isFirstRun()).thenReturn(true); + behavior.onStartup(); + verify(prefs).setFirstRun(false); + verify(prefs).updateLastHint(-1, today); + verify(screen).showIntroScreen(); + } + + @Test + public void testOnStartup_notFirstLaunch() + { + when(prefs.isFirstRun()).thenReturn(false); + behavior.onStartup(); + verify(prefs).incrementLaunchCount(); + } + + @Test + public void testOnToggle() + { + assertTrue(habit1.isCompletedToday()); + behavior.onToggle(habit1, DateUtils.getStartOfToday()); + assertFalse(habit1.isCompletedToday()); + } +} \ No newline at end of file From 94c70485b7686526458f6cd947f03540250ef7b3 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Fri, 26 May 2017 23:24:00 -0400 Subject: [PATCH 14/27] Remove unit tests for uhabits-android --- uhabits-android/build.gradle | 16 +- .../activities/BaseActivityTest.java | 199 ------------------ .../activities/BaseScreenTest.java | 141 ------------- 3 files changed, 3 insertions(+), 353 deletions(-) delete mode 100644 uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseActivityTest.java delete mode 100644 uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseScreenTest.java diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle index e6d6a25a1..0a8170e61 100644 --- a/uhabits-android/build.gradle +++ b/uhabits-android/build.gradle @@ -62,25 +62,12 @@ dependencies { implementation 'org.jetbrains:annotations-java5:15.0' implementation 'com.google.code.gson:gson:2.7' implementation 'com.google.code.findbugs:jsr305:3.0.2' - implementation 'com.google.guava:guava:20.0' compileOnly 'javax.annotation:jsr250-api:1.0' compileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' annotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' annotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' - testImplementation project(":uhabits-core") - testImplementation 'junit:junit:5.0-SNAPSHOT' - testImplementation 'org.hamcrest:hamcrest-library:1.4-atlassian-1' - testImplementation 'org.mockito:mockito-core:2.8.9' - testImplementation 'org.json:json:20160810' - testImplementation 'org.robolectric:robolectric:3.4-rc2' - testCompileOnly 'javax.annotation:jsr250-api:1.0' - testCompileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' - testAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' - testAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' - testAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' - androidTestImplementation project(":uhabits-core") androidTestImplementation 'com.android.support:support-annotations:25.3.1' androidTestImplementation 'com.android.support.test:rules:0.5' @@ -101,3 +88,6 @@ dependencies { exclude group: 'org.json', module: 'json' } } +repositories { + mavenCentral() +} diff --git a/uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseActivityTest.java b/uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseActivityTest.java deleted file mode 100644 index 17374c582..000000000 --- a/uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseActivityTest.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (C) 2017 Á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.androidbase.activities; - -import android.content.*; -import android.os.*; -import android.support.v4.app.*; -import android.support.v7.app.*; -import android.support.v7.widget.Toolbar; -import android.view.*; -import android.widget.*; - -import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.common.dialogs.*; -import org.junit.*; -import org.junit.runner.*; -import org.robolectric.*; -import org.robolectric.annotation.*; -import org.robolectric.shadows.*; - -import static org.hamcrest.core.IsEqual.*; -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; -import static org.robolectric.Robolectric.*; -import static org.robolectric.Shadows.*; - -@RunWith(RobolectricTestRunner.class) -@Config(sdk = BuildConfig.roboSdk, constants = BuildConfig.class) -public class BaseActivityTest -{ - private static boolean hasCrashed = false; - - @Test - public void activityResultTest() - { - ScreenActivity activity = spy(setupActivity(ScreenActivity.class)); - activity.onActivityResult(0, 0, null); - verify(activity.screen).onResult(0, 0, null); - } - - @Test - public void componentTest() - { - EmptyActivity activity = setupActivity(EmptyActivity.class); - ActivityComponent component = activity.getComponent(); - assertThat(component.getActivity(), equalTo(activity)); - } - - @Test - public void dialogFragmentTest() - { - EmptyActivity activity = setupActivity(EmptyActivity.class); - FragmentManager manager = activity.getSupportFragmentManager(); - ColorPickerDialog d = new ColorPickerDialogFactory(activity).create(0); - - activity.showDialog(d, "picker"); - assertTrue(d.getDialog().isShowing()); - assertThat(d, equalTo(manager.findFragmentByTag("picker"))); - } - - @Test - public void dialogTest() - { - EmptyActivity activity = setupActivity(EmptyActivity.class); - AlertDialog dialog = - new AlertDialog.Builder(activity).setTitle("Hello world").create(); - - activity.showDialog(dialog); - assertTrue(dialog.isShowing()); - } - - @Test - public void restartTest() throws Exception - { - EmptyActivity activity = setupActivity(EmptyActivity.class); - - activity.restartWithFade(EmptyActivity.class); - ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); - - Intent nextStartedActivity = shadowOf(activity).getNextStartedActivity(); - assertNotNull(nextStartedActivity); - - assertTrue(activity.isFinishing()); - assertThat(shadowOf(nextStartedActivity).getIntentClass(), - equalTo(EmptyActivity.class)); - } - - @Test - public void exceptionHandlerTest() throws InterruptedException - { - assertFalse(hasCrashed); - - Thread crashThread = new Thread() - { - @Override - public void run() - { - Looper.prepare(); - CrashActivity activity = setupActivity(CrashActivity.class); - activity.crash(); - } - }; - - crashThread.start(); - crashThread.join(); - assertTrue(hasCrashed); - } - - @Test - public void menuTest() - { - MenuActivity activity = setupActivity(MenuActivity.class); - verify(activity.baseMenu).onCreate(eq(activity.getMenuInflater()), - any()); - - Menu menu = activity.toolbar.getMenu(); - MenuItem item = menu.getItem(0); - activity.onMenuItemSelected(0, item); - verify(activity.baseMenu).onItemSelected(item); - } - - static class CrashActivity extends BaseActivity - { - public void crash() - { - throw new RuntimeException("crash!"); - } - - @Override - protected Thread.UncaughtExceptionHandler getExceptionHandler() - { - return (t, e) -> hasCrashed = true; - } - } - - static class EmptyActivity extends BaseActivity - { - - } - - static class MenuActivity extends BaseActivity - { - public BaseMenu baseMenu; - - public Toolbar toolbar; - - @Override - protected void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - toolbar = new Toolbar(this); - LinearLayout layout = new LinearLayout(this); - layout.addView(toolbar); - setContentView(layout); - setSupportActionBar(toolbar); - - baseMenu = spy(new BaseMenu(this) - { - @Override - protected int getMenuResourceId() - { - return R.menu.list_habits; - } - }); - - setBaseMenu(baseMenu); - } - } - - static class ScreenActivity extends BaseActivity - { - private BaseScreen screen; - - @Override - protected void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - screen = spy(new BaseScreen(this)); - setScreen(screen); - } - } -} diff --git a/uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseScreenTest.java b/uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseScreenTest.java deleted file mode 100644 index 1b984d853..000000000 --- a/uhabits-android/src/test/java/org/isoron/androidbase/activities/BaseScreenTest.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (C) 2017 Á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.androidbase.activities; - -import android.content.*; -import android.support.annotation.*; -import android.support.v7.view.ActionMode; -import android.support.v7.widget.*; -import android.view.*; - -import org.isoron.uhabits.*; -import org.junit.*; -import org.junit.runner.*; -import org.robolectric.*; -import org.robolectric.annotation.*; - -import java.util.*; - -import static android.view.View.*; -import static junit.framework.Assert.assertNotNull; -import static org.hamcrest.core.IsEqual.*; -import static org.junit.Assert.*; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.*; -import static org.robolectric.Robolectric.*; - -@RunWith(RobolectricTestRunner.class) -@Config(sdk = BuildConfig.roboSdk, constants = BuildConfig.class) -public class BaseScreenTest -{ - @Test - public void selectionMenuTest() - { - BaseSelectionMenu selectionMenu = spy(new BaseSelectionMenu() - { - @Override - protected int getResourceId() - { - return R.menu.list_habits_selection; - } - }); - - ActionModeActivity activity = setupActivity(ActionModeActivity.class); - BaseScreen screen = new BaseScreen(activity); - screen.setSelectionMenu(selectionMenu); - activity.setScreen(screen); - - screen.startSelection(); - assertNotNull(activity.callback); - verify(selectionMenu).onCreate(any(), any(), any()); - verify(selectionMenu).onPrepare(any()); - - ActionMode mode = mock(ActionMode.class); - MenuItem item = mock(MenuItem.class); - - activity.callback.onActionItemClicked(mode, item); - verify(selectionMenu).onItemClicked(item); - - activity.callback.onDestroyActionMode(mode); - verify(selectionMenu).onFinish(); - } - - @Test - public void showMessageTest() - { - EmptyActivity activity = setupActivity(EmptyActivity.class); - ConcreteRootView rootView = new ConcreteRootView(activity); - View decor = activity.getWindow().getDecorView(); - BaseScreen screen = new BaseScreen(activity); - screen.setRootView(rootView); - activity.setScreen(screen); - - ArrayList matches = new ArrayList<>(); - - screen.showMessage(R.string.checkmark); - decor.findViewsWithText(matches, "Checkmark", FIND_VIEWS_WITH_TEXT); - assertThat(matches.size(), equalTo(1)); - assertTrue(matches.get(0).isShown()); - - screen.showMessage(R.string.frequency); - decor.findViewsWithText(matches, "Frequency", FIND_VIEWS_WITH_TEXT); - assertThat(matches.size(), equalTo(1)); - assertTrue(matches.get(0).isShown()); - } - - static class ActionModeActivity extends BaseActivity - { - private ActionMode.Callback callback; - - @Nullable - @Override - public ActionMode startSupportActionMode( - @NonNull ActionMode.Callback callback) - { - this.callback = callback; - return super.startSupportActionMode(this.callback); - } - } - - static class ConcreteRootView extends BaseRootView - { - private final Toolbar toolbar; - - public ConcreteRootView(@NonNull Context context) - { - super(context); - toolbar = new Toolbar(context); - addView(toolbar); - } - - @NonNull - @Override - public Toolbar getToolbar() - { - return toolbar; - } - } - - static class EmptyActivity extends BaseActivity - { - - } -} From 70423ddb0a962ed8a03349ff53bf2ed6e87463b6 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sat, 27 May 2017 12:11:05 -0400 Subject: [PATCH 15/27] Move ListHabits controllers to uhabits-core --- build.gradle | 2 +- .../habits/list/ListHabitsMenuTest.java | 4 +- .../habits/list/ListHabitsScreenTest.java | 11 +- .../HabitCardListControllerTest.java | 2 +- .../list/model/HabitCardListCacheTest.java | 1 + .../habits/list/views/HintViewTest.java | 2 +- .../receivers/ReminderControllerTest.java | 4 +- .../receivers/WidgetControllerTest.java | 9 +- .../org/isoron/androidbase/BaseSystem.java | 4 +- .../activities/ActivityComponent.java | 2 +- .../activities/ActivityModule.java | 10 ++ .../androidbase/activities/BaseRootView.java | 2 +- .../org/isoron/uhabits/HabitsApplication.java | 4 +- .../org/isoron/uhabits/HabitsComponent.java | 11 +- .../java/org/isoron/uhabits/HabitsModule.java | 11 ++ .../activities/AndroidThemeSwitcher.java | 63 +++++++ .../activities/about/AboutActivity.java | 2 +- .../activities/about/AboutRootView.java | 11 +- .../uhabits/activities/about/AboutScreen.java | 2 +- .../common/dialogs/ColorPickerDialog.java | 13 +- .../common/dialogs/ConfirmDeleteDialog.java | 11 +- .../habits/list/ListHabitsActivity.java | 3 +- .../habits/list/ListHabitsComponent.java | 2 + .../habits/list/ListHabitsController.java | 2 +- .../habits/list/ListHabitsMenu.java | 82 +++------ .../habits/list/ListHabitsModule.java | 28 ++- .../habits/list/ListHabitsRootView.java | 7 +- .../habits/list/ListHabitsScreen.java | 108 +++++++---- .../habits/list/ListHabitsSelectionMenu.java | 94 ++-------- .../controllers/HabitCardListController.java | 20 ++- .../list/model/HabitCardListAdapter.java | 17 +- .../list/model/HabitCardViewHolder.java | 2 +- .../habits/list/views/HintView.java | 2 +- .../habits/show/ShowHabitController.java | 2 +- .../habits/show/ShowHabitModule.java | 2 +- .../habits/show/ShowHabitScreen.java | 2 +- .../habits/show/ShowHabitsMenu.java | 2 +- .../automation/FireSettingReceiver.java | 5 +- .../uhabits/commands/CommandParser.java | 24 --- ...Tray.java => AndroidNotificationTray.java} | 17 +- .../preferences/AndroidPreferences.java | 21 ++- .../uhabits/receivers/ReminderController.java | 6 +- .../uhabits/receivers/WidgetReceiver.java | 5 +- .../uhabits/preferences/Preferences.java | 17 ++ .../isoron/uhabits/ui/NotificationTray.java | 14 +- .../org/isoron/uhabits/ui}/ThemeSwitcher.java | 71 +++----- .../ui/callbacks/OnColorPickedCallback.java | 25 +++ .../ui/callbacks/OnConfirmedCallback.java | 25 +++ .../ui/callbacks/OnFinishedCallback.java | 25 +++ .../ui/{ => screens}/about/AboutBehavior.java | 2 +- .../habits/list}/HabitCardListCache.java | 4 +- .../ui/screens/habits/list}/HintList.java | 8 +- .../habits/list/ListHabitsBehavior.java | 7 +- .../habits/list/ListHabitsMenuBehavior.java | 168 ++++++++++++++++++ .../list/ListHabitsSelectionMenuBehavior.java | 143 +++++++++++++++ .../habits/show/ShowHabitBehavior.java | 2 +- .../habits/show/ShowHabitMenuBehavior.java | 2 +- .../uhabits/ui/widgets/WidgetBehavior.java | 13 +- .../habits/list/ListHabitsBehaviorTest.java | 4 +- .../show/ShowHabitMenuBehaviorTest.java | 2 +- 60 files changed, 799 insertions(+), 367 deletions(-) create mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.java rename uhabits-android/src/main/java/org/isoron/uhabits/notifications/{NotificationTray.java => AndroidNotificationTray.java} (93%) rename uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/package-info.java => uhabits-core/src/main/java/org/isoron/uhabits/ui/NotificationTray.java (74%) rename {uhabits-android/src/main/java/org/isoron/uhabits/activities => uhabits-core/src/main/java/org/isoron/uhabits/ui}/ThemeSwitcher.java (51%) create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnColorPickedCallback.java create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnConfirmedCallback.java create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnFinishedCallback.java rename uhabits-core/src/main/java/org/isoron/uhabits/ui/{ => screens}/about/AboutBehavior.java (97%) rename {uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model => uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list}/HabitCardListCache.java (98%) rename {uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model => uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list}/HintList.java (90%) rename uhabits-core/src/main/java/org/isoron/uhabits/ui/{ => screens}/habits/list/ListHabitsBehavior.java (98%) create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java create mode 100644 uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java rename uhabits-core/src/main/java/org/isoron/uhabits/ui/{ => screens}/habits/show/ShowHabitBehavior.java (97%) rename uhabits-core/src/main/java/org/isoron/uhabits/ui/{ => screens}/habits/show/ShowHabitMenuBehavior.java (98%) rename uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetController.java => uhabits-core/src/main/java/org/isoron/uhabits/ui/widgets/WidgetBehavior.java (85%) rename uhabits-core/src/test/java/org/isoron/uhabits/ui/{ => screens}/habits/list/ListHabitsBehaviorTest.java (96%) rename uhabits-core/src/test/java/org/isoron/uhabits/ui/{ => screens}/habits/show/ShowHabitMenuBehaviorTest.java (97%) diff --git a/build.gradle b/build.gradle index 7098313f7..6b38608fc 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0-alpha1' + classpath 'com.android.tools.build:gradle:3.0.0-alpha2' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.6.4' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java index a831cdfe9..45d015c6d 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java @@ -23,10 +23,10 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.*; import org.junit.*; import org.mockito.*; @@ -63,7 +63,7 @@ public class ListHabitsMenuTest extends BaseAndroidTest when(preferences.getShowCompleted()).thenReturn(false); when(themeSwitcher.isNightMode()).thenReturn(false); - menu = new ListHabitsMenu(activity, screen, adapter, preferences, + menu = new ListHabitsMenu(activity, preferences, themeSwitcher); matcherCaptor = ArgumentCaptor.forClass(HabitMatcher.class); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java index b8aec240a..0906a8bac 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java @@ -24,7 +24,6 @@ import android.content.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.common.dialogs.ColorPickerDialog.*; import org.isoron.uhabits.activities.habits.edit.*; @@ -32,6 +31,7 @@ import org.isoron.uhabits.commands.*; import org.isoron.uhabits.intents.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.*; import org.junit.*; import org.junit.runner.*; import org.junit.runners.*; @@ -89,7 +89,7 @@ public class ListHabitsScreenTest extends BaseAndroidTest screen = spy(new ListHabitsScreen(activity, commandRunner, rootView, intentFactory, themeSwitcher, confirmDeleteDialogFactory, - colorPickerDialogFactory, dialogFactory, prefs, commandParser)); + colorPickerDialogFactory, dialogFactory, prefs)); doNothing().when(screen).showMessage(anyInt()); @@ -122,7 +122,7 @@ public class ListHabitsScreenTest extends BaseAndroidTest public void testOnCommand() { Command c = mock(Command.class); - when(commandParser.getExecuteString(c)).thenReturn( + when(getExecuteString(c)).thenReturn( R.string.toast_habit_deleted); screen.onCommandExecuted(c, null); verify(screen).showMessage(R.string.toast_habit_deleted); @@ -251,10 +251,9 @@ public class ListHabitsScreenTest extends BaseAndroidTest } @Test - public void testToggleNightMode() + public void testApplyTheme() { - screen.toggleNightMode(); - verify(themeSwitcher).toggleNightMode(); + screen.applyTheme(); verify(activity).restartWithFade(ListHabitsActivity.class); } } \ No newline at end of file diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java index c4597fd23..c64b7fb91 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java @@ -20,8 +20,8 @@ package org.isoron.uhabits.activities.habits.list.controllers; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; import org.isoron.uhabits.activities.habits.list.model.*; +import org.isoron.uhabits.models.*; import org.isoron.uhabits.activities.habits.list.views.*; import org.junit.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java index fd254bdb3..a0b2355c5 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java @@ -23,6 +23,7 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import org.isoron.uhabits.utils.*; import org.junit.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java index 7c04cd1f1..cced99f6d 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java @@ -23,7 +23,7 @@ import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.habits.list.model.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java index 92e0da412..00fa88e18 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java @@ -35,7 +35,7 @@ public class ReminderControllerTest extends BaseAndroidTest private ReminderScheduler reminderScheduler; - private NotificationTray notificationTray; + private AndroidNotificationTray notificationTray; private AndroidPreferences preferences; @@ -45,7 +45,7 @@ public class ReminderControllerTest extends BaseAndroidTest super.setUp(); reminderScheduler = mock(ReminderScheduler.class); - notificationTray = mock(NotificationTray.class); + notificationTray = mock(AndroidNotificationTray.class); preferences = mock(AndroidPreferences.class); controller = new ReminderController(reminderScheduler, diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java index 69906cea4..ee9e4a826 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java @@ -23,6 +23,7 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.notifications.*; +import org.isoron.uhabits.ui.widgets.*; import org.isoron.uhabits.utils.*; import org.junit.*; @@ -33,7 +34,7 @@ import static org.mockito.Mockito.*; public class WidgetControllerTest extends BaseAndroidTest { - private WidgetController controller; + private WidgetBehavior controller; private CommandRunner commandRunner; @@ -41,7 +42,7 @@ public class WidgetControllerTest extends BaseAndroidTest private long today; - private NotificationTray notificationTray; + private AndroidNotificationTray notificationTray; @Override public void setUp() @@ -52,8 +53,8 @@ public class WidgetControllerTest extends BaseAndroidTest habit = fixtures.createEmptyHabit(); habitList.add(habit); commandRunner = mock(CommandRunner.class); - notificationTray = mock(NotificationTray.class); - controller = new WidgetController(commandRunner, notificationTray); + notificationTray = mock(AndroidNotificationTray.class); + controller = new WidgetBehavior(commandRunner, notificationTray); } @Test diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java b/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java index 8515c52dc..52657667a 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java @@ -28,8 +28,8 @@ import android.view.*; import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.ui.habits.list.*; -import org.isoron.uhabits.ui.habits.show.*; +import org.isoron.uhabits.ui.screens.habits.list.*; +import org.isoron.uhabits.ui.screens.habits.show.*; import org.isoron.uhabits.utils.*; import java.io.*; diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java index c8f9dfbe0..ce1ee0c3d 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java @@ -20,8 +20,8 @@ package org.isoron.androidbase.activities; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; +import org.isoron.uhabits.ui.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java index f3910c989..ffcb238f1 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java @@ -21,6 +21,9 @@ package org.isoron.androidbase.activities; import android.content.*; +import org.isoron.uhabits.activities.*; +import org.isoron.uhabits.ui.*; + import dagger.*; @Module @@ -45,4 +48,11 @@ public class ActivityModule { return activity; } + + @Provides + @ActivityScope + public static ThemeSwitcher getThemeSwitcher(AndroidThemeSwitcher t) + { + return t; + } } diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java index ba5ed7649..adbed1b23 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java @@ -27,7 +27,7 @@ import android.view.*; import android.widget.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; +import org.isoron.uhabits.ui.*; import org.isoron.uhabits.utils.*; import static android.os.Build.VERSION.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java index 8c5ed50b7..aef637f24 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java @@ -47,7 +47,7 @@ public class HabitsApplication extends Application private ReminderScheduler reminderScheduler; - private NotificationTray notificationTray; + private AndroidNotificationTray notificationTray; public HabitsComponent getComponent() { @@ -106,7 +106,7 @@ public class HabitsApplication extends Application reminderScheduler = component.getReminderScheduler(); reminderScheduler.startListening(); - notificationTray = component.getNotificationTray(); + notificationTray = component.getAndroidNotificationTray(); notificationTray.startListening(); AndroidPreferences prefs = component.getPreferences(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java index 6c7d6716c..8b819c99e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java @@ -22,7 +22,6 @@ package org.isoron.uhabits; import android.content.*; import org.isoron.androidbase.*; -import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.intents.*; import org.isoron.uhabits.io.*; @@ -33,6 +32,8 @@ import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.sync.*; import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.tasks.android.*; +import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.*; @@ -47,8 +48,6 @@ import dagger.*; }) public interface HabitsComponent { - AndroidPreferences getPreferences(); - BaseSystem getBaseSystem(); CommandRunner getCommandRunner(); @@ -56,6 +55,8 @@ public interface HabitsComponent @AppContext Context getContext(); + Preferences getCorePreferences(); + CreateHabitCommandFactory getCreateHabitCommandFactory(); EditHabitCommandFactory getEditHabitCommandFactory(); @@ -80,7 +81,9 @@ public interface HabitsComponent PendingIntentFactory getPendingIntentFactory(); - Preferences getCorePreferences(); + AndroidPreferences getPreferences(); + + AndroidNotificationTray getAndroidNotificationTray(); ReminderScheduler getReminderScheduler(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java index 00c285e14..734b78110 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java @@ -19,7 +19,9 @@ package org.isoron.uhabits; +import org.isoron.uhabits.notifications.*; import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.*; import dagger.*; @@ -32,4 +34,13 @@ public class HabitsModule { return preferences; } + + + @Provides + @AppScope + public static NotificationTray getTray(AndroidNotificationTray tray) + { + return tray; + } } + diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.java new file mode 100644 index 000000000..19386fc62 --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.java @@ -0,0 +1,63 @@ +/* + * 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.activities; + +import android.support.annotation.*; + +import org.isoron.androidbase.activities.*; +import org.isoron.uhabits.*; +import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.*; + +import javax.inject.*; + +@ActivityScope +public class AndroidThemeSwitcher extends ThemeSwitcher +{ + @NonNull + private final BaseActivity activity; + + @Inject + public AndroidThemeSwitcher(@NonNull BaseActivity activity, + @NonNull Preferences preferences) + { + super(preferences); + this.activity = activity; + } + + @Override + public void applyDarkTheme() + { + activity.setTheme(R.style.AppBaseThemeDark); + } + + @Override + public void applyLightTheme() + { + activity.setTheme(R.style.AppBaseTheme); + } + + @Override + public void applyPureBlackTheme() + { + activity.setTheme(R.style.AppBaseThemeDark_PureBlack); + + } +} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java index 7b5ae0361..33689dbe2 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java @@ -23,7 +23,7 @@ import android.os.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.ui.about.*; +import org.isoron.uhabits.ui.screens.about.*; /** * Activity that allows the user to see information about the app itself. diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java index 489fef7b7..29db69229 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java @@ -26,7 +26,7 @@ import android.widget.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.BuildConfig; import org.isoron.uhabits.R; -import org.isoron.uhabits.ui.about.*; +import org.isoron.uhabits.ui.screens.about.*; import org.isoron.uhabits.utils.*; import butterknife.*; @@ -36,15 +36,6 @@ public class AboutRootView extends BaseRootView @BindView(R.id.tvVersion) TextView tvVersion; - @BindView(R.id.tvRate) - TextView tvRate; - - @BindView(R.id.tvFeedback) - TextView tvFeedback; - - @BindView(R.id.tvSource) - TextView tvSource; - @NonNull private final AboutBehavior behavior; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java index 46698ac20..2f915dc89 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java @@ -24,7 +24,7 @@ import android.widget.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.intents.*; -import org.isoron.uhabits.ui.about.*; +import org.isoron.uhabits.ui.screens.about.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java index c4ab3022c..7ca527ff5 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java @@ -19,6 +19,7 @@ package org.isoron.uhabits.activities.common.dialogs; +import org.isoron.uhabits.ui.callbacks.*; import org.isoron.uhabits.utils.*; /** @@ -26,16 +27,12 @@ import org.isoron.uhabits.utils.*; */ public class ColorPickerDialog extends com.android.colorpicker.ColorPickerDialog { - public void setListener(OnColorSelectedListener listener) + public void setListener(OnColorPickedCallback callback) { - super.setOnColorSelectedListener(c -> { + super.setOnColorSelectedListener(c -> + { c = ColorUtils.colorToPaletteIndex(getContext(), c); - listener.onColorSelected(c); + callback.onColorPicked(c); }); } - - public interface OnColorSelectedListener - { - void onColorSelected(int color); - } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java index 83fed5857..1b8c838cf 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java @@ -20,12 +20,14 @@ package org.isoron.uhabits.activities.common.dialogs; import android.content.*; +import android.support.annotation.*; import android.support.v7.app.*; import com.google.auto.factory.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.R; +import org.isoron.uhabits.ui.callbacks.*; import butterknife.*; @@ -45,19 +47,14 @@ public class ConfirmDeleteDialog extends AlertDialog protected String no; protected ConfirmDeleteDialog(@Provided @ActivityContext Context context, - Callback callback) + @NonNull OnConfirmedCallback callback) { super(context); ButterKnife.bind(this); setTitle(R.string.delete_habits); setMessage(question); - setButton(BUTTON_POSITIVE, yes, (dialog, which) -> callback.run()); + setButton(BUTTON_POSITIVE, yes, (dialog, which) -> callback.onConfirmed()); setButton(BUTTON_NEGATIVE, no, (dialog, which) -> {}); } - - public interface Callback - { - void run(); - } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java index 1571c8765..435576dca 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java @@ -24,10 +24,10 @@ import android.os.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.sync.*; +import org.isoron.uhabits.ui.*; import org.isoron.uhabits.utils.*; /** @@ -81,6 +81,7 @@ public class ListHabitsActivity extends BaseActivity screen.setMenu(menu); screen.setController(controller); + screen.setListController(component.getListController()); screen.setSelectionMenu(selectionMenu); rootView.setController(controller, selectionMenu); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java index 61ec5a4b2..39dd1f60a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java @@ -37,6 +37,8 @@ public interface ListHabitsComponent ListHabitsController getController(); + HabitCardListController getListController(); + ListHabitsMenu getMenu(); NumberButtonControllerFactory getNumberButtonControllerFactory(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java index ac4f1b7ae..796667c55 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java @@ -28,7 +28,7 @@ import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.tasks.android.*; -import org.isoron.uhabits.ui.habits.list.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import java.io.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java index b4c601293..9752792fd 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java @@ -24,58 +24,44 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.activities.*; -import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import javax.inject.*; @ActivityScope public class ListHabitsMenu extends BaseMenu { - @NonNull - private final ListHabitsScreen screen; - - private final HabitCardListAdapter adapter; - - private boolean showArchived; - private boolean showCompleted; + @NonNull + private final ListHabitsMenuBehavior behavior; - private final AndroidPreferences preferences; + private final Preferences preferences; private ThemeSwitcher themeSwitcher; @Inject public ListHabitsMenu(@NonNull BaseActivity activity, - @NonNull ListHabitsScreen screen, - @NonNull HabitCardListAdapter adapter, - @NonNull AndroidPreferences preferences, - @NonNull ThemeSwitcher themeSwitcher) + @NonNull Preferences preferences, + @NonNull ThemeSwitcher themeSwitcher, + @NonNull ListHabitsMenuBehavior behavior) { super(activity); - this.screen = screen; - this.adapter = adapter; this.preferences = preferences; this.themeSwitcher = themeSwitcher; - - showCompleted = preferences.getShowCompleted(); - showArchived = preferences.getShowArchived(); - updateAdapterFilter(); + this.behavior = behavior; } @Override public void onCreate(@NonNull Menu menu) { MenuItem nightModeItem = menu.findItem(R.id.actionToggleNightMode); - nightModeItem.setChecked(themeSwitcher.isNightMode()); - MenuItem hideArchivedItem = menu.findItem(R.id.actionHideArchived); - hideArchivedItem.setChecked(!showArchived); - MenuItem hideCompletedItem = menu.findItem(R.id.actionHideCompleted); - hideCompletedItem.setChecked(!showCompleted); + nightModeItem.setChecked(themeSwitcher.isNightMode()); + hideArchivedItem.setChecked(!preferences.getShowArchived()); + hideCompletedItem.setChecked(!preferences.getShowCompleted()); } @Override @@ -84,49 +70,49 @@ public class ListHabitsMenu extends BaseMenu switch (item.getItemId()) { case R.id.actionToggleNightMode: - screen.toggleNightMode(); + behavior.onToggleNightMode(); return true; case R.id.actionAdd: - screen.showCreateHabitScreen(); + behavior.onCreateHabit(); return true; case R.id.actionFAQ: - screen.showFAQScreen(); + behavior.onViewFAQ(); return true; case R.id.actionAbout: - screen.showAboutScreen(); + behavior.onViewAbout(); return true; case R.id.actionSettings: - screen.showSettingsScreen(); + behavior.onViewSettings(); return true; case R.id.actionHideArchived: - toggleShowArchived(); + behavior.onToggleShowArchived(); invalidate(); return true; case R.id.actionHideCompleted: - toggleShowCompleted(); + behavior.onToggleShowCompleted(); invalidate(); return true; case R.id.actionSortColor: - adapter.setOrder(HabitList.Order.BY_COLOR); + behavior.onSortByColor(); return true; case R.id.actionSortManual: - adapter.setOrder(HabitList.Order.BY_POSITION); + behavior.onSortByManually(); return true; case R.id.actionSortName: - adapter.setOrder(HabitList.Order.BY_NAME); + behavior.onSortByName(); return true; case R.id.actionSortScore: - adapter.setOrder(HabitList.Order.BY_SCORE); + behavior.onSortByScore(); return true; default: @@ -140,26 +126,4 @@ public class ListHabitsMenu extends BaseMenu return R.menu.list_habits; } - private void toggleShowArchived() - { - showArchived = !showArchived; - preferences.setShowArchived(showArchived); - updateAdapterFilter(); - } - - private void toggleShowCompleted() - { - showCompleted = !showCompleted; - preferences.setShowCompleted(showCompleted); - updateAdapterFilter(); - } - - private void updateAdapterFilter() - { - adapter.setFilter(new HabitMatcherBuilder() - .setArchivedAllowed(showArchived) - .setCompletedAllowed(showCompleted) - .build()); - adapter.refresh(); - } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java index ffdb14dba..e1699c347 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java @@ -22,7 +22,8 @@ package org.isoron.uhabits.activities.habits.list; import org.isoron.androidbase.*; import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.ui.habits.list.*; +import org.isoron.uhabits.activities.habits.list.model.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import dagger.*; @@ -34,12 +35,37 @@ public class ListHabitsModule extends ActivityModule super(activity); } + @Provides + ListHabitsMenuBehavior.Adapter getAdapter(HabitCardListAdapter adapter) + { + return adapter; + } + + @Provides + ListHabitsMenuBehavior.Screen getMenuScreen(ListHabitsScreen screen) + { + return screen; + } + @Provides ListHabitsBehavior.Screen getScreen(ListHabitsScreen screen) { return screen; } + @Provides + ListHabitsSelectionMenuBehavior.Adapter getSelMenuAdapter( + HabitCardListAdapter adapter) + { + return adapter; + } + + @Provides + ListHabitsSelectionMenuBehavior.Screen getSelMenuScreen(ListHabitsScreen screen) + { + return screen; + } + @Provides ListHabitsBehavior.System getSystem(BaseSystem system) { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java index bc120ea6d..e9ebfc600 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java @@ -33,6 +33,7 @@ import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.activities.habits.list.views.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import org.isoron.uhabits.utils.*; import javax.inject.*; @@ -134,7 +135,8 @@ public class ListHabitsRootView extends BaseRootView listController.setSelectionListener(menu); listView.setController(listController); menu.setListController(listController); - header.setScrollController(new ScrollableChart.ScrollController() { + header.setScrollController(new ScrollableChart.ScrollController() + { @Override public void onDataOffsetChanged(int newDataOffset) { @@ -187,7 +189,8 @@ public class ListHabitsRootView extends BaseRootView private void updateProgressBar() { - postDelayed(() -> { + postDelayed(() -> + { int activeTaskCount = runner.getActiveTaskCount(); int newVisibility = activeTaskCount > 0 ? VISIBLE : GONE; if (progressBar.getVisibility() != newVisibility) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java index 3b4ef6e28..c52f828aa 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java @@ -31,19 +31,21 @@ import android.widget.*; import org.isoron.androidbase.activities.*; import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.common.dialogs.*; -import org.isoron.uhabits.activities.common.dialogs.ColorPickerDialog.*; import org.isoron.uhabits.activities.habits.edit.*; +import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.intents.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.ui.habits.list.*; +import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.ui.callbacks.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import org.isoron.uhabits.utils.*; import java.io.*; import java.lang.reflect.*; +import java.util.*; import javax.inject.*; @@ -52,7 +54,9 @@ import static android.view.inputmethod.EditorInfo.*; @ActivityScope public class ListHabitsScreen extends BaseScreen - implements CommandRunner.Listener, ListHabitsBehavior.Screen + implements CommandRunner.Listener, ListHabitsBehavior.Screen, + ListHabitsMenuBehavior.Screen, + ListHabitsSelectionMenuBehavior.Screen { public static final int REQUEST_OPEN_DOCUMENT = 6; @@ -92,8 +96,10 @@ public class ListHabitsScreen extends BaseScreen @NonNull private AndroidPreferences prefs; - @NonNull - private final CommandParser commandParser; + @Nullable + private HabitCardListController listController; + + private final ListHabitsRootView rootView; @Inject public ListHabitsScreen(@NonNull BaseActivity activity, @@ -101,18 +107,14 @@ public class ListHabitsScreen extends BaseScreen @NonNull ListHabitsRootView rootView, @NonNull IntentFactory intentFactory, @NonNull ThemeSwitcher themeSwitcher, - @NonNull - ConfirmDeleteDialogFactory confirmDeleteDialogFactory, - @NonNull - ColorPickerDialogFactory colorPickerFactory, - @NonNull - EditHabitDialogFactory editHabitDialogFactory, - @NonNull AndroidPreferences prefs, - @NonNull CommandParser commandParser) + @NonNull ConfirmDeleteDialogFactory confirmDeleteDialogFactory, + @NonNull ColorPickerDialogFactory colorPickerFactory, + @NonNull EditHabitDialogFactory editHabitDialogFactory, + @NonNull AndroidPreferences prefs) { super(activity); - this.commandParser = commandParser; setRootView(rootView); + this.rootView = rootView; this.prefs = prefs; this.colorPickerFactory = colorPickerFactory; this.commandRunner = commandRunner; @@ -122,6 +124,35 @@ public class ListHabitsScreen extends BaseScreen this.themeSwitcher = themeSwitcher; } + public void setListController(HabitCardListController listController) + { + this.listController = listController; + } + + @StringRes + private Integer getExecuteString(@NonNull Command command) + { + if(command instanceof ArchiveHabitsCommand) + return R.string.toast_habit_archived; + + if(command instanceof ChangeHabitColorCommand) + return R.string.toast_habit_changed; + + if(command instanceof CreateHabitCommand) + return R.string.toast_habit_created; + + if(command instanceof DeleteHabitsCommand) + return R.string.toast_habit_deleted; + + if(command instanceof EditHabitCommand) + return R.string.toast_habit_changed; + + if(command instanceof UnarchiveHabitsCommand) + return R.string.toast_habit_unarchived; + + return null; + } + public void onAttached() { commandRunner.addListener(this); @@ -132,7 +163,7 @@ public class ListHabitsScreen extends BaseScreen @Nullable Long refreshKey) { if (command.isRemote()) return; - showMessage(commandParser.getExecuteString(command)); + showMessage(getExecuteString(command)); } public void onDettached() @@ -154,24 +185,24 @@ public class ListHabitsScreen extends BaseScreen this.controller = controller; } + @Override + public void applyTheme() + { + themeSwitcher.apply(); + activity.restartWithFade(ListHabitsActivity.class); + } + + @Override public void showAboutScreen() { Intent intent = intentFactory.startAboutActivity(activity); activity.startActivity(intent); } - /** - * Displays a {@link ColorPickerDialog} to the user. - *

- * The selected color on the dialog is the color of the given habit. - * - * @param habit the habit - * @param callback - */ - public void showColorPicker(@NonNull Habit habit, - @NonNull OnColorSelectedListener callback) - { - ColorPickerDialog picker = colorPickerFactory.create(habit.getColor()); + @Override + public void showColorPicker(int defaultColor, + @NonNull OnColorPickedCallback callback) { + ColorPickerDialog picker = colorPickerFactory.create(defaultColor); picker.setListener(callback); activity.showDialog(picker, "picker"); } @@ -183,6 +214,7 @@ public class ListHabitsScreen extends BaseScreen activity.showDialog(dialog, "editHabit"); } + @Override public void showCreateHabitScreen() { if (!prefs.isNumericalHabitsFeatureEnabled()) @@ -203,18 +235,22 @@ public class ListHabitsScreen extends BaseScreen dialog.show(); } - public void showDeleteConfirmationScreen(ConfirmDeleteDialog.Callback callback) + @Override + public void showDeleteConfirmationScreen( + @NonNull OnConfirmedCallback callback) { activity.showDialog(confirmDeleteDialogFactory.create(callback)); } - public void showEditHabitScreen(Habit habit) + @Override + public void showEditHabitsScreen(List habits) { EditHabitDialog dialog; - dialog = editHabitDialogFactory.edit(habit); + dialog = editHabitDialogFactory.edit(habits.get(0)); activity.showDialog(dialog, "editNumericalHabit"); } + @Override public void showFAQScreen() { Intent intent = intentFactory.viewFAQ(activity); @@ -275,7 +311,8 @@ public class ListHabitsScreen extends BaseScreen @Override public void showNumberPicker(double value, @NonNull String unit, - @NonNull ListHabitsBehavior.NumberPickerCallback callback) + @NonNull + ListHabitsBehavior.NumberPickerCallback callback) { LayoutInflater inflater = activity.getLayoutInflater(); View view = inflater.inflate(R.layout.number_picker_dialog, null); @@ -332,18 +369,13 @@ public class ListHabitsScreen extends BaseScreen showSendEmailScreen(to, subject, log); } + @Override public void showSettingsScreen() { Intent intent = intentFactory.startSettingsActivity(activity); activity.startActivityForResult(intent, REQUEST_SETTINGS); } - public void toggleNightMode() - { - themeSwitcher.toggleNightMode(); - activity.restartWithFade(ListHabitsActivity.class); - } - private void onOpenDocumentResult(int resultCode, Intent data) { if (controller == null) return; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java index ca63f925c..d4f240693 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java @@ -24,12 +24,10 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; - -import java.util.*; +import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import javax.inject.*; @@ -43,25 +41,24 @@ public class ListHabitsSelectionMenu extends BaseSelectionMenu @NonNull CommandRunner commandRunner; + private ListHabitsSelectionMenuBehavior behavior; + @NonNull private final HabitCardListAdapter listAdapter; @Nullable private HabitCardListController listController; - @NonNull - private final HabitList habitList; - @Inject - public ListHabitsSelectionMenu(@NonNull HabitList habitList, - @NonNull ListHabitsScreen screen, + public ListHabitsSelectionMenu(@NonNull ListHabitsScreen screen, @NonNull HabitCardListAdapter listAdapter, - @NonNull CommandRunner commandRunner) + @NonNull CommandRunner commandRunner, + @NonNull ListHabitsSelectionMenuBehavior behavior) { - this.habitList = habitList; this.screen = screen; this.listAdapter = listAdapter; this.commandRunner = commandRunner; + this.behavior = behavior; } @Override @@ -74,34 +71,26 @@ public class ListHabitsSelectionMenu extends BaseSelectionMenu @Override public boolean onItemClicked(@NonNull MenuItem item) { - List selected = listAdapter.getSelected(); - if (selected.isEmpty()) return false; - - Habit firstHabit = selected.get(0); - switch (item.getItemId()) { case R.id.action_edit_habit: - showEditScreen(firstHabit); - finish(); + behavior.onEditHabits(); return true; case R.id.action_archive_habit: - performArchive(selected); - finish(); + behavior.onArchiveHabits(); return true; case R.id.action_unarchive_habit: - performUnarchive(selected); - finish(); + behavior.onUnarchiveHabits(); return true; case R.id.action_delete: - performDelete(selected); + behavior.onDeleteHabits(); return true; case R.id.action_color: - showColorPicker(selected, firstHabit); + behavior.onChangeColor(); return true; default: @@ -112,28 +101,16 @@ public class ListHabitsSelectionMenu extends BaseSelectionMenu @Override public boolean onPrepare(@NonNull Menu menu) { - List selected = listAdapter.getSelected(); - - boolean showEdit = (selected.size() == 1); - boolean showArchive = true; - boolean showUnarchive = true; - for (Habit h : selected) - { - if (h.isArchived()) showArchive = false; - else showUnarchive = false; - } - MenuItem itemEdit = menu.findItem(R.id.action_edit_habit); MenuItem itemColor = menu.findItem(R.id.action_color); MenuItem itemArchive = menu.findItem(R.id.action_archive_habit); MenuItem itemUnarchive = menu.findItem(R.id.action_unarchive_habit); itemColor.setVisible(true); - itemEdit.setVisible(showEdit); - itemArchive.setVisible(showArchive); - itemUnarchive.setVisible(showUnarchive); - - setTitle(Integer.toString(selected.size())); + itemEdit.setVisible(behavior.canEdit()); + itemArchive.setVisible(behavior.canArchive()); + itemUnarchive.setVisible(behavior.canUnarchive()); + setTitle(Integer.toString(listAdapter.getSelected().size())); return true; } @@ -166,41 +143,4 @@ public class ListHabitsSelectionMenu extends BaseSelectionMenu { return R.menu.list_habits_selection; } - - private void performArchive(@NonNull List selected) - { - commandRunner.execute(new ArchiveHabitsCommand(habitList, selected), - null); - } - - private void performDelete(@NonNull List selected) - { - screen.showDeleteConfirmationScreen(() -> { - listAdapter.performRemove(selected); - commandRunner.execute(new DeleteHabitsCommand(habitList, selected), - null); - finish(); - }); - } - - private void performUnarchive(@NonNull List selected) - { - commandRunner.execute(new UnarchiveHabitsCommand(habitList, selected), - null); - } - - private void showColorPicker(@NonNull List selected, - @NonNull Habit firstHabit) - { - screen.showColorPicker(firstHabit, color -> { - commandRunner.execute( - new ChangeHabitColorCommand(habitList, selected, color), null); - finish(); - }); - } - - private void showEditScreen(@NonNull Habit firstHabit) - { - screen.showEditHabitScreen(firstHabit); - } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java index 0d62048bc..de03d3c26 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java @@ -21,16 +21,21 @@ package org.isoron.uhabits.activities.habits.list.controllers; import android.support.annotation.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.activities.habits.list.views.*; import org.isoron.uhabits.models.*; +import javax.inject.*; + /** * Controller responsible for receiving and processing the events generated by a * HabitListView. These include selecting and reordering items, toggling * checkmarks and clicking habits. */ -public class HabitCardListController implements HabitCardListView.Controller +@ActivityScope +public class HabitCardListController implements HabitCardListView.Controller, + ModelObservable.Listener { private final Mode NORMAL_MODE = new NormalMode(); @@ -48,10 +53,12 @@ public class HabitCardListController implements HabitCardListView.Controller @NonNull private Mode activeMode; + @Inject public HabitCardListController(@NonNull HabitCardListAdapter adapter) { this.adapter = adapter; this.activeMode = new NormalMode(); + adapter.getObservable().addListener(this); } /** @@ -119,6 +126,16 @@ public class HabitCardListController implements HabitCardListView.Controller activeMode.onItemLongClick(position); } + @Override + public void onModelChange() + { + if(adapter.isSelectionEmpty()) + { + activeMode = new NormalMode(); + if (selectionListener != null) selectionListener.onSelectionFinish(); + } + } + /** * Called when the selection operation is cancelled externally, by something * other than this controller. This happens, for example, when the user @@ -180,7 +197,6 @@ public class HabitCardListController implements HabitCardListView.Controller { adapter.clearSelection(); activeMode = new NormalMode(); - if (selectionListener != null) selectionListener.onSelectionFinish(); } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java index 7fbe0a9b1..ebdda50c8 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -28,6 +28,7 @@ import org.isoron.uhabits.activities.habits.list.*; import org.isoron.uhabits.activities.habits.list.views.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import org.isoron.uhabits.utils.*; import java.util.*; @@ -42,8 +43,11 @@ import javax.inject.*; */ @ActivityScope public class HabitCardListAdapter - extends RecyclerView.Adapter - implements HabitCardListCache.Listener, MidnightTimer.MidnightListener + extends RecyclerView.Adapter implements + HabitCardListCache.Listener, + MidnightTimer.MidnightListener, + ListHabitsMenuBehavior.Adapter, + ListHabitsSelectionMenuBehavior.Adapter { @NonNull private ModelObservable observable; @@ -95,10 +99,12 @@ public class HabitCardListAdapter /** * Sets all items as not selected. */ + @Override public void clearSelection() { selected.clear(); notifyDataSetChanged(); + observable.notifyListeners(); } /** @@ -133,6 +139,7 @@ public class HabitCardListAdapter return observable; } + @Override @NonNull public List getSelected() { @@ -255,6 +262,7 @@ public class HabitCardListAdapter * * @param habits list of habits to be removed */ + @Override public void performRemove(List habits) { for (Habit h : habits) @@ -278,11 +286,13 @@ public class HabitCardListAdapter cache.reorder(from, to); } + @Override public void refresh() { cache.refreshAllHabits(); } + @Override public void setFilter(HabitMatcher matcher) { cache.setFilter(matcher); @@ -300,6 +310,7 @@ public class HabitCardListAdapter this.listView = listView; } + @Override public void setOrder(HabitList.Order order) { cache.setOrder(order); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardViewHolder.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardViewHolder.java index 494801e48..8d53e089c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardViewHolder.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardViewHolder.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java index f083b6fd2..0ca67151b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java @@ -29,7 +29,7 @@ import android.widget.FrameLayout; import android.widget.TextView; import org.isoron.uhabits.R; -import org.isoron.uhabits.activities.habits.list.model.HintList; +import org.isoron.uhabits.ui.screens.habits.list.HintList; import java.util.Random; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java index 7de9f0080..e91e217c5 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java @@ -23,7 +23,7 @@ import android.support.annotation.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.show.views.*; -import org.isoron.uhabits.ui.habits.show.*; +import org.isoron.uhabits.ui.screens.habits.show.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java index d806bb854..966643dbf 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java @@ -24,7 +24,7 @@ import android.support.annotation.*; import org.isoron.androidbase.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.ui.habits.show.*; +import org.isoron.uhabits.ui.screens.habits.show.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java index 813b5d21e..4d8f3e040 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java @@ -26,7 +26,7 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.ui.habits.show.*; +import org.isoron.uhabits.ui.screens.habits.show.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java index ca0792f41..32f039f7b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java @@ -24,7 +24,7 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.ui.habits.show.*; +import org.isoron.uhabits.ui.screens.habits.show.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java index 753f47b57..cfc122a17 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java @@ -25,6 +25,7 @@ import android.os.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.receivers.*; +import org.isoron.uhabits.ui.widgets.*; import org.isoron.uhabits.utils.*; import dagger.*; @@ -63,7 +64,7 @@ public class FireSettingReceiver extends BroadcastReceiver if (args == null) return; long timestamp = DateUtils.getStartOfToday(); - WidgetController controller = component.getWidgetController(); + WidgetBehavior controller = component.getWidgetController(); switch (args.action) { @@ -102,7 +103,7 @@ public class FireSettingReceiver extends BroadcastReceiver @Component(dependencies = HabitsComponent.class) interface ReceiverComponent { - WidgetController getWidgetController(); + WidgetBehavior getWidgetController(); } private class Arguments diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java index d7331e458..240553a68 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java @@ -43,30 +43,6 @@ public class CommandParser this.modelFactory = modelFactory; } - @StringRes - public Integer getExecuteString(@NonNull Command command) - { - if(command instanceof ArchiveHabitsCommand) - return R.string.toast_habit_archived; - - if(command instanceof ChangeHabitColorCommand) - return R.string.toast_habit_changed; - - if(command instanceof CreateHabitCommand) - return R.string.toast_habit_created; - - if(command instanceof DeleteHabitsCommand) - return R.string.toast_habit_deleted; - - if(command instanceof EditHabitCommand) - return R.string.toast_habit_changed; - - if(command instanceof UnarchiveHabitsCommand) - return R.string.toast_habit_unarchived; - - return null; - } - @NonNull public Command parse(@NonNull String json) throws JSONException { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.java similarity index 93% rename from uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java rename to uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.java index 2a5db5863..4bb86c05a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.java @@ -33,6 +33,7 @@ import org.isoron.uhabits.intents.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.ui.*; import org.isoron.uhabits.utils.*; import java.util.*; @@ -43,8 +44,9 @@ import static android.graphics.BitmapFactory.*; import static org.isoron.uhabits.notifications.RingtoneManager.*; @AppScope -public class NotificationTray - implements CommandRunner.Listener, AndroidPreferences.Listener +public class AndroidNotificationTray + implements CommandRunner.Listener, AndroidPreferences.Listener, + NotificationTray { @NonNull private final Context context; @@ -65,11 +67,11 @@ public class NotificationTray private final HashMap active; @Inject - public NotificationTray(@AppContext @NonNull Context context, - @NonNull TaskRunner taskRunner, - @NonNull PendingIntentFactory pendingIntents, - @NonNull CommandRunner commandRunner, - @NonNull AndroidPreferences preferences) + public AndroidNotificationTray(@AppContext @NonNull Context context, + @NonNull TaskRunner taskRunner, + @NonNull PendingIntentFactory pendingIntents, + @NonNull CommandRunner commandRunner, + @NonNull AndroidPreferences preferences) { this.context = context; this.taskRunner = taskRunner; @@ -79,6 +81,7 @@ public class NotificationTray this.active = new HashMap<>(); } + @Override public void cancel(@NonNull Habit habit) { int notificationId = getNotificationId(habit); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java index b2c2ac2c0..d8961ac9a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java @@ -24,15 +24,13 @@ import android.preference.*; import org.isoron.androidbase.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.*; import java.util.*; import javax.inject.*; -import dagger.*; - @AppScope public class AndroidPreferences implements SharedPreferences.OnSharedPreferenceChangeListener, Preferences @@ -103,6 +101,7 @@ public class AndroidPreferences * * @return number of last hint shown */ + @Override public int getLastHintNumber() { return prefs.getInt("last_hint_number", -1); @@ -113,6 +112,7 @@ public class AndroidPreferences * * @return timestamp of the day the last hint was shown */ + @Override public long getLastHintTimestamp() { return prefs.getLong("last_hint_timestamp", -1); @@ -128,21 +128,25 @@ public class AndroidPreferences prefs.edit().putLong("last_sync", timestamp).apply(); } + @Override public boolean getShowArchived() { return prefs.getBoolean("pref_show_archived", false); } + @Override public void setShowArchived(boolean showArchived) { prefs.edit().putBoolean("pref_show_archived", showArchived).apply(); } + @Override public boolean getShowCompleted() { return prefs.getBoolean("pref_show_completed", true); } + @Override public void setShowCompleted(boolean showCompleted) { prefs.edit().putBoolean("pref_show_completed", showCompleted).apply(); @@ -155,8 +159,7 @@ public class AndroidPreferences public String getSyncAddress() { - return prefs.getString("pref_sync_address", - "https://sync.loophabits.org:4000"); + return prefs.getString("pref_sync_address", "https://sync.loophabits.org:4000"); } public String getSyncClientId() @@ -174,16 +177,19 @@ public class AndroidPreferences return prefs.getString("pref_sync_key", ""); } + @Override public int getTheme() { return prefs.getInt("pref_theme", ThemeSwitcher.THEME_LIGHT); } + @Override public void setTheme(int theme) { prefs.edit().putInt("pref_theme", theme).apply(); } + @Override public void incrementLaunchCount() { int count = prefs.getInt("launch_count", 0); @@ -200,16 +206,19 @@ public class AndroidPreferences return prefs.getBoolean("pref_developer", false); } + @Override public void setDeveloper(boolean isDeveloper) { prefs.edit().putBoolean("pref_developer", isDeveloper).apply(); } + @Override public boolean isFirstRun() { return prefs.getBoolean("pref_first_run", true); } + @Override public void setFirstRun(boolean isFirstRun) { prefs.edit().putBoolean("pref_first_run", isFirstRun).apply(); @@ -220,6 +229,7 @@ public class AndroidPreferences return prefs.getBoolean("pref_feature_numerical_habits", false); } + @Override public boolean isPureBlackEnabled() { return prefs.getBoolean("pref_pure_black", false); @@ -297,6 +307,7 @@ public class AndroidPreferences * @param number number of the last hint shown * @param timestamp timestamp for the day the last hint was shown */ + @Override public void updateLastHint(int number, long timestamp) { prefs diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java index 776fc4d85..fff5cb8bc 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -35,13 +35,13 @@ public class ReminderController private final ReminderScheduler reminderScheduler; @NonNull - private final NotificationTray notificationTray; + private final AndroidNotificationTray notificationTray; private AndroidPreferences preferences; @Inject public ReminderController(@NonNull ReminderScheduler reminderScheduler, - @NonNull NotificationTray notificationTray, + @NonNull AndroidNotificationTray notificationTray, @NonNull AndroidPreferences preferences) { this.reminderScheduler = reminderScheduler; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java index 6c65d1a86..327952110 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java @@ -26,6 +26,7 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.intents.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.sync.*; +import org.isoron.uhabits.ui.widgets.*; import dagger.*; @@ -60,7 +61,7 @@ public class WidgetReceiver extends BroadcastReceiver .build(); IntentParser parser = app.getComponent().getIntentParser(); - WidgetController controller = component.getWidgetController(); + WidgetBehavior controller = component.getWidgetController(); AndroidPreferences prefs = app.getComponent().getPreferences(); if(prefs.isSyncFeatureEnabled()) @@ -96,6 +97,6 @@ public class WidgetReceiver extends BroadcastReceiver @Component(dependencies = HabitsComponent.class) interface WidgetComponent { - WidgetController getWidgetController(); + WidgetBehavior getWidgetController(); } } diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java b/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java index 9e82991d0..e39e67540 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java @@ -21,14 +21,31 @@ package org.isoron.uhabits.preferences; public interface Preferences { + int getLastHintNumber(); + + long getLastHintTimestamp(); + + boolean getShowArchived(); + + boolean getShowCompleted(); + + int getTheme(); void incrementLaunchCount(); boolean isFirstRun(); + boolean isPureBlackEnabled(); + void setDeveloper(boolean isDeveloper); void setFirstRun(boolean b); + void setShowArchived(boolean showArchived); + + void setShowCompleted(boolean showCompleted); + + void setTheme(int theme); + void updateLastHint(int i, long startOfToday); } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/package-info.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/NotificationTray.java similarity index 74% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/package-info.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/NotificationTray.java index 755ffcaa1..df4a0509c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/package-info.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/NotificationTray.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,7 +17,11 @@ * with this program. If not, see . */ -/** - * Provides models that are specific for {@link org.isoron.uhabits.activities.habits.list.ListHabitsActivity}. - */ -package org.isoron.uhabits.activities.habits.list.model; \ No newline at end of file +package org.isoron.uhabits.ui; + +import org.isoron.uhabits.models.*; + +public interface NotificationTray +{ + void cancel(Habit habit); +} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/ThemeSwitcher.java similarity index 51% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/ThemeSwitcher.java index b7b4bac9c..70f6e221f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/ThemeSwitcher.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/ThemeSwitcher.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,59 +17,52 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities; +package org.isoron.uhabits.ui; import android.support.annotation.*; -import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.*; import org.isoron.uhabits.preferences.*; -import javax.inject.*; - -@ActivityScope -public class ThemeSwitcher +public abstract class ThemeSwitcher { public static final int THEME_DARK = 1; public static final int THEME_LIGHT = 0; - @NonNull - private final BaseActivity activity; - - private AndroidPreferences preferences; + private final Preferences preferences; - @Inject - public ThemeSwitcher(@NonNull BaseActivity activity, - @NonNull AndroidPreferences preferences) + public ThemeSwitcher(@NonNull Preferences preferences) { - this.activity = activity; this.preferences = preferences; } public void apply() { - switch (getTheme()) + if (preferences.getTheme() == THEME_DARK) { - case THEME_DARK: - applyDarkTheme(); - break; - - case THEME_LIGHT: - default: - applyLightTheme(); - break; + if (preferences.isPureBlackEnabled()) applyPureBlackTheme(); + else applyDarkTheme(); + } + else + { + applyLightTheme(); } } + public abstract void applyDarkTheme(); + + public abstract void applyLightTheme(); + + public abstract void applyPureBlackTheme(); + public boolean isNightMode() { - return getTheme() == THEME_DARK; + return preferences.getTheme() == THEME_DARK; } - public void refreshTheme() + public void setTheme(int theme) { - + preferences.setTheme(theme); } public void toggleNightMode() @@ -77,26 +70,4 @@ public class ThemeSwitcher if (isNightMode()) setTheme(THEME_LIGHT); else setTheme(THEME_DARK); } - - private void applyDarkTheme() - { - if (preferences.isPureBlackEnabled()) - activity.setTheme(R.style.AppBaseThemeDark_PureBlack); - else activity.setTheme(R.style.AppBaseThemeDark); - } - - private void applyLightTheme() - { - activity.setTheme(R.style.AppBaseTheme); - } - - private int getTheme() - { - return preferences.getTheme(); - } - - public void setTheme(int theme) - { - preferences.setTheme(theme); - } } diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnColorPickedCallback.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnColorPickedCallback.java new file mode 100644 index 000000000..7cb86813a --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnColorPickedCallback.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2017 Á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.ui.callbacks; + +public interface OnColorPickedCallback +{ + void onColorPicked(int color); +} diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnConfirmedCallback.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnConfirmedCallback.java new file mode 100644 index 000000000..a543e01f9 --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnConfirmedCallback.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2017 Á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.ui.callbacks; + +public interface OnConfirmedCallback +{ + void onConfirmed(); +} diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnFinishedCallback.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnFinishedCallback.java new file mode 100644 index 000000000..93efa29dc --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnFinishedCallback.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2017 Á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.ui.callbacks; + +public interface OnFinishedCallback +{ + void onFinish(); +} diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/about/AboutBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/about/AboutBehavior.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/about/AboutBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/about/AboutBehavior.java index faa382311..233d791f7 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/about/AboutBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/about/AboutBehavior.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.about; +package org.isoron.uhabits.ui.screens.about; import android.support.annotation.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCache.java similarity index 98% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCache.java index 9925be240..ca77d7e7d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCache.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCache.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities.habits.list.model; +package org.isoron.uhabits.ui.screens.habits.list; import android.support.annotation.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HintList.java similarity index 90% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HintList.java index c2f2967eb..fd5f48ef6 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HintList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HintList.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities.habits.list.model; +package org.isoron.uhabits.ui.screens.habits.list; import android.support.annotation.*; @@ -33,7 +33,7 @@ import org.isoron.uhabits.utils.*; @AutoFactory public class HintList { - private final AndroidPreferences prefs; + private final Preferences prefs; @NonNull private final String[] hints; @@ -43,7 +43,7 @@ public class HintList * * @param hints initial list of hints */ - public HintList(@Provided @NonNull AndroidPreferences prefs, + public HintList(@Provided @NonNull Preferences prefs, @NonNull String hints[]) { this.prefs = prefs; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehavior.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehavior.java index 498d0d306..82df2a302 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehavior.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.habits.list; +package org.isoron.uhabits.ui.screens.habits.list; import android.support.annotation.*; @@ -187,11 +187,6 @@ public class ListHabitsBehavior void onNumberPicked(double newValue); } - public interface OnFinishedListener - { - void onFinish(); - } - public interface Screen { void showHabitScreen(@NonNull Habit h); diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java new file mode 100644 index 000000000..595ca2971 --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2017 Á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.ui.screens.habits.list; + +import android.support.annotation.*; + +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.*; + +import javax.inject.*; + +public class ListHabitsMenuBehavior +{ + @NonNull + private final Screen screen; + + @NonNull + private final Adapter adapter; + + @NonNull + private final Preferences preferences; + + @NonNull + private final ThemeSwitcher themeSwitcher; + + private boolean showCompleted; + + private boolean showArchived; + + @Inject + public ListHabitsMenuBehavior(@NonNull Screen screen, + @NonNull Adapter adapter, + @NonNull Preferences preferences, + @NonNull ThemeSwitcher themeSwitcher) + { + this.screen = screen; + this.adapter = adapter; + this.preferences = preferences; + this.themeSwitcher = themeSwitcher; + + showCompleted = preferences.getShowCompleted(); + showArchived = preferences.getShowArchived(); + updateAdapterFilter(); + } + + public void onCreateHabit() + { + screen.showCreateHabitScreen(); + } + + public void onViewFAQ() + { + screen.showFAQScreen(); + } + + public void onViewAbout() + { + screen.showAboutScreen(); + } + + public void onViewSettings() + { + screen.showSettingsScreen(); + } + + public void onToggleShowArchived() + { + showArchived = !showArchived; + preferences.setShowArchived(showArchived); + updateAdapterFilter(); + } + + public void onToggleShowCompleted() + { + showCompleted = !showCompleted; + preferences.setShowCompleted(showCompleted); + updateAdapterFilter(); + } + + public void onSortByColor() + { + adapter.setOrder(HabitList.Order.BY_COLOR); + } + + public void onSortByManually() + { + adapter.setOrder(HabitList.Order.BY_POSITION); + } + + public void onSortByScore() + { + adapter.setOrder(HabitList.Order.BY_SCORE); + } + + public void onSortByName() + { + adapter.setOrder(HabitList.Order.BY_NAME); + } + + public void onToggleNightMode() + { + themeSwitcher.toggleNightMode(); + screen.applyTheme(); + } + + private void toggleShowArchived() + { + showArchived = !showArchived; + preferences.setShowArchived(showArchived); + updateAdapterFilter(); + } + + private void toggleShowCompleted() + { + showCompleted = !showCompleted; + preferences.setShowCompleted(showCompleted); + updateAdapterFilter(); + } + + private void updateAdapterFilter() + { + adapter.setFilter(new HabitMatcherBuilder() + .setArchivedAllowed(showArchived) + .setCompletedAllowed(showCompleted) + .build()); + adapter.refresh(); + } + + public interface Adapter + { + void refresh(); + + void setFilter(HabitMatcher build); + + void setOrder(HabitList.Order order); + } + + public interface Screen + { + void applyTheme(); + + void showAboutScreen(); + + void showCreateHabitScreen(); + + void showFAQScreen(); + + void showSettingsScreen(); + } +} diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java new file mode 100644 index 000000000..10d65f14e --- /dev/null +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2017 Á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.ui.screens.habits.list; + +import android.support.annotation.*; + +import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.callbacks.*; + +import java.util.*; + +import javax.inject.*; + +public class ListHabitsSelectionMenuBehavior +{ + @NonNull + private final Screen screen; + + @NonNull + CommandRunner commandRunner; + + @NonNull + private final Adapter adapter; + + @NonNull + private final HabitList habitList; + + @Inject + public ListHabitsSelectionMenuBehavior(@NonNull HabitList habitList, + @NonNull Screen screen, + @NonNull Adapter adapter, + @NonNull CommandRunner commandRunner) + { + this.habitList = habitList; + this.screen = screen; + this.adapter = adapter; + this.commandRunner = commandRunner; + } + + public boolean canArchive() + { + for (Habit h : adapter.getSelected()) + if (h.isArchived()) return false; + + return true; + } + + public boolean canEdit() + { + return (adapter.getSelected().size() == 1); + } + + public boolean canUnarchive() + { + for (Habit h : adapter.getSelected()) + if (!h.isArchived()) return false; + + return true; + } + + public void onArchiveHabits() + { + commandRunner.execute( + new ArchiveHabitsCommand(habitList, adapter.getSelected()), null); + adapter.clearSelection(); + } + + public void onChangeColor() + { + List selected = adapter.getSelected(); + Habit first = selected.get(0); + + screen.showColorPicker(first.getColor(), selectedColor -> + { + commandRunner.execute( + new ChangeHabitColorCommand(habitList, selected, selectedColor), + null); + adapter.clearSelection(); + }); + } + + public void onDeleteHabits() + { + List selected = adapter.getSelected(); + screen.showDeleteConfirmationScreen(() -> + { + adapter.performRemove(selected); + commandRunner.execute(new DeleteHabitsCommand(habitList, selected), + null); + adapter.clearSelection(); + }); + } + + public void onEditHabits() + { + screen.showEditHabitsScreen(adapter.getSelected()); + } + + public void onUnarchiveHabits() + { + commandRunner.execute( + new UnarchiveHabitsCommand(habitList, adapter.getSelected()), null); + adapter.clearSelection(); + } + + public interface Adapter + { + void clearSelection(); + + List getSelected(); + + void performRemove(List selected); + } + + public interface Screen + { + void showColorPicker(int defaultColor, + @NonNull OnColorPickedCallback callback); + + void showDeleteConfirmationScreen( + @NonNull OnConfirmedCallback callback); + + void showEditHabitsScreen(@NonNull List selected); + } +} diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitBehavior.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitBehavior.java index e66d6c71b..d43be2a42 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitBehavior.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.habits.show; +package org.isoron.uhabits.ui.screens.habits.show; import android.support.annotation.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehavior.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehavior.java index ae1ec3377..a7f3e68b3 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehavior.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.habits.show; +package org.isoron.uhabits.ui.screens.habits.show; import android.support.annotation.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetController.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/widgets/WidgetBehavior.java similarity index 85% rename from uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetController.java rename to uhabits-core/src/main/java/org/isoron/uhabits/ui/widgets/WidgetBehavior.java index 5aecbb970..d1d6090b6 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetController.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/widgets/WidgetBehavior.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Álinson Santos Xavier + * Copyright (C) 2017 Álinson Santos Xavier * * This file is part of Loop Habit Tracker. * @@ -17,18 +17,17 @@ * with this program. If not, see . */ -package org.isoron.uhabits.receivers; +package org.isoron.uhabits.ui.widgets; import android.support.annotation.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.notifications.*; +import org.isoron.uhabits.ui.*; import javax.inject.*; -@ReceiverScope -public class WidgetController +public class WidgetBehavior { @NonNull private final CommandRunner commandRunner; @@ -36,8 +35,8 @@ public class WidgetController private NotificationTray notificationTray; @Inject - public WidgetController(@NonNull CommandRunner commandRunner, - @NonNull NotificationTray notificationTray) + public WidgetBehavior(@NonNull CommandRunner commandRunner, + @NonNull NotificationTray notificationTray) { this.commandRunner = commandRunner; this.notificationTray = notificationTray; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java similarity index 96% rename from uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehaviorTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java index 528f70fb0..acb2c5b3e 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/list/ListHabitsBehaviorTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.habits.list; +package org.isoron.uhabits.ui.screens.habits.list; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; @@ -30,7 +30,7 @@ import org.mockito.junit.*; import static junit.framework.TestCase.assertTrue; import static org.hamcrest.CoreMatchers.*; -import static org.isoron.uhabits.ui.habits.list.ListHabitsBehavior.Message.*; +import static org.isoron.uhabits.ui.screens.habits.list.ListHabitsBehavior.Message.*; import static org.junit.Assert.assertFalse; import static org.junit.Assert.*; import static org.mockito.Mockito.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java similarity index 97% rename from uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehaviorTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java index 7a3c491d2..351636681 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/ui/habits/show/ShowHabitMenuBehaviorTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.habits.show; +package org.isoron.uhabits.ui.screens.habits.show; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; From d8d4c4f55ef2153df9832fb1109d68e09f3f6a05 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sat, 27 May 2017 20:33:30 -0400 Subject: [PATCH 16/27] Write tests for ListHabits behaviors --- .../habits/list/ListHabitsMenuTest.java | 8 +- .../habits/list/ListHabitsScreenTest.java | 18 +- .../habits/list/ListHabitsMenuBehavior.java | 14 -- .../java/org/isoron/uhabits/BaseUnitTest.java | 9 + .../habits/list/ListHabitsBehaviorTest.java | 3 - .../list/ListHabitsMenuBehaviorTest.java | 190 ++++++++++++++++++ .../ListHabitsSelectionMenuBehaviorTest.java | 159 +++++++++++++++ 7 files changed, 371 insertions(+), 30 deletions(-) create mode 100644 uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java create mode 100644 uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java index 45d015c6d..f26cd3b33 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java @@ -27,6 +27,7 @@ import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.ui.screens.habits.list.*; import org.junit.*; import org.mockito.*; @@ -48,6 +49,8 @@ public class ListHabitsMenuTest extends BaseAndroidTest private ArgumentCaptor matcherCaptor; + private ListHabitsMenuBehavior behavior; + @Override public void setUp() { @@ -58,13 +61,14 @@ public class ListHabitsMenuTest extends BaseAndroidTest adapter = mock(HabitCardListAdapter.class); preferences = mock(AndroidPreferences.class); themeSwitcher = mock(ThemeSwitcher.class); + behavior = mock(ListHabitsMenuBehavior.class); when(preferences.getShowArchived()).thenReturn(false); when(preferences.getShowCompleted()).thenReturn(false); when(themeSwitcher.isNightMode()).thenReturn(false); menu = new ListHabitsMenu(activity, preferences, - themeSwitcher); + themeSwitcher, behavior); matcherCaptor = ArgumentCaptor.forClass(HabitMatcher.class); @@ -121,7 +125,7 @@ public class ListHabitsMenuTest extends BaseAndroidTest public void testOnSelected_nightMode() { onItemSelected(R.id.actionToggleNightMode); - verify(screen).toggleNightMode(); + verify(screen).applyTheme(); } @Test diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java index 0906a8bac..1be789c0d 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java @@ -25,17 +25,19 @@ import android.content.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.dialogs.*; -import org.isoron.uhabits.activities.common.dialogs.ColorPickerDialog.*; import org.isoron.uhabits.activities.habits.edit.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.intents.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.ui.callbacks.*; import org.junit.*; import org.junit.runner.*; import org.junit.runners.*; +import java.util.*; + import static org.isoron.uhabits.activities.habits.list.ListHabitsScreen.*; import static org.mockito.Mockito.*; @@ -122,8 +124,6 @@ public class ListHabitsScreenTest extends BaseAndroidTest public void testOnCommand() { Command c = mock(Command.class); - when(getExecuteString(c)).thenReturn( - R.string.toast_habit_deleted); screen.onCommandExecuted(c, null); verify(screen).showMessage(R.string.toast_habit_deleted); } @@ -174,12 +174,11 @@ public class ListHabitsScreenTest extends BaseAndroidTest @Test public void testShowColorPicker() { - habit.setColor(999); ColorPickerDialog picker = mock(ColorPickerDialog.class); when(colorPickerDialogFactory.create(999)).thenReturn(picker); - OnColorSelectedListener callback = mock(OnColorSelectedListener.class); + OnColorPickedCallback callback = mock(OnColorPickedCallback.class); - screen.showColorPicker(habit, callback); + screen.showColorPicker(999, callback); verify(activity).showDialog(eq(picker), any()); verify(picker).setListener(callback); @@ -188,9 +187,7 @@ public class ListHabitsScreenTest extends BaseAndroidTest @Test public void testShowDeleteConfirmationScreen() { - ConfirmDeleteDialog.Callback callback; - callback = mock(ConfirmDeleteDialog.Callback.class); - + OnConfirmedCallback callback = mock(OnConfirmedCallback.class); ConfirmDeleteDialog dialog = mock(ConfirmDeleteDialog.class); when(confirmDeleteDialogFactory.create(callback)).thenReturn(dialog); @@ -204,8 +201,7 @@ public class ListHabitsScreenTest extends BaseAndroidTest { EditHabitDialog dialog = mock(EditHabitDialog.class); when(dialogFactory.edit(habit)).thenReturn(dialog); - - screen.showEditHabitScreen(habit); + screen.showEditHabitsScreen(Collections.singletonList(habit)); verify(activity).showDialog(eq(dialog), any()); } diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java index 595ca2971..e77938fb7 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java @@ -121,20 +121,6 @@ public class ListHabitsMenuBehavior screen.applyTheme(); } - private void toggleShowArchived() - { - showArchived = !showArchived; - preferences.setShowArchived(showArchived); - updateAdapterFilter(); - } - - private void toggleShowCompleted() - { - showCompleted = !showCompleted; - preferences.setShowCompleted(showCompleted); - updateAdapterFilter(); - } - private void updateAdapterFilter() { adapter.setFilter(new HabitMatcherBuilder() diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java index d78adaac8..7c34632fa 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java @@ -25,11 +25,14 @@ import org.isoron.uhabits.models.memory.*; import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.utils.*; import org.junit.*; +import org.junit.runner.*; +import org.mockito.junit.*; import java.util.*; import static org.mockito.Mockito.*; +@RunWith(MockitoJUnitRunner.class) public class BaseUnitTest { protected HabitList habitList; @@ -68,4 +71,10 @@ public class BaseUnitTest cal.set(year, month, day); return cal.getTimeInMillis(); } + + @Test + public void nothing() + { + + } } diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java index acb2c5b3e..869dd380f 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java @@ -24,9 +24,7 @@ import org.isoron.uhabits.models.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.utils.*; import org.junit.*; -import org.junit.runner.*; import org.mockito.*; -import org.mockito.junit.*; import static junit.framework.TestCase.assertTrue; import static org.hamcrest.CoreMatchers.*; @@ -35,7 +33,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.*; import static org.mockito.Mockito.*; -@RunWith(MockitoJUnitRunner.class) public class ListHabitsBehaviorTest extends BaseUnitTest { @Mock diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java new file mode 100644 index 000000000..dc3bcd293 --- /dev/null +++ b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2017 Á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.ui.screens.habits.list; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.ui.*; +import org.junit.*; +import org.mockito.*; + +import static junit.framework.TestCase.*; +import static org.hamcrest.MatcherAssert.*; +import static org.hamcrest.Matchers.*; +import static org.isoron.uhabits.models.HabitList.Order.*; +import static org.mockito.Mockito.*; + +public class ListHabitsMenuBehaviorTest extends BaseUnitTest +{ + private ListHabitsMenuBehavior behavior; + + @Mock + private ListHabitsMenuBehavior.Screen screen; + + @Mock + private ListHabitsMenuBehavior.Adapter adapter; + + @Mock + private Preferences prefs; + + @Mock + private ThemeSwitcher themeSwitcher; + + @Captor + private ArgumentCaptor matcherCaptor; + + @Captor + private ArgumentCaptor orderCaptor; + + @Override + public void setUp() + { + super.setUp(); + behavior = + new ListHabitsMenuBehavior(screen, adapter, prefs, themeSwitcher); + clearInvocations(adapter); + } + + @Test + public void testInitialFilter() + { + when(prefs.getShowArchived()).thenReturn(true); + when(prefs.getShowCompleted()).thenReturn(true); + + behavior = + new ListHabitsMenuBehavior(screen, adapter, prefs, themeSwitcher); + verify(adapter).setFilter(matcherCaptor.capture()); + verify(adapter).refresh(); + verifyNoMoreInteractions(adapter); + clearInvocations(adapter); + + assertTrue(matcherCaptor.getValue().isArchivedAllowed()); + assertTrue(matcherCaptor.getValue().isCompletedAllowed()); + + when(prefs.getShowArchived()).thenReturn(false); + when(prefs.getShowCompleted()).thenReturn(false); + + behavior = + new ListHabitsMenuBehavior(screen, adapter, prefs, themeSwitcher); + verify(adapter).setFilter(matcherCaptor.capture()); + verify(adapter).refresh(); + verifyNoMoreInteractions(adapter); + + assertFalse(matcherCaptor.getValue().isArchivedAllowed()); + assertFalse(matcherCaptor.getValue().isCompletedAllowed()); + } + + @Test + public void testOnCreateHabit() + { + behavior.onCreateHabit(); + verify(screen).showCreateHabitScreen(); + } + + @Test + public void testOnSortByColor() + { + behavior.onSortByColor(); + verify(adapter).setOrder(orderCaptor.capture()); + assertThat(orderCaptor.getValue(), equalTo(BY_COLOR)); + } + + @Test + public void testOnSortManually() + { + behavior.onSortByManually(); + verify(adapter).setOrder(orderCaptor.capture()); + assertThat(orderCaptor.getValue(), equalTo(BY_POSITION)); + } + + @Test + public void testOnSortScore() + { + behavior.onSortByScore(); + verify(adapter).setOrder(orderCaptor.capture()); + assertThat(orderCaptor.getValue(), equalTo(BY_SCORE)); + } + + @Test + public void testOnSortName() + { + behavior.onSortByName(); + verify(adapter).setOrder(orderCaptor.capture()); + assertThat(orderCaptor.getValue(), equalTo(BY_NAME)); + } + + @Test + public void testOnToggleShowArchived() + { + behavior.onToggleShowArchived(); + verify(adapter).setFilter(matcherCaptor.capture()); + assertTrue(matcherCaptor.getValue().isArchivedAllowed()); + + clearInvocations(adapter); + + behavior.onToggleShowArchived(); + verify(adapter).setFilter(matcherCaptor.capture()); + assertFalse(matcherCaptor.getValue().isArchivedAllowed()); + } + + @Test + public void testOnToggleShowCompleted() + { + behavior.onToggleShowCompleted(); + verify(adapter).setFilter(matcherCaptor.capture()); + assertTrue(matcherCaptor.getValue().isCompletedAllowed()); + + clearInvocations(adapter); + + behavior.onToggleShowCompleted(); + verify(adapter).setFilter(matcherCaptor.capture()); + assertFalse(matcherCaptor.getValue().isCompletedAllowed()); + } + + @Test + public void testOnViewAbout() + { + behavior.onViewAbout(); + verify(screen).showAboutScreen(); + } + + @Test + public void testOnViewFAQ() + { + behavior.onViewFAQ(); + verify(screen).showFAQScreen(); + } + + @Test + public void testOnViewSettings() + { + behavior.onViewSettings(); + verify(screen).showSettingsScreen(); + } + + @Test + public void testOnToggleNightMode() + { + behavior.onToggleNightMode(); + verify(themeSwitcher).toggleNightMode(); + verify(screen).applyTheme(); + } +} \ No newline at end of file diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java new file mode 100644 index 000000000..ccf6b39ac --- /dev/null +++ b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java @@ -0,0 +1,159 @@ +/* + * Copyright (C) 2017 Á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.ui.screens.habits.list; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.callbacks.*; +import org.junit.*; +import org.mockito.*; + +import java.util.*; + +import static java.util.Arrays.*; +import static java.util.Collections.*; +import static junit.framework.TestCase.*; +import static org.hamcrest.MatcherAssert.*; +import static org.hamcrest.Matchers.*; +import static org.mockito.Mockito.*; + +public class ListHabitsSelectionMenuBehaviorTest extends BaseUnitTest +{ + @Mock + private ListHabitsSelectionMenuBehavior.Screen screen; + + @Mock + private ListHabitsSelectionMenuBehavior.Adapter adapter; + + private ListHabitsSelectionMenuBehavior behavior; + + private Habit habit1, habit2, habit3; + + @Captor + private ArgumentCaptor colorPickerCallback; + + @Captor + private ArgumentCaptor deleteCallback; + + @Test + public void canArchive() throws Exception + { + when(adapter.getSelected()).thenReturn(asList(habit1, habit2)); + assertFalse(behavior.canArchive()); + + when(adapter.getSelected()).thenReturn(asList(habit2, habit3)); + assertTrue(behavior.canArchive()); + } + + @Test + public void canEdit() throws Exception + { + when(adapter.getSelected()).thenReturn(singletonList(habit1)); + assertTrue(behavior.canEdit()); + + when(adapter.getSelected()).thenReturn(asList(habit1, habit2)); + assertFalse(behavior.canEdit()); + } + + @Test + public void canUnarchive() throws Exception + { + when(adapter.getSelected()).thenReturn(asList(habit1, habit2)); + assertFalse(behavior.canUnarchive()); + + when(adapter.getSelected()).thenReturn(singletonList(habit1)); + assertTrue(behavior.canUnarchive()); + } + + @Test + public void onArchiveHabits() throws Exception + { + assertFalse(habit2.isArchived()); + when(adapter.getSelected()).thenReturn(singletonList(habit2)); + behavior.onArchiveHabits(); + assertTrue(habit2.isArchived()); + } + + @Test + public void onChangeColor() throws Exception + { + assertThat(habit1.getColor(), equalTo(5)); + assertThat(habit2.getColor(), equalTo(5)); + when(adapter.getSelected()).thenReturn(asList(habit1, habit2)); + + behavior.onChangeColor(); + + verify(screen).showColorPicker(eq(5), colorPickerCallback.capture()); + colorPickerCallback.getValue().onColorPicked(30); + assertThat(habit1.getColor(), equalTo(30)); + } + + @Test + public void onDeleteHabits() throws Exception + { + Long id = habit1.getId(); + assertNotNull(id); + assertNotNull(habitList.getById(id)); + when(adapter.getSelected()).thenReturn(singletonList(habit1)); + + behavior.onDeleteHabits(); + + verify(screen).showDeleteConfirmationScreen(deleteCallback.capture()); + deleteCallback.getValue().onConfirmed(); + assertNull(habitList.getById(id)); + } + + @Test + public void onEditHabits() throws Exception + { + List selected = asList(habit1, habit2); + when(adapter.getSelected()).thenReturn(selected); + behavior.onEditHabits(); + verify(screen).showEditHabitsScreen(selected); + } + + @Test + public void onUnarchiveHabits() throws Exception + { + assertTrue(habit1.isArchived()); + when(adapter.getSelected()).thenReturn(singletonList(habit1)); + behavior.onUnarchiveHabits(); + assertFalse(habit1.isArchived()); + } + + @Override + public void setUp() + { + super.setUp(); + + habit1 = fixtures.createShortHabit(); + habit1.setArchived(true); + habit2 = fixtures.createShortHabit(); + habit3 = fixtures.createShortHabit(); + habitList.add(habit1); + habitList.add(habit2); + habitList.add(habit3); + + behavior = + new ListHabitsSelectionMenuBehavior(habitList, screen, adapter, + commandRunner); + } + +} From 56c5fb6c9dfa9e071c6dc41e84fc8564ecaa32c9 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sat, 27 May 2017 22:46:33 -0400 Subject: [PATCH 17/27] Write missing tests --- uhabits-core/build.gradle | 6 ++ .../habits/list/ListHabitsBehavior.java | 32 -------- .../habits/list}/HabitCardListCacheTest.java | 23 +++--- .../ui/screens/habits/list/HintListTest.java | 79 +++++++++++++++++++ .../habits/list/ListHabitsBehaviorTest.java | 46 ++++++++++- 5 files changed, 137 insertions(+), 49 deletions(-) rename {uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model => uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list}/HabitCardListCacheTest.java (90%) create mode 100644 uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/HintListTest.java diff --git a/uhabits-core/build.gradle b/uhabits-core/build.gradle index fc0189b05..fa1ec0e0b 100644 --- a/uhabits-core/build.gradle +++ b/uhabits-core/build.gradle @@ -28,6 +28,12 @@ jacocoTestReport { xml.enabled = true html.enabled = true } + + afterEvaluate { + classDirectories = files(classDirectories.files.collect { + fileTree(dir: it, exclude: '**/*Factory.*') + }) + } } check.dependsOn jacocoTestReport diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehavior.java index 82df2a302..374f88995 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehavior.java @@ -67,14 +67,6 @@ public class ListHabitsBehavior screen.showHabitScreen(h); } -// public void onExportDB() -// { -// taskRunner.execute(exportDBFactory.create(filename -> { -// if (filename != null) screen.showSendFileScreen(filename); -// else screen.showMessage(R.string.could_not_export); -// })); -// } - public void onEdit(@NonNull Habit habit, long timestamp) { CheckmarkList checkmarks = habit.getCheckmarks(); @@ -103,30 +95,6 @@ public class ListHabitsBehavior })); } -// public void onImportData(@NonNull File file, -// @NonNull OnFinishedListener finishedListener) -// { -// taskRunner.execute(importTaskFactory.create(file, result -> { -// switch (result) -// { -// case ImportDataTask.SUCCESS: -// adapter.refresh(); -// screen.showMessage(R.string.habits_imported); -// break; -// -// case ImportDataTask.NOT_RECOGNIZED: -// screen.showMessage(R.string.file_not_recognized); -// break; -// -// default: -// screen.showMessage(R.string.could_not_import); -// break; -// } -// -// finishedListener.onFinish(); -// })); -// } - public void onReorderHabit(@NonNull Habit from, @NonNull Habit to) { taskRunner.execute(() -> habitList.reorder(from, to)); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCacheTest.java similarity index 90% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCacheTest.java index a0b2355c5..9fdda511e 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListCacheTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCacheTest.java @@ -17,15 +17,15 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities.habits.list.model; +package org.isoron.uhabits.ui.screens.habits.list; + +import junit.framework.Assert; import org.isoron.uhabits.*; import org.isoron.uhabits.commands.*; import org.isoron.uhabits.models.*; -import org.isoron.uhabits.tasks.*; -import org.isoron.uhabits.ui.screens.habits.list.*; import org.isoron.uhabits.utils.*; -import org.junit.*; +import org.junit.Test; import java.util.*; @@ -33,14 +33,12 @@ import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.core.IsEqual.*; import static org.mockito.Mockito.*; -public class HabitCardListCacheTest extends BaseAndroidTest +public class HabitCardListCacheTest extends BaseUnitTest { private HabitCardListCache cache; private HabitCardListCache.Listener listener; - private CommandRunner commandRunner; - @Override public void setUp() { @@ -49,13 +47,10 @@ public class HabitCardListCacheTest extends BaseAndroidTest for (int i = 0; i < 10; i++) { - if (i == 3) fixtures.createLongHabit(); - else fixtures.createShortHabit(); + if (i == 3) habitList.add(fixtures.createLongHabit()); + else habitList.add(fixtures.createShortHabit()); } - SingleThreadTaskRunner taskRunner = new SingleThreadTaskRunner(); - commandRunner = new CommandRunner(taskRunner); - cache = new HabitCardListCache(habitList, commandRunner, taskRunner); cache.setCheckmarkCount(10); cache.refreshAllHabits(); @@ -105,7 +100,7 @@ public class HabitCardListCacheTest extends BaseAndroidTest assertThat(cache.getHabitCount(), equalTo(10)); Habit h = habitList.getByPosition(3); - assertNotNull(h.getId()); + junit.framework.Assert.assertNotNull(h.getId()); double score = h.getScores().getTodayValue(); assertThat(cache.getHabitByPosition(3), equalTo(h)); @@ -188,7 +183,7 @@ public class HabitCardListCacheTest extends BaseAndroidTest protected void removeHabitAt(int position) { Habit h = habitList.getByPosition(position); - assertNotNull(h); + Assert.assertNotNull(h); habitList.remove(h); } diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/HintListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/HintListTest.java new file mode 100644 index 000000000..24271923e --- /dev/null +++ b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/HintListTest.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2017 Á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.ui.screens.habits.list; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.utils.*; +import org.junit.*; +import org.mockito.*; + +import static junit.framework.TestCase.assertFalse; +import static org.hamcrest.MatcherAssert.*; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.*; + +public class HintListTest extends BaseUnitTest +{ + private HintList hintList; + + private String[] hints; + + @Mock + private Preferences prefs; + + private long today; + + private long yesterday; + + @Override + public void setUp() + { + super.setUp(); + today = DateUtils.getStartOfToday(); + yesterday = today - DateUtils.millisecondsInOneDay; + + hints = new String[]{ "hint1", "hint2", "hint3" }; + hintList = new HintList(prefs, hints); + } + + @Test + public void pop() throws Exception + { + when(prefs.getLastHintNumber()).thenReturn(-1); + assertThat(hintList.pop(), equalTo("hint1")); + verify(prefs).updateLastHint(0, today); + + when(prefs.getLastHintNumber()).thenReturn(2); + assertNull(hintList.pop()); + } + + @Test + public void shouldShow() throws Exception + { + when(prefs.getLastHintTimestamp()).thenReturn(today); + assertFalse(hintList.shouldShow()); + + when(prefs.getLastHintTimestamp()).thenReturn(yesterday); + assertTrue(hintList.shouldShow()); + } +} \ No newline at end of file diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java index 869dd380f..58f9d6224 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java @@ -26,11 +26,16 @@ import org.isoron.uhabits.utils.*; import org.junit.*; import org.mockito.*; +import java.io.*; + +import static java.nio.file.Files.*; import static junit.framework.TestCase.assertTrue; +import static org.apache.commons.io.FileUtils.*; import static org.hamcrest.CoreMatchers.*; import static org.isoron.uhabits.ui.screens.habits.list.ListHabitsBehavior.Message.*; import static org.junit.Assert.assertFalse; import static org.junit.Assert.*; +import static org.mockito.Mockito.any; import static org.mockito.Mockito.*; public class ListHabitsBehaviorTest extends BaseUnitTest @@ -49,7 +54,7 @@ public class ListHabitsBehaviorTest extends BaseUnitTest private Habit habit1, habit2; @Captor - ArgumentCaptor captor; + ArgumentCaptor picker; @Override @Before @@ -70,11 +75,32 @@ public class ListHabitsBehaviorTest extends BaseUnitTest public void testOnEdit() { behavior.onEdit(habit2, DateUtils.getStartOfToday()); - verify(screen).showNumberPicker(eq(0.1), eq("miles"), captor.capture()); - captor.getValue().onNumberPicked(100); + verify(screen).showNumberPicker(eq(0.1), eq("miles"), picker.capture()); + picker.getValue().onNumberPicked(100); assertThat(habit2.getCheckmarks().getTodayValue(), equalTo(100000)); } + @Test + public void testOnExportCSV() throws Exception + { + File outputDir = createTempDirectory("CSV").toFile(); + when(system.getCSVOutputDir()).thenReturn(outputDir); + behavior.onExportCSV(); + verify(screen).showSendFileScreen(any()); + assertThat(listFiles(outputDir, null, false).size(), equalTo(1)); + deleteDirectory(outputDir); + } + + @Test + public void testOnExportCSV_fail() throws Exception + { + File outputDir = createTempDirectory("CSV").toFile(); + outputDir.setWritable(false); + when(system.getCSVOutputDir()).thenReturn(outputDir); + behavior.onExportCSV(); + verify(screen).showMessage(COULD_NOT_EXPORT); + } + @Test public void testOnHabitClick() { @@ -126,4 +152,18 @@ public class ListHabitsBehaviorTest extends BaseUnitTest behavior.onToggle(habit1, DateUtils.getStartOfToday()); assertFalse(habit1.isCompletedToday()); } + + @Test + public void testOnSendBugReport() throws IOException + { + when(system.getBugReport()).thenReturn("hello"); + behavior.onSendBugReport(); + verify(screen).showSendBugReportToDeveloperScreen("hello"); + + when(system.getBugReport()).thenThrow(new IOException()); + behavior.onSendBugReport(); + verify(screen).showMessage(COULD_NOT_GENERATE_BUG_REPORT); + + } + } \ No newline at end of file From 17469206990d8070cafe399ce5cd259d4e275755 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 28 May 2017 10:34:57 -0400 Subject: [PATCH 18/27] Rename uhabits-core package --- .../org/isoron/uhabits/AndroidTestComponent.java | 3 ++- .../java/org/isoron/uhabits/BaseAndroidTest.java | 5 +++-- .../java/org/isoron/uhabits/BaseViewTest.java | 2 -- .../java/org/isoron/uhabits/HabitFixtures.java | 4 ++-- .../java/org/isoron/uhabits/HabitLoggerTest.java | 2 +- .../activities/common/views/BarChartTest.java | 3 ++- .../activities/common/views/FrequencyChartTest.java | 2 +- .../activities/common/views/HistoryChartTest.java | 2 +- .../activities/common/views/ScoreChartTest.java | 3 ++- .../activities/common/views/StreakChartTest.java | 2 +- .../activities/habits/list/ListHabitsMenuTest.java | 6 +++--- .../habits/list/ListHabitsScreenTest.java | 7 ++++--- .../controllers/CheckmarkButtonControllerTest.java | 2 +- .../list/controllers/HabitCardControllerTest.java | 4 ++-- .../controllers/HabitCardListControllerTest.java | 2 +- .../habits/list/views/CheckmarkButtonViewTest.java | 2 +- .../habits/list/views/CheckmarkPanelViewTest.java | 4 ++-- .../habits/list/views/HabitCardViewTest.java | 4 ++-- .../habits/list/views/HeaderViewTest.java | 2 +- .../activities/habits/list/views/HintViewTest.java | 4 ++-- .../habits/show/views/FrequencyCardTest.java | 2 +- .../habits/show/views/HistoryCardTest.java | 2 +- .../habits/show/views/OverviewCardTest.java | 2 +- .../activities/habits/show/views/ScoreCardTest.java | 2 +- .../habits/show/views/StreakCardTest.java | 2 +- .../habits/show/views/SubtitleCardTest.java | 2 +- .../{ => core}/commands/CommandParserTest.java | 5 +++-- .../{ => core}/io/HabitsCSVExporterTest.java | 6 ++---- .../isoron/uhabits/{ => core}/io/ImportTest.java | 7 ++++--- .../uhabits/{ => core}/models/HabitListTest.java | 5 ++--- .../{ => core}/models/sqlite/HabitRecordTest.java | 4 ++-- .../models/sqlite/SQLiteCheckmarkListTest.java | 8 ++++---- .../models/sqlite/SQLiteHabitListTest.java | 6 +++--- .../models/sqlite/SQLiteRepetitionListTest.java | 10 +++++----- .../models/sqlite/SQLiteScoreListTest.java | 6 +++--- .../uhabits/{ => core}/tasks/ExportCSVTaskTest.java | 5 ++--- .../uhabits/{ => core}/tasks/ExportDBTaskTest.java | 6 ++---- .../{ => core}/utils/ReminderSchedulerTest.java | 7 ++++--- .../uhabits/receivers/PebbleReceiverTest.java | 2 +- .../uhabits/receivers/ReminderControllerTest.java | 3 ++- .../uhabits/receivers/WidgetControllerTest.java | 10 +++++----- .../isoron/uhabits/widgets/CheckmarkWidgetTest.java | 4 ++-- .../isoron/uhabits/widgets/FrequencyWidgetTest.java | 2 +- .../isoron/uhabits/widgets/HistoryWidgetTest.java | 2 +- .../org/isoron/uhabits/widgets/ScoreWidgetTest.java | 2 +- .../isoron/uhabits/widgets/StreakWidgetTest.java | 2 +- .../widgets/views/CheckmarkWidgetViewTest.java | 2 +- .../java/org/isoron/androidbase/BaseSystem.java | 7 ++++--- .../androidbase/activities/ActivityComponent.java | 2 +- .../androidbase/activities/ActivityModule.java | 2 +- .../activities/BaseExceptionHandler.java | 2 +- .../isoron/androidbase/activities/BaseRootView.java | 2 +- .../main/java/org/isoron/uhabits/HabitLogger.java | 5 +++-- .../java/org/isoron/uhabits/HabitsApplication.java | 2 +- .../java/org/isoron/uhabits/HabitsComponent.java | 13 ++++++++----- .../main/java/org/isoron/uhabits/HabitsModule.java | 4 +++- .../uhabits/activities/AndroidThemeSwitcher.java | 4 ++-- .../uhabits/activities/about/AboutActivity.java | 2 +- .../uhabits/activities/about/AboutRootView.java | 2 +- .../uhabits/activities/about/AboutScreen.java | 2 +- .../common/dialogs/ColorPickerDialog.java | 2 +- .../common/dialogs/ConfirmDeleteDialog.java | 2 +- .../common/dialogs/HistoryEditorDialog.java | 4 ++-- .../common/dialogs/WeekdayPickerDialog.java | 4 ++-- .../uhabits/activities/common/views/BarChart.java | 3 ++- .../activities/common/views/FrequencyChart.java | 1 + .../uhabits/activities/common/views/HabitChart.java | 2 +- .../activities/common/views/HistoryChart.java | 3 ++- .../uhabits/activities/common/views/ScoreChart.java | 3 ++- .../activities/common/views/StreakChart.java | 3 ++- .../activities/habits/edit/EditHabitDialog.java | 8 ++++---- .../habits/edit/EditHabitDialogFactory.java | 2 +- .../habits/edit/views/FrequencyPanel.java | 2 +- .../habits/edit/views/NameDescriptionPanel.java | 2 +- .../activities/habits/edit/views/ReminderPanel.java | 2 +- .../activities/habits/list/ListHabitsActivity.java | 4 ++-- .../habits/list/ListHabitsController.java | 6 +++--- .../activities/habits/list/ListHabitsMenu.java | 6 +++--- .../activities/habits/list/ListHabitsModule.java | 2 +- .../activities/habits/list/ListHabitsRootView.java | 6 +++--- .../activities/habits/list/ListHabitsScreen.java | 10 +++++----- .../habits/list/ListHabitsSelectionMenu.java | 4 ++-- .../list/controllers/CheckmarkButtonController.java | 2 +- .../list/controllers/HabitCardController.java | 2 +- .../list/controllers/HabitCardListController.java | 2 +- .../list/controllers/NumberButtonController.java | 2 +- .../habits/list/model/HabitCardListAdapter.java | 6 +++--- .../habits/list/views/CheckmarkButtonView.java | 2 +- .../habits/list/views/CheckmarkPanelView.java | 4 ++-- .../habits/list/views/HabitCardListView.java | 2 +- .../activities/habits/list/views/HabitCardView.java | 3 ++- .../activities/habits/list/views/HeaderView.java | 1 + .../activities/habits/list/views/HintView.java | 2 +- .../habits/list/views/NumberPanelView.java | 4 ++-- .../activities/habits/show/ShowHabitActivity.java | 2 +- .../activities/habits/show/ShowHabitController.java | 2 +- .../activities/habits/show/ShowHabitModule.java | 4 ++-- .../activities/habits/show/ShowHabitRootView.java | 2 +- .../activities/habits/show/ShowHabitScreen.java | 4 ++-- .../activities/habits/show/ShowHabitsMenu.java | 2 +- .../activities/habits/show/views/BarCard.java | 5 +++-- .../activities/habits/show/views/FrequencyCard.java | 4 ++-- .../activities/habits/show/views/HabitCard.java | 4 ++-- .../activities/habits/show/views/HistoryCard.java | 4 ++-- .../activities/habits/show/views/OverviewCard.java | 5 +++-- .../activities/habits/show/views/ScoreCard.java | 5 +++-- .../activities/habits/show/views/StreakCard.java | 4 ++-- .../activities/habits/show/views/SubtitleCard.java | 2 +- .../uhabits/automation/EditSettingActivity.java | 2 +- .../uhabits/automation/EditSettingController.java | 2 +- .../uhabits/automation/EditSettingRootView.java | 2 +- .../uhabits/automation/FireSettingReceiver.java | 6 +++--- .../org/isoron/uhabits/commands/CommandParser.java | 4 ++-- .../org/isoron/uhabits/intents/IntentFactory.java | 2 +- .../org/isoron/uhabits/intents/IntentParser.java | 6 +++--- .../org/isoron/uhabits/intents/IntentScheduler.java | 2 +- .../uhabits/intents/PendingIntentFactory.java | 4 ++-- .../org/isoron/uhabits/io/AbstractImporter.java | 2 +- .../java/org/isoron/uhabits/io/GenericImporter.java | 2 +- .../org/isoron/uhabits/io/HabitBullCSVImporter.java | 4 ++-- .../java/org/isoron/uhabits/io/LoopDBImporter.java | 2 +- .../org/isoron/uhabits/io/RewireDBImporter.java | 4 ++-- .../org/isoron/uhabits/io/TickmateDBImporter.java | 4 ++-- .../uhabits/models/sqlite/SQLModelFactory.java | 4 ++-- .../uhabits/models/sqlite/SQLiteCheckmarkList.java | 4 ++-- .../uhabits/models/sqlite/SQLiteHabitList.java | 4 ++-- .../uhabits/models/sqlite/SQLiteRepetitionList.java | 8 ++++---- .../uhabits/models/sqlite/SQLiteScoreList.java | 2 +- .../uhabits/models/sqlite/SQLiteStreakList.java | 3 ++- .../models/sqlite/records/CheckmarkRecord.java | 2 +- .../uhabits/models/sqlite/records/HabitRecord.java | 2 +- .../models/sqlite/records/RepetitionRecord.java | 2 +- .../uhabits/models/sqlite/records/ScoreRecord.java | 2 +- .../uhabits/models/sqlite/records/StreakRecord.java | 2 +- .../notifications/AndroidNotificationTray.java | 11 ++++++----- .../uhabits/notifications/RingtoneManager.java | 1 + .../uhabits/preferences/AndroidPreferences.java | 6 ++++-- .../uhabits/preferences/WidgetPreferences.java | 4 ++-- .../isoron/uhabits/receivers/PebbleReceiver.java | 8 ++++---- .../uhabits/receivers/ReminderController.java | 3 ++- .../isoron/uhabits/receivers/ReminderReceiver.java | 4 ++-- .../isoron/uhabits/receivers/WidgetReceiver.java | 2 +- .../java/org/isoron/uhabits/sync/SyncManager.java | 2 ++ .../tasks/{android => }/AndroidTaskRunner.java | 6 +++--- .../uhabits/tasks/{android => }/ExportDBTask.java | 4 ++-- .../uhabits/tasks/{android => }/ImportDataTask.java | 4 ++-- .../uhabits/tasks/{android => }/package-info.java | 4 ++-- .../isoron/uhabits/utils/AndroidDateFormats.java | 2 ++ .../org/isoron/uhabits/utils/AndroidDateUtils.java | 6 ++++-- .../org/isoron/uhabits/utils/DatabaseUtils.java | 1 + .../org/isoron/uhabits/utils/ReminderScheduler.java | 8 +++++--- .../isoron/uhabits/widgets/BaseWidgetProvider.java | 2 +- .../org/isoron/uhabits/widgets/CheckmarkWidget.java | 2 +- .../uhabits/widgets/CheckmarkWidgetProvider.java | 2 +- .../org/isoron/uhabits/widgets/FrequencyWidget.java | 2 +- .../uhabits/widgets/FrequencyWidgetProvider.java | 2 +- .../isoron/uhabits/widgets/HabitPickerDialog.java | 2 +- .../org/isoron/uhabits/widgets/HistoryWidget.java | 2 +- .../uhabits/widgets/HistoryWidgetProvider.java | 2 +- .../org/isoron/uhabits/widgets/ScoreWidget.java | 2 +- .../isoron/uhabits/widgets/ScoreWidgetProvider.java | 2 +- .../org/isoron/uhabits/widgets/StreakWidget.java | 2 +- .../uhabits/widgets/StreakWidgetProvider.java | 2 +- .../org/isoron/uhabits/widgets/WidgetUpdater.java | 4 ++-- .../uhabits/widgets/views/CheckmarkWidgetView.java | 2 +- .../org/isoron/uhabits/{ => core}/AppScope.java | 2 +- .../java/org/isoron/uhabits/{ => core}/MyClass.java | 2 +- .../{ => core}/commands/ArchiveHabitsCommand.java | 4 ++-- .../commands/ChangeHabitColorCommand.java | 4 ++-- .../isoron/uhabits/{ => core}/commands/Command.java | 4 ++-- .../uhabits/{ => core}/commands/CommandRunner.java | 6 +++--- .../{ => core}/commands/CreateHabitCommand.java | 4 ++-- .../commands/CreateRepetitionCommand.java | 4 ++-- .../{ => core}/commands/DeleteHabitsCommand.java | 4 ++-- .../{ => core}/commands/EditHabitCommand.java | 4 ++-- .../commands/ToggleRepetitionCommand.java | 4 ++-- .../{ => core}/commands/UnarchiveHabitsCommand.java | 4 ++-- .../uhabits/{ => core}/commands/package-info.java | 4 ++-- .../uhabits/{ => core}/io/HabitsCSVExporter.java | 6 +++--- .../isoron/uhabits/{ => core}/models/Checkmark.java | 2 +- .../uhabits/{ => core}/models/CheckmarkList.java | 6 +++--- .../isoron/uhabits/{ => core}/models/Frequency.java | 2 +- .../org/isoron/uhabits/{ => core}/models/Habit.java | 4 ++-- .../isoron/uhabits/{ => core}/models/HabitList.java | 4 ++-- .../uhabits/{ => core}/models/HabitMatcher.java | 2 +- .../{ => core}/models/HabitMatcherBuilder.java | 4 ++-- .../{ => core}/models/HabitNotFoundException.java | 2 +- .../uhabits/{ => core}/models/ModelFactory.java | 2 +- .../uhabits/{ => core}/models/ModelObservable.java | 2 +- .../isoron/uhabits/{ => core}/models/Reminder.java | 2 +- .../uhabits/{ => core}/models/Repetition.java | 2 +- .../uhabits/{ => core}/models/RepetitionList.java | 4 ++-- .../org/isoron/uhabits/{ => core}/models/Score.java | 2 +- .../isoron/uhabits/{ => core}/models/ScoreList.java | 4 ++-- .../isoron/uhabits/{ => core}/models/Streak.java | 4 ++-- .../uhabits/{ => core}/models/StreakList.java | 4 ++-- .../uhabits/{ => core}/models/WeekdayList.java | 2 +- .../models/memory/MemoryCheckmarkList.java | 4 ++-- .../{ => core}/models/memory/MemoryHabitList.java | 6 +++--- .../models/memory/MemoryModelFactory.java | 6 +++--- .../models/memory/MemoryRepetitionList.java | 4 ++-- .../{ => core}/models/memory/MemoryScoreList.java | 4 ++-- .../{ => core}/models/memory/MemoryStreakList.java | 6 +++--- .../{ => core}/models/memory/package-info.java | 2 +- .../uhabits/{ => core}/models/package-info.java | 6 +++--- .../uhabits/{ => core}/preferences/Preferences.java | 2 +- .../uhabits/{ => core}/tasks/ExportCSVTask.java | 6 +++--- .../{ => core}/tasks/SingleThreadTaskRunner.java | 2 +- .../org/isoron/uhabits/{ => core}/tasks/Task.java | 2 +- .../isoron/uhabits/{ => core}/tasks/TaskRunner.java | 2 +- .../uhabits/{ => core}/ui/NotificationTray.java | 4 ++-- .../isoron/uhabits/{ => core}/ui/ThemeSwitcher.java | 4 ++-- .../ui/callbacks/OnColorPickedCallback.java | 2 +- .../ui/callbacks/OnConfirmedCallback.java | 2 +- .../{ => core}/ui/callbacks/OnFinishedCallback.java | 2 +- .../{ => core}/ui/screens/about/AboutBehavior.java | 4 ++-- .../ui/screens/habits/list/HabitCardListCache.java | 12 ++++++------ .../{ => core}/ui/screens/habits/list/HintList.java | 6 +++--- .../ui/screens/habits/list/ListHabitsBehavior.java | 12 ++++++------ .../screens/habits/list/ListHabitsMenuBehavior.java | 8 ++++---- .../list/ListHabitsSelectionMenuBehavior.java | 8 ++++---- .../ui/screens/habits/show/ShowHabitBehavior.java | 6 +++--- .../screens/habits/show/ShowHabitMenuBehavior.java | 6 +++--- .../{ => core}/ui/widgets/WidgetBehavior.java | 8 ++++---- .../uhabits/{ => core}/utils/ColorConstants.java | 2 +- .../uhabits/{ => core}/utils/DateFormats.java | 2 +- .../isoron/uhabits/{ => core}/utils/DateUtils.java | 2 +- .../uhabits/{ => core}/utils/MidnightTimer.java | 4 ++-- .../uhabits/{ => core}/utils/StringUtils.java | 2 +- .../test/java/org/isoron/uhabits/BaseUnitTest.java | 10 +++++----- .../commands/ArchiveHabitsCommandTest.java | 4 ++-- .../commands/ChangeHabitColorCommandTest.java | 4 ++-- .../{ => core}/commands/CreateHabitCommandTest.java | 4 ++-- .../commands/CreateRepetitionCommandTest.java | 8 ++++---- .../commands/DeleteHabitsCommandTest.java | 4 ++-- .../{ => core}/commands/EditHabitCommandTest.java | 4 ++-- .../commands/ToggleRepetitionCommandTest.java | 6 +++--- .../commands/UnarchiveHabitsCommandTest.java | 4 ++-- .../{ => core}/models/CheckmarkListTest.java | 6 +++--- .../uhabits/{ => core}/models/HabitFixtures.java | 4 ++-- .../uhabits/{ => core}/models/HabitListTest.java | 4 ++-- .../isoron/uhabits/{ => core}/models/HabitTest.java | 2 +- .../{ => core}/models/RepetitionListTest.java | 4 ++-- .../uhabits/{ => core}/models/ScoreListTest.java | 4 ++-- .../isoron/uhabits/{ => core}/models/ScoreTest.java | 4 ++-- .../uhabits/{ => core}/models/StreakListTest.java | 4 ++-- .../uhabits/{ => core}/models/WeekdayListTest.java | 2 +- .../tasks/SingleThreadTaskRunnerTest.java | 2 +- .../screens/habits/list/HabitCardListCacheTest.java | 8 ++++---- .../ui/screens/habits/list/HintListTest.java | 6 +++--- .../screens/habits/list/ListHabitsBehaviorTest.java | 10 +++++----- .../habits/list/ListHabitsMenuBehaviorTest.java | 10 +++++----- .../list/ListHabitsSelectionMenuBehaviorTest.java | 6 +++--- .../habits/show/ShowHabitMenuBehaviorTest.java | 4 ++-- .../uhabits/{ => core}/utils/DateUtilsTest.java | 2 +- 255 files changed, 501 insertions(+), 468 deletions(-) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{ => core}/commands/CommandParserTest.java (97%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{ => core}/io/HabitsCSVExporterTest.java (96%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{ => core}/io/ImportTest.java (97%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{ => core}/models/HabitListTest.java (98%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{ => core}/models/sqlite/HabitRecordTest.java (96%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{ => core}/models/sqlite/SQLiteCheckmarkListTest.java (96%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{ => core}/models/sqlite/SQLiteHabitListTest.java (97%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{ => core}/models/sqlite/SQLiteRepetitionListTest.java (95%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{ => core}/models/sqlite/SQLiteScoreListTest.java (96%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{ => core}/tasks/ExportCSVTaskTest.java (94%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{ => core}/tasks/ExportDBTaskTest.java (92%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{ => core}/utils/ReminderSchedulerTest.java (96%) rename uhabits-android/src/main/java/org/isoron/uhabits/tasks/{android => }/AndroidTaskRunner.java (96%) rename uhabits-android/src/main/java/org/isoron/uhabits/tasks/{android => }/ExportDBTask.java (96%) rename uhabits-android/src/main/java/org/isoron/uhabits/tasks/{android => }/ImportDataTask.java (96%) rename uhabits-android/src/main/java/org/isoron/uhabits/tasks/{android => }/package-info.java (90%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/AppScope.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/MyClass.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/commands/ArchiveHabitsCommand.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/commands/ChangeHabitColorCommand.java (97%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/commands/Command.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/commands/CommandRunner.java (95%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/commands/CreateHabitCommand.java (97%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/commands/CreateRepetitionCommand.java (97%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/commands/DeleteHabitsCommand.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/commands/EditHabitCommand.java (97%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/commands/ToggleRepetitionCommand.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/commands/UnarchiveHabitsCommand.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/commands/package-info.java (89%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/io/HabitsCSVExporter.java (98%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/Checkmark.java (98%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/CheckmarkList.java (98%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/Frequency.java (98%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/Habit.java (99%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/HabitList.java (98%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/HabitMatcher.java (98%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/HabitMatcherBuilder.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/HabitNotFoundException.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/ModelFactory.java (97%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/ModelObservable.java (98%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/Reminder.java (97%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/Repetition.java (98%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/RepetitionList.java (98%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/Score.java (98%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/ScoreList.java (99%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/Streak.java (95%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/StreakList.java (98%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/WeekdayList.java (97%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/memory/MemoryCheckmarkList.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/memory/MemoryHabitList.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/memory/MemoryModelFactory.java (93%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/memory/MemoryRepetitionList.java (97%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/memory/MemoryScoreList.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/memory/MemoryStreakList.java (94%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/memory/package-info.java (94%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/models/package-info.java (87%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/preferences/Preferences.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/tasks/ExportCSVTask.java (94%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/tasks/SingleThreadTaskRunner.java (97%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/tasks/Task.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/tasks/TaskRunner.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/ui/NotificationTray.java (91%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/ui/ThemeSwitcher.java (95%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/ui/callbacks/OnColorPickedCallback.java (94%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/ui/callbacks/OnConfirmedCallback.java (94%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/ui/callbacks/OnFinishedCallback.java (94%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/ui/screens/about/AboutBehavior.java (95%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/ui/screens/habits/list/HabitCardListCache.java (97%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/ui/screens/habits/list/HintList.java (94%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/ui/screens/habits/list/ListHabitsBehavior.java (94%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/ui/screens/habits/list/ListHabitsMenuBehavior.java (95%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java (95%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/ui/screens/habits/show/ShowHabitBehavior.java (92%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/ui/screens/habits/show/ShowHabitMenuBehavior.java (94%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/ui/widgets/WidgetBehavior.java (92%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/utils/ColorConstants.java (92%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/utils/DateFormats.java (97%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/utils/DateUtils.java (99%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/utils/MidnightTimer.java (96%) rename uhabits-core/src/main/java/org/isoron/uhabits/{ => core}/utils/StringUtils.java (96%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/commands/ArchiveHabitsCommandTest.java (95%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/commands/ChangeHabitColorCommandTest.java (96%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/commands/CreateHabitCommandTest.java (96%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/commands/CreateRepetitionCommandTest.java (92%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/commands/DeleteHabitsCommandTest.java (96%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/commands/EditHabitCommandTest.java (97%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/commands/ToggleRepetitionCommandTest.java (94%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/commands/UnarchiveHabitsCommandTest.java (96%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/models/CheckmarkListTest.java (97%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/models/HabitFixtures.java (97%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/models/HabitListTest.java (98%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/models/HabitTest.java (98%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/models/RepetitionListTest.java (98%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/models/ScoreListTest.java (98%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/models/ScoreTest.java (95%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/models/StreakListTest.java (98%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/models/WeekdayListTest.java (97%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/tasks/SingleThreadTaskRunnerTest.java (97%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/ui/screens/habits/list/HabitCardListCacheTest.java (96%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/ui/screens/habits/list/HintListTest.java (93%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/ui/screens/habits/list/ListHabitsBehaviorTest.java (94%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java (95%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java (97%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java (95%) rename uhabits-core/src/test/java/org/isoron/uhabits/{ => core}/utils/DateUtilsTest.java (99%) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java index 2588208f1..a25bd202b 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java @@ -21,8 +21,9 @@ package org.isoron.uhabits; import org.isoron.androidbase.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.tasks.*; import org.isoron.uhabits.models.sqlite.*; -import org.isoron.uhabits.tasks.*; import dagger.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java index 9ea0dec04..7304a16bf 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java @@ -30,9 +30,10 @@ import android.util.*; import junit.framework.*; import org.isoron.androidbase.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.tasks.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.utils.*; import org.junit.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java index 2237abac1..b63e3ed65 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java @@ -24,7 +24,6 @@ import android.support.annotation.*; import android.view.*; import android.widget.*; -import org.isoron.androidbase.activities.*; import org.isoron.androidbase.utils.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.*; @@ -36,7 +35,6 @@ import static android.os.Build.VERSION.*; import static android.os.Build.VERSION_CODES.KITKAT; import static android.os.Build.VERSION_CODES.LOLLIPOP; import static android.view.View.MeasureSpec.*; -import static junit.framework.Assert.*; public class BaseViewTest extends BaseAndroidTest { diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java index 288e45c3f..b8641c46e 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java @@ -19,8 +19,8 @@ package org.isoron.uhabits; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.DateUtils; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.DateUtils; public class HabitFixtures { diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java index b7e5f3b1f..78ae34631 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java @@ -24,7 +24,7 @@ import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.androidbase.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java index c208cadff..579cd08bb 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java @@ -23,7 +23,8 @@ import android.support.test.filters.*; import android.support.test.runner.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.utils.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java index 563a3c2ec..69560a38c 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java @@ -23,7 +23,7 @@ import android.support.test.filters.*; import android.support.test.runner.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java index d3ee2f3b8..cbcfa350f 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java @@ -23,7 +23,7 @@ import android.support.test.filters.*; import android.support.test.runner.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java index 8c5327503..43eb981db 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java @@ -23,7 +23,8 @@ import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.utils.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java index 47b9e7c04..da2df3138 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java @@ -23,7 +23,7 @@ import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java index f26cd3b33..de5823212 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java @@ -24,10 +24,10 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.model.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.ui.*; +import org.isoron.uhabits.core.ui.screens.habits.list.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.ui.*; -import org.isoron.uhabits.ui.screens.habits.list.*; import org.junit.*; import org.mockito.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java index 1be789c0d..31857e61c 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java @@ -27,11 +27,12 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.*; import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.core.commands.*; import org.isoron.uhabits.intents.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.ui.*; +import org.isoron.uhabits.core.ui.callbacks.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.ui.*; -import org.isoron.uhabits.ui.callbacks.*; import org.junit.*; import org.junit.runner.*; import org.junit.runners.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java index be4ddb02e..864adbb77 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.activities.habits.list.controllers; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.preferences.*; import org.junit.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java index b5626b448..8b0886c0b 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java @@ -20,9 +20,9 @@ package org.isoron.uhabits.activities.habits.list.controllers; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.activities.habits.list.views.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; import org.junit.*; import static org.mockito.Mockito.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java index c64b7fb91..528d3675b 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.activities.habits.list.controllers; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.model.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.activities.habits.list.views.*; import org.junit.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.java index a3f933c4f..e096922a0 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.java @@ -23,7 +23,7 @@ import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.java index 22b69754a..eb7439847 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.java @@ -22,8 +22,8 @@ package org.isoron.uhabits.activities.habits.list.views; import android.support.test.runner.AndroidJUnit4; import android.test.suitebuilder.annotation.*; -import org.isoron.uhabits.models.Checkmark; -import org.isoron.uhabits.models.Habit; +import org.isoron.uhabits.core.models.Checkmark; +import org.isoron.uhabits.core.models.Habit; import org.isoron.uhabits.BaseViewTest; import org.isoron.uhabits.utils.ColorUtils; import org.junit.Before; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.java index 172ce43e5..651e89f91 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.java @@ -23,8 +23,8 @@ import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java index 1147748d9..898bdab0e 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java @@ -23,8 +23,8 @@ import android.support.test.filters.*; import android.support.test.runner.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.utils.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java index cced99f6d..9f8e5525a 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java @@ -23,12 +23,12 @@ import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.ui.screens.habits.list.*; +import org.isoron.uhabits.core.ui.screens.habits.list.*; import org.junit.*; import org.junit.runner.*; -import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.*; @RunWith(AndroidJUnit4.class) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java index 2e37d1c10..0b3e7a8c3 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java @@ -24,7 +24,7 @@ import android.test.suitebuilder.annotation.*; import android.view.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java index 0a9d69291..91bffd89a 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java @@ -24,7 +24,7 @@ import android.test.suitebuilder.annotation.*; import android.view.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java index 0e54b7adf..399cdf8a0 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java @@ -24,7 +24,7 @@ import android.test.suitebuilder.annotation.*; import android.view.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java index c93d0b1bd..16f3ae61b 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java @@ -24,7 +24,7 @@ import android.test.suitebuilder.annotation.*; import android.view.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java index ae12e3819..ef1a2a9a1 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java @@ -24,7 +24,7 @@ import android.test.suitebuilder.annotation.*; import android.view.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java index 09cfb02b2..74564d8c6 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java @@ -24,7 +24,7 @@ import android.test.suitebuilder.annotation.*; import android.view.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/commands/CommandParserTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/commands/CommandParserTest.java similarity index 97% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/commands/CommandParserTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/core/commands/CommandParserTest.java index c849a6776..d8eca8ea1 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/commands/CommandParserTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/commands/CommandParserTest.java @@ -17,13 +17,14 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import android.support.annotation.*; import org.hamcrest.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.core.models.*; import org.json.*; import org.junit.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/HabitsCSVExporterTest.java similarity index 96% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/HabitsCSVExporterTest.java index c784f2a9a..48f173bc3 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/HabitsCSVExporterTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.io; +package org.isoron.uhabits.core.io; import android.content.*; import android.support.test.*; @@ -26,7 +26,7 @@ import android.test.suitebuilder.annotation.*; import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; @@ -34,8 +34,6 @@ import java.io.*; import java.util.*; import java.util.zip.*; -import static junit.framework.Assert.*; - @RunWith(AndroidJUnit4.class) @MediumTest public class HabitsCSVExporterTest extends BaseAndroidTest diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/ImportTest.java similarity index 97% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/ImportTest.java index 073e0799c..d1ef5f053 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/ImportTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.io; +package org.isoron.uhabits.core.io; import android.content.*; import android.support.test.*; @@ -26,8 +26,9 @@ import android.test.suitebuilder.annotation.*; import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; +import org.isoron.uhabits.io.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/HabitListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/HabitListTest.java similarity index 98% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/models/HabitListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/HabitListTest.java index 92f71a3f4..28e5cffc7 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/HabitListTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/HabitListTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; @@ -30,11 +30,10 @@ import org.junit.runner.*; import java.io.*; import java.util.*; -import static junit.framework.Assert.*; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.core.IsEqual.equalTo; -import static org.isoron.uhabits.models.HabitList.Order.*; +import static org.isoron.uhabits.core.models.HabitList.Order.*; @SuppressWarnings("JavaDoc") @RunWith(AndroidJUnit4.class) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/HabitRecordTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/HabitRecordTest.java similarity index 96% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/HabitRecordTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/HabitRecordTest.java index d701056df..4435bb961 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/HabitRecordTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/HabitRecordTest.java @@ -17,13 +17,13 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models.sqlite; +package org.isoron.uhabits.core.models.sqlite; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.models.sqlite.records.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteCheckmarkListTest.java similarity index 96% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteCheckmarkListTest.java index f4f779950..1817c338c 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteCheckmarkListTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models.sqlite; +package org.isoron.uhabits.core.models.sqlite; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; @@ -25,16 +25,16 @@ import android.test.suitebuilder.annotation.*; import com.activeandroid.query.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.models.sqlite.records.*; -import org.isoron.uhabits.utils.*; import org.junit.*; import org.junit.runner.*; import java.util.*; -import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.*; @RunWith(AndroidJUnit4.class) @MediumTest diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteHabitListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitListTest.java similarity index 97% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteHabitListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitListTest.java index 5308fc61c..211a6838d 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteHabitListTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitListTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models.sqlite; +package org.isoron.uhabits.core.models.sqlite; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; @@ -25,7 +25,8 @@ import android.test.suitebuilder.annotation.*; import com.activeandroid.query.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.models.sqlite.*; import org.isoron.uhabits.models.sqlite.records.*; import org.junit.*; import org.junit.rules.*; @@ -33,7 +34,6 @@ import org.junit.runner.*; import java.util.*; -import static junit.framework.Assert.*; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.core.IsEqual.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionListTest.java similarity index 95% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionListTest.java index 08eea948b..3964aca1d 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionListTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models.sqlite; +package org.isoron.uhabits.core.models.sqlite; import android.support.annotation.*; import android.support.test.runner.*; @@ -26,18 +26,18 @@ import android.test.suitebuilder.annotation.*; import com.activeandroid.query.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.models.sqlite.records.*; -import org.isoron.uhabits.utils.*; import org.junit.*; import org.junit.runner.*; import java.util.*; -import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.core.IsNot.not; -import static org.isoron.uhabits.models.Checkmark.*; +import static org.isoron.uhabits.core.models.Checkmark.*; @RunWith(AndroidJUnit4.class) @MediumTest diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteScoreListTest.java similarity index 96% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteScoreListTest.java index a4214933c..f71172894 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteScoreListTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models.sqlite; +package org.isoron.uhabits.core.models.sqlite; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; @@ -25,9 +25,9 @@ import android.test.suitebuilder.annotation.*; import com.activeandroid.query.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.models.sqlite.records.*; -import org.isoron.uhabits.utils.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportCSVTaskTest.java similarity index 94% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportCSVTaskTest.java index 7c2d3a641..1f9664960 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportCSVTaskTest.java @@ -17,20 +17,19 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks; +package org.isoron.uhabits.core.tasks; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; import java.io.*; import java.util.*; -import static junit.framework.Assert.*; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.core.IsNot.not; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportDBTaskTest.java similarity index 92% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportDBTaskTest.java index c2aaf6514..316486f97 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportDBTaskTest.java @@ -17,20 +17,18 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks; +package org.isoron.uhabits.core.tasks; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.tasks.android.*; +import org.isoron.uhabits.tasks.*; import org.junit.*; import org.junit.runner.*; import java.io.*; -import static junit.framework.Assert.*; - @RunWith(AndroidJUnit4.class) @MediumTest public class ExportDBTaskTest extends BaseAndroidTest diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/utils/ReminderSchedulerTest.java similarity index 96% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/core/utils/ReminderSchedulerTest.java index 7ee249a1f..c9ea5b6be 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/utils/ReminderSchedulerTest.java @@ -17,14 +17,15 @@ * with this program. If not, see . */ -package org.isoron.uhabits.utils; +package org.isoron.uhabits.core.utils; import android.app.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.intents.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.utils.*; import org.junit.*; import java.util.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java index 631f2d396..cfb914f9f 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java @@ -28,7 +28,7 @@ import com.getpebble.android.kit.*; import com.getpebble.android.kit.util.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.receivers.*; import org.json.*; import org.junit.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java index 00fa88e18..7e4c8ddd1 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java @@ -20,8 +20,9 @@ package org.isoron.uhabits.receivers; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.notifications.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.utils.*; import org.junit.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java index ee9e4a826..e51f222d1 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java @@ -20,16 +20,16 @@ package org.isoron.uhabits.receivers; import org.isoron.uhabits.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.notifications.*; -import org.isoron.uhabits.ui.widgets.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.ui.widgets.*; +import org.isoron.uhabits.core.utils.*; import org.junit.*; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.core.IsEqual.*; -import static org.isoron.uhabits.models.Checkmark.*; +import static org.isoron.uhabits.core.models.Checkmark.*; import static org.mockito.Mockito.*; public class WidgetControllerTest extends BaseAndroidTest diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java index 9e25e12ef..130ec3b68 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java @@ -24,13 +24,13 @@ import android.test.suitebuilder.annotation.*; import android.widget.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.CoreMatchers.*; -import static org.isoron.uhabits.models.Checkmark.*; +import static org.isoron.uhabits.core.models.Checkmark.*; @RunWith(AndroidJUnit4.class) @MediumTest diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java index 8f8d9c507..dd9d4304c 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java @@ -24,7 +24,7 @@ import android.test.suitebuilder.annotation.*; import android.widget.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java index 16c45c408..61c8c3528 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java @@ -24,7 +24,7 @@ import android.test.suitebuilder.annotation.*; import android.widget.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java index f4d5074b6..82f2c451f 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java @@ -24,7 +24,7 @@ import android.test.suitebuilder.annotation.*; import android.widget.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java index 1c7639bb2..eb4cbbe90 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java @@ -24,7 +24,7 @@ import android.test.suitebuilder.annotation.*; import android.widget.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java index d339fb3d6..7ff714856 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java @@ -23,7 +23,7 @@ import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java b/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java index 52657667a..6f6df9168 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java @@ -28,9 +28,10 @@ import android.view.*; import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.ui.screens.habits.list.*; -import org.isoron.uhabits.ui.screens.habits.show.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.ui.screens.habits.list.*; +import org.isoron.uhabits.core.ui.screens.habits.show.*; +import org.isoron.uhabits.core.utils.*; import java.io.*; import java.lang.Process; diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java index ce1ee0c3d..761d96926 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java @@ -21,7 +21,7 @@ package org.isoron.androidbase.activities; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.dialogs.*; -import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.core.ui.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java index ffcb238f1..adac8f2e5 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java @@ -22,7 +22,7 @@ package org.isoron.androidbase.activities; import android.content.*; import org.isoron.uhabits.activities.*; -import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.core.ui.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseExceptionHandler.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseExceptionHandler.java index 12738f2f9..d2df1f594 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseExceptionHandler.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseExceptionHandler.java @@ -23,7 +23,7 @@ import android.support.annotation.*; import org.isoron.androidbase.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.models.sqlite.*; public class BaseExceptionHandler implements Thread.UncaughtExceptionHandler diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java index adbed1b23..d86aafa00 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java +++ b/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java @@ -27,7 +27,7 @@ import android.view.*; import android.widget.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.core.ui.*; import org.isoron.uhabits.utils.*; import static android.os.Build.VERSION.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitLogger.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitLogger.java index fb781c273..81e6574cf 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitLogger.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitLogger.java @@ -22,8 +22,9 @@ package org.isoron.uhabits; import android.support.annotation.*; import android.util.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import java.text.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java index aef637f24..caaf25957 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java @@ -27,8 +27,8 @@ import com.activeandroid.*; import org.isoron.androidbase.*; import org.isoron.uhabits.models.sqlite.*; import org.isoron.uhabits.notifications.*; +import org.isoron.uhabits.core.tasks.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java index 8b819c99e..3e4af09b1 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java @@ -22,18 +22,21 @@ package org.isoron.uhabits; import android.content.*; import org.isoron.androidbase.*; -import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.commands.*; import org.isoron.uhabits.intents.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.io.*; -import org.isoron.uhabits.models.*; import org.isoron.uhabits.models.sqlite.*; import org.isoron.uhabits.notifications.*; +import org.isoron.uhabits.core.preferences.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.sync.*; +import org.isoron.uhabits.core.tasks.*; +import org.isoron.uhabits.core.ui.*; +import org.isoron.uhabits.core.ui.screens.habits.list.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.tasks.*; -import org.isoron.uhabits.tasks.android.*; -import org.isoron.uhabits.ui.*; -import org.isoron.uhabits.ui.screens.habits.list.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java index 734b78110..db1a0cdcf 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.java @@ -19,9 +19,11 @@ package org.isoron.uhabits; +import org.isoron.uhabits.core.*; import org.isoron.uhabits.notifications.*; +import org.isoron.uhabits.core.preferences.*; +import org.isoron.uhabits.core.ui.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.ui.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.java index 19386fc62..295182d02 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.java @@ -23,8 +23,8 @@ import android.support.annotation.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.core.preferences.*; +import org.isoron.uhabits.core.ui.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java index 33689dbe2..b99bd15ed 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java @@ -23,7 +23,7 @@ import android.os.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.ui.screens.about.*; +import org.isoron.uhabits.core.ui.screens.about.*; /** * Activity that allows the user to see information about the app itself. diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java index 29db69229..db7583b2e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java @@ -26,7 +26,7 @@ import android.widget.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.BuildConfig; import org.isoron.uhabits.R; -import org.isoron.uhabits.ui.screens.about.*; +import org.isoron.uhabits.core.ui.screens.about.*; import org.isoron.uhabits.utils.*; import butterknife.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java index 2f915dc89..de7037dfc 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java @@ -24,7 +24,7 @@ import android.widget.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.intents.*; -import org.isoron.uhabits.ui.screens.about.*; +import org.isoron.uhabits.core.ui.screens.about.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java index 7ca527ff5..8e58acded 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java @@ -19,7 +19,7 @@ package org.isoron.uhabits.activities.common.dialogs; -import org.isoron.uhabits.ui.callbacks.*; +import org.isoron.uhabits.core.ui.callbacks.*; import org.isoron.uhabits.utils.*; /** diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java index 1b8c838cf..445cfb8d0 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java @@ -27,7 +27,7 @@ import com.google.auto.factory.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.R; -import org.isoron.uhabits.ui.callbacks.*; +import org.isoron.uhabits.core.ui.callbacks.*; import butterknife.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java index 53b079b47..19d4afb86 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java @@ -29,8 +29,8 @@ import android.util.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.tasks.*; import org.isoron.uhabits.utils.*; import static org.isoron.uhabits.utils.InterfaceUtils.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.java index 08b754df7..91f2012b9 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.java @@ -26,8 +26,8 @@ import android.support.v7.app.AlertDialog; import android.support.v7.app.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; /** * Dialog that allows the user to pick one or more days of the week. diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java index 6dab1f948..fe5bbae42 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java @@ -26,7 +26,8 @@ import android.util.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.utils.*; import java.text.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java index 444d359d3..9f6400eeb 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java @@ -25,6 +25,7 @@ import android.support.annotation.*; import android.util.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.utils.*; import java.text.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HabitChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HabitChart.java index cd74cf15c..c10a1f466 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HabitChart.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HabitChart.java @@ -19,7 +19,7 @@ package org.isoron.uhabits.activities.common.views; -import org.isoron.uhabits.models.Habit; +import org.isoron.uhabits.core.models.Habit; public interface HabitChart { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java index 6abf7cfb9..a76c8d208 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java @@ -27,12 +27,13 @@ import android.util.*; import android.view.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.utils.*; import java.text.*; import java.util.*; -import static org.isoron.uhabits.models.Checkmark.*; +import static org.isoron.uhabits.core.models.Checkmark.*; import static org.isoron.uhabits.utils.InterfaceUtils.*; public class HistoryChart extends ScrollableChart diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java index f6ee889f7..f2d540517 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java @@ -25,7 +25,8 @@ import android.support.annotation.*; import android.util.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.utils.*; import java.text.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/StreakChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/StreakChart.java index e5eae8da9..361828c05 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/StreakChart.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/StreakChart.java @@ -26,7 +26,8 @@ import android.view.*; import android.view.ViewGroup.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.utils.*; import java.text.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java index 40be10cfb..5eb74bf2d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java @@ -33,14 +33,14 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.views.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.preferences.*; import butterknife.*; import static android.view.View.*; -import static org.isoron.uhabits.activities.ThemeSwitcher.THEME_LIGHT; +import static org.isoron.uhabits.core.ui.ThemeSwitcher.THEME_LIGHT; public class EditHabitDialog extends AppCompatDialogFragment { @@ -77,7 +77,7 @@ public class EditHabitDialog extends AppCompatDialogFragment @Override public int getTheme() { - AppComponent component = + HabitsComponent component = ((HabitsApplication) getContext().getApplicationContext()).getComponent(); if(component.getPreferences().getTheme() == THEME_LIGHT) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialogFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialogFactory.java index 7ca3ef391..a91c3b14a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialogFactory.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialogFactory.java @@ -22,7 +22,7 @@ package org.isoron.uhabits.activities.habits.edit; import android.os.*; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/FrequencyPanel.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/FrequencyPanel.java index cb4f86d56..aac5d47e7 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/FrequencyPanel.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/FrequencyPanel.java @@ -28,7 +28,7 @@ import android.view.*; import android.widget.*; import org.isoron.uhabits.R; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import butterknife.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java index 5c07aab0f..6d2ac6848 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java @@ -29,7 +29,7 @@ import android.widget.*; import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.*; import butterknife.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java index 4c7287e5a..6d2c399e7 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java @@ -31,7 +31,7 @@ import com.android.datetimepicker.time.*; import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.*; import butterknife.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java index 435576dca..6644fca1c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.java @@ -27,8 +27,8 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.sync.*; -import org.isoron.uhabits.ui.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.ui.*; +import org.isoron.uhabits.core.utils.*; /** * Activity that allows the user to see and modify the list of habits. diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java index 796667c55..a9e49208f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java @@ -25,10 +25,10 @@ import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.tasks.*; +import org.isoron.uhabits.core.ui.screens.habits.list.*; import org.isoron.uhabits.tasks.*; -import org.isoron.uhabits.tasks.android.*; -import org.isoron.uhabits.ui.screens.habits.list.*; import java.io.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java index 9752792fd..8eabf2192 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.java @@ -24,9 +24,9 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.ui.*; -import org.isoron.uhabits.ui.screens.habits.list.*; +import org.isoron.uhabits.core.preferences.*; +import org.isoron.uhabits.core.ui.*; +import org.isoron.uhabits.core.ui.screens.habits.list.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java index e1699c347..275e4850e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.java @@ -23,7 +23,7 @@ package org.isoron.uhabits.activities.habits.list; import org.isoron.androidbase.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.activities.habits.list.model.*; -import org.isoron.uhabits.ui.screens.habits.list.*; +import org.isoron.uhabits.core.ui.screens.habits.list.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java index e9ebfc600..92656a404 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.java @@ -31,9 +31,9 @@ import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.activities.habits.list.views.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.tasks.*; -import org.isoron.uhabits.ui.screens.habits.list.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.tasks.*; +import org.isoron.uhabits.core.ui.screens.habits.list.*; import org.isoron.uhabits.utils.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java index c52f828aa..1d6c6dbd6 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java @@ -34,13 +34,13 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.*; import org.isoron.uhabits.activities.habits.list.controllers.*; -import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.core.commands.*; import org.isoron.uhabits.intents.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.ui.*; +import org.isoron.uhabits.core.ui.callbacks.*; +import org.isoron.uhabits.core.ui.screens.habits.list.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.ui.*; -import org.isoron.uhabits.ui.callbacks.*; -import org.isoron.uhabits.ui.screens.habits.list.*; import org.isoron.uhabits.utils.*; import java.io.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java index d4f240693..6a1334b04 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.java @@ -26,8 +26,8 @@ import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.ui.screens.habits.list.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.ui.screens.habits.list.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonController.java index b8b7e04a4..735e53a62 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonController.java @@ -24,7 +24,7 @@ import android.support.annotation.*; import com.google.auto.factory.*; import org.isoron.uhabits.activities.habits.list.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.preferences.*; @AutoFactory diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardController.java index aa29f37c3..b4ea81ece 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardController.java @@ -22,7 +22,7 @@ package org.isoron.uhabits.activities.habits.list.controllers; import android.support.annotation.*; import org.isoron.uhabits.activities.habits.list.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; public class HabitCardController implements HabitCardView.Controller { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java index de03d3c26..375cfa393 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java @@ -24,7 +24,7 @@ import android.support.annotation.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.activities.habits.list.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/NumberButtonController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/NumberButtonController.java index 0198625d3..972d9895b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/NumberButtonController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/NumberButtonController.java @@ -24,7 +24,7 @@ import android.support.annotation.*; import com.google.auto.factory.*; import org.isoron.uhabits.activities.habits.list.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.preferences.*; @AutoFactory diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java index ebdda50c8..b2b3c86a4 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/model/HabitCardListAdapter.java @@ -26,10 +26,10 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.activities.habits.list.*; import org.isoron.uhabits.activities.habits.list.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.ui.screens.habits.list.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.ui.screens.habits.list.*; -import org.isoron.uhabits.utils.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.java index 5b34e1e6a..478ef3597 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.java @@ -32,7 +32,7 @@ import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.utils.*; import static android.view.View.MeasureSpec.*; -import static org.isoron.uhabits.models.Checkmark.*; +import static org.isoron.uhabits.core.models.Checkmark.*; import static org.isoron.uhabits.utils.AttributeSetUtils.*; import static org.isoron.uhabits.utils.InterfaceUtils.getDimension; import static org.isoron.uhabits.utils.InterfaceUtils.getFontAwesome; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java index 16cc528e2..301317d23 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java @@ -27,9 +27,9 @@ import android.widget.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.*; import org.isoron.uhabits.activities.habits.list.controllers.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.utils.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java index f0a2852d4..1f0b538fd 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java @@ -30,7 +30,7 @@ import android.view.*; import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java index 0200471a9..5aeeae9c7 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java @@ -31,7 +31,8 @@ import android.widget.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.utils.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java index 733e8fd64..b126742f1 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.java @@ -27,6 +27,7 @@ import android.util.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.views.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.utils.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java index 0ca67151b..1848b4827 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.java @@ -29,7 +29,7 @@ import android.widget.FrameLayout; import android.widget.TextView; import org.isoron.uhabits.R; -import org.isoron.uhabits.ui.screens.habits.list.HintList; +import org.isoron.uhabits.core.ui.screens.habits.list.HintList; import java.util.Random; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java index 3bbcf95f3..0f8ca0991 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java @@ -27,9 +27,9 @@ import android.widget.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.*; import org.isoron.uhabits.activities.habits.list.controllers.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.utils.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java index 5c5e8e003..72287711c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java @@ -26,7 +26,7 @@ import android.support.annotation.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; /** * Activity that allows the user to see more information about a single habit. diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java index e91e217c5..4cbf41b13 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitController.java @@ -23,7 +23,7 @@ import android.support.annotation.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.show.views.*; -import org.isoron.uhabits.ui.screens.habits.show.*; +import org.isoron.uhabits.core.ui.screens.habits.show.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java index 966643dbf..cca8d7a0e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java @@ -23,8 +23,8 @@ import android.support.annotation.*; import org.isoron.androidbase.*; import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.ui.screens.habits.show.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.ui.screens.habits.show.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java index 986c4c9a8..28e899118 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java @@ -27,7 +27,7 @@ import android.support.v7.widget.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.R; import org.isoron.uhabits.activities.habits.show.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java index 4d8f3e040..f5b3bf622 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java @@ -25,8 +25,8 @@ import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.ui.screens.habits.show.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.ui.screens.habits.show.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java index 32f039f7b..506e381ff 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java @@ -24,7 +24,7 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.ui.screens.habits.show.*; +import org.isoron.uhabits.core.ui.screens.habits.show.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java index edf876f33..a2a2ae5e4 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java @@ -27,8 +27,9 @@ import android.widget.*; import org.isoron.uhabits.*; import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.tasks.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.utils.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCard.java index d9b6c2786..629aa340e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCard.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCard.java @@ -27,8 +27,8 @@ import android.widget.*; import org.isoron.uhabits.*; import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.tasks.*; import org.isoron.uhabits.utils.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java index 0c31112d6..255b518e1 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java @@ -24,8 +24,8 @@ import android.support.annotation.*; import android.util.*; import android.widget.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.models.memory.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.models.memory.*; public abstract class HabitCard extends LinearLayout implements ModelObservable.Listener diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java index 248285cbd..4ac90b5af 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java @@ -27,8 +27,8 @@ import android.widget.*; import org.isoron.uhabits.*; import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.tasks.*; import org.isoron.uhabits.utils.*; import butterknife.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java index 080c8e4c6..f98d738e4 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java @@ -27,8 +27,9 @@ import android.widget.*; import org.isoron.uhabits.*; import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.tasks.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.utils.*; import butterknife.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java index d40c61cd5..65c242c9d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java @@ -27,9 +27,10 @@ import android.widget.*; import org.isoron.uhabits.*; import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.tasks.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.tasks.*; import org.isoron.uhabits.utils.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java index d1607e973..bf5c24ff1 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java @@ -27,8 +27,8 @@ import android.widget.*; import org.isoron.uhabits.*; import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.tasks.*; import org.isoron.uhabits.utils.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java index 6a6bbd22e..07b712f73 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java @@ -26,7 +26,7 @@ import android.util.*; import android.widget.*; import org.isoron.uhabits.R; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.*; import butterknife.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.java index 3ca38f919..c0ec8a2a3 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.java @@ -23,7 +23,7 @@ import android.os.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; public class EditSettingActivity extends BaseActivity { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingController.java b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingController.java index 478170496..e18b2c367 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingController.java @@ -25,7 +25,7 @@ import android.os.*; import android.support.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import static org.isoron.uhabits.automation.FireSettingReceiver.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.java index bcd0061b8..80ab1632a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.java @@ -27,7 +27,7 @@ import android.widget.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.R; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java index cfc122a17..d16ce1d9c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.java @@ -23,10 +23,10 @@ import android.content.*; import android.os.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.receivers.*; -import org.isoron.uhabits.ui.widgets.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.ui.widgets.*; +import org.isoron.uhabits.core.utils.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java b/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java index 240553a68..8c228a716 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java @@ -23,8 +23,8 @@ import android.support.annotation.*; import com.google.gson.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.models.*; import org.json.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentFactory.java index 0e6e41b9b..366483156 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentFactory.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentFactory.java @@ -28,7 +28,7 @@ import org.isoron.uhabits.activities.about.*; import org.isoron.uhabits.activities.habits.show.*; import org.isoron.uhabits.activities.intro.*; import org.isoron.uhabits.activities.settings.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentParser.java b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentParser.java index a6dc23e3f..2ae83cce0 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentParser.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentParser.java @@ -23,9 +23,9 @@ import android.content.*; import android.net.*; import android.support.annotation.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.java b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.java index 5757a4b83..bd8cc5d77 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.java @@ -25,7 +25,7 @@ import android.os.*; import android.support.annotation.*; import org.isoron.androidbase.*; -import org.isoron.uhabits.*; +import org.isoron.uhabits.core.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java index cb3a8867c..26f87fe76 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.java @@ -25,8 +25,8 @@ import android.net.*; import android.support.annotation.*; import org.isoron.androidbase.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.receivers.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/io/AbstractImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/AbstractImporter.java index d20979e78..28f5e028a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/io/AbstractImporter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/io/AbstractImporter.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.io; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import java.io.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/io/GenericImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/GenericImporter.java index dcdf9e354..6c843f31d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/io/GenericImporter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/io/GenericImporter.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.io; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import java.io.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/io/HabitBullCSVImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/HabitBullCSVImporter.java index 42fb9b09b..891d5bbc9 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/io/HabitBullCSVImporter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/io/HabitBullCSVImporter.java @@ -24,8 +24,8 @@ import android.support.annotation.*; import com.activeandroid.*; import com.opencsv.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import java.io.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java index 1c7559e8a..3cd4b7cb0 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/io/LoopDBImporter.java @@ -30,7 +30,7 @@ import com.activeandroid.*; import org.isoron.androidbase.*; import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.DatabaseUtils; import java.io.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/io/RewireDBImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/RewireDBImporter.java index 0865671b7..7082ed1bd 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/io/RewireDBImporter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/io/RewireDBImporter.java @@ -23,9 +23,9 @@ import android.database.*; import android.database.sqlite.*; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.DatabaseUtils; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; import java.io.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/io/TickmateDBImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/TickmateDBImporter.java index 2282f7293..73a8ba6a0 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/io/TickmateDBImporter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/io/TickmateDBImporter.java @@ -23,9 +23,9 @@ import android.database.*; import android.database.sqlite.*; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.DatabaseUtils; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; import java.io.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLModelFactory.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLModelFactory.java index 7cdbcbc4f..839a71aec 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLModelFactory.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLModelFactory.java @@ -19,8 +19,8 @@ package org.isoron.uhabits.models.sqlite; -import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.models.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkList.java index 7c9b552e0..a532e1018 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkList.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkList.java @@ -26,9 +26,9 @@ import android.support.annotation.Nullable; import com.activeandroid.*; import com.activeandroid.query.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.models.sqlite.records.*; -import org.isoron.uhabits.utils.*; import org.jetbrains.annotations.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java index c3449f65d..6f9106cbb 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteHabitList.java @@ -25,7 +25,7 @@ import com.activeandroid.query.*; import com.activeandroid.util.*; import org.apache.commons.lang3.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.models.sqlite.records.*; import java.util.*; @@ -261,7 +261,7 @@ public class SQLiteHabitList extends HabitList } } - protected synchronized List toList() + public synchronized List toList() { String query = buildSelectQuery(); List recordList = sqlite.query(query, null); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionList.java index 2794950f5..7641b356d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionList.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionList.java @@ -19,15 +19,15 @@ package org.isoron.uhabits.models.sqlite; -import android.database.DatabaseUtils; -import android.database.sqlite.SQLiteDatabase; +import android.database.*; +import android.database.sqlite.*; import android.support.annotation.*; import android.support.annotation.Nullable; -import com.activeandroid.Cache; +import com.activeandroid.*; import com.activeandroid.query.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.models.sqlite.records.*; import org.jetbrains.annotations.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteScoreList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteScoreList.java index 6479a58fc..4474db0b0 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteScoreList.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteScoreList.java @@ -26,7 +26,7 @@ import android.support.annotation.Nullable; import com.activeandroid.*; import com.activeandroid.query.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.models.sqlite.records.*; import org.jetbrains.annotations.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteStreakList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteStreakList.java index 8cf10b49f..43a6e0e9d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteStreakList.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteStreakList.java @@ -24,7 +24,8 @@ import android.support.annotation.Nullable; import com.activeandroid.query.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.models.sqlite.records.*; import org.isoron.uhabits.utils.*; import org.jetbrains.annotations.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/CheckmarkRecord.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/CheckmarkRecord.java index 6938b505d..74c8e8a6d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/CheckmarkRecord.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/CheckmarkRecord.java @@ -24,7 +24,7 @@ import android.database.*; import com.activeandroid.*; import com.activeandroid.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; /** * The SQLite database record corresponding to a {@link Checkmark}. diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/HabitRecord.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/HabitRecord.java index 6edafacda..5cd02bb65 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/HabitRecord.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/HabitRecord.java @@ -28,7 +28,7 @@ import com.activeandroid.annotation.*; import com.activeandroid.query.*; import com.activeandroid.util.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.DatabaseUtils; import java.lang.reflect.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/RepetitionRecord.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/RepetitionRecord.java index 874fd0954..b10b7c73e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/RepetitionRecord.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/RepetitionRecord.java @@ -24,7 +24,7 @@ import android.database.*; import com.activeandroid.*; import com.activeandroid.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; /** * The SQLite database record corresponding to a {@link Repetition}. diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/ScoreRecord.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/ScoreRecord.java index 69969edfb..0907d3115 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/ScoreRecord.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/ScoreRecord.java @@ -24,7 +24,7 @@ import android.database.*; import com.activeandroid.*; import com.activeandroid.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; /** * The SQLite database record corresponding to a Score. diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/StreakRecord.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/StreakRecord.java index 1638089db..a16878ea3 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/StreakRecord.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/records/StreakRecord.java @@ -24,7 +24,7 @@ import android.database.*; import com.activeandroid.*; import com.activeandroid.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import java.lang.reflect.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.java b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.java index 4bb86c05a..73039b6e6 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.java @@ -28,13 +28,14 @@ import android.support.v4.app.NotificationCompat.*; import org.isoron.androidbase.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.commands.*; import org.isoron.uhabits.intents.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.tasks.*; +import org.isoron.uhabits.core.ui.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.tasks.*; -import org.isoron.uhabits.ui.*; -import org.isoron.uhabits.utils.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/RingtoneManager.java b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/RingtoneManager.java index 622b25f8c..ea4f4ff85 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/RingtoneManager.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/RingtoneManager.java @@ -28,6 +28,7 @@ import android.support.annotation.*; import org.isoron.androidbase.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.core.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java index d8961ac9a..76aad2696 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java @@ -24,8 +24,10 @@ import android.preference.*; import org.isoron.androidbase.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.preferences.*; +import org.isoron.uhabits.core.ui.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java index 0fb10a8d4..20e9b32e5 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/WidgetPreferences.java @@ -23,8 +23,8 @@ import android.content.*; import android.preference.*; import org.isoron.androidbase.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.models.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java index aa44e3faf..85d3140e6 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/PebbleReceiver.java @@ -28,12 +28,12 @@ import com.getpebble.android.kit.PebbleKit.*; import com.getpebble.android.kit.util.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.sync.*; -import org.isoron.uhabits.tasks.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.tasks.*; +import org.isoron.uhabits.core.utils.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java index fff5cb8bc..897972206 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java @@ -21,8 +21,9 @@ package org.isoron.uhabits.receivers; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.notifications.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.utils.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java index 5cf0c2600..e6187feaf 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java @@ -23,8 +23,8 @@ import android.content.*; import android.util.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java index 327952110..de5ebbcc2 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java @@ -26,7 +26,7 @@ import org.isoron.uhabits.*; import org.isoron.uhabits.intents.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.sync.*; -import org.isoron.uhabits.ui.widgets.*; +import org.isoron.uhabits.core.ui.widgets.*; import dagger.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java index c851df87d..189a60ade 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java @@ -25,6 +25,8 @@ import android.util.*; import org.isoron.androidbase.*; import org.isoron.uhabits.*; import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.commands.*; import org.isoron.uhabits.preferences.*; import org.json.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/AndroidTaskRunner.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java similarity index 96% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/AndroidTaskRunner.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java index bb96eb05c..7b60834ba 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/AndroidTaskRunner.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java @@ -17,12 +17,12 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks.android; +package org.isoron.uhabits.tasks; import android.os.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.tasks.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ExportDBTask.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java similarity index 96% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ExportDBTask.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java index 3f9ef1180..013027925 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ExportDBTask.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks.android; +package org.isoron.uhabits.tasks; import android.content.*; import android.support.annotation.*; @@ -25,7 +25,7 @@ import android.support.annotation.*; import com.google.auto.factory.*; import org.isoron.androidbase.*; -import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.core.tasks.*; import org.isoron.uhabits.utils.*; import java.io.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ImportDataTask.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java similarity index 96% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ImportDataTask.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java index 560795f99..a23343a2c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/ImportDataTask.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java @@ -17,14 +17,14 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks.android; +package org.isoron.uhabits.tasks; import android.support.annotation.*; import com.google.auto.factory.*; +import org.isoron.uhabits.core.tasks.*; import org.isoron.uhabits.io.*; -import org.isoron.uhabits.tasks.*; import java.io.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/package-info.java similarity index 90% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/package-info.java rename to uhabits-android/src/main/java/org/isoron/uhabits/tasks/package-info.java index b70215e3e..5a175d814 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/android/package-info.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/package-info.java @@ -19,6 +19,6 @@ /** * Provides async tasks for useful operations such as {@link - * org.isoron.uhabits.tasks.ExportCSVTask}. + * org.isoron.uhabits.core.tasks.ExportCSVTask}. */ -package org.isoron.uhabits.tasks.android; \ No newline at end of file +package org.isoron.uhabits.tasks; \ No newline at end of file diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateFormats.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateFormats.java index 66a965217..81e72b3b0 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateFormats.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateFormats.java @@ -20,6 +20,8 @@ package org.isoron.uhabits.utils; import android.support.annotation.*; +import org.isoron.uhabits.core.utils.*; + import java.text.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateUtils.java index ba10e8733..2300d2249 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateUtils.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateUtils.java @@ -21,8 +21,10 @@ package org.isoron.uhabits.utils; import android.content.*; import android.text.format.*; +import android.text.format.DateUtils; import org.isoron.uhabits.*; +import org.isoron.uhabits.core.utils.*; import java.util.*; @@ -41,8 +43,8 @@ public class AndroidDateUtils public static String formatWeekdayList(Context context, boolean weekday[]) { - String shortDayNames[] = DateUtils.getShortDayNames(); - String longDayNames[] = DateUtils.getLongDayNames(); + String shortDayNames[] = org.isoron.uhabits.core.utils.DateUtils.getShortDayNames(); + String longDayNames[] = org.isoron.uhabits.core.utils.DateUtils.getLongDayNames(); StringBuilder buffer = new StringBuilder(); int count = 0; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java index f8126d685..1e03f4f95 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java @@ -26,6 +26,7 @@ import com.activeandroid.*; import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.models.sqlite.*; import org.isoron.uhabits.models.sqlite.records.*; import org.isoron.uhabits.sync.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ReminderScheduler.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ReminderScheduler.java index e0d02e85b..914c8a8f6 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ReminderScheduler.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ReminderScheduler.java @@ -23,15 +23,17 @@ import android.app.*; import android.support.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.commands.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.intents.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import java.util.*; import javax.inject.*; -import static org.isoron.uhabits.utils.DateUtils.*; +import static org.isoron.uhabits.core.utils.DateUtils.*; @AppScope public class ReminderScheduler implements CommandRunner.Listener diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java index 583947682..75a62f66d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java @@ -28,7 +28,7 @@ import android.widget.*; import com.activeandroid.util.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.preferences.*; import static android.appwidget.AppWidgetManager.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.java index aa57e7371..4eb6fd69a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.java @@ -24,7 +24,7 @@ import android.content.*; import android.support.annotation.*; import android.view.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.views.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.java index cd3fe8e62..3b798bd72 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.widgets; import android.content.*; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; public class CheckmarkWidgetProvider extends BaseWidgetProvider { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.java index ff76fdac4..ea4e3d889 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.java @@ -25,7 +25,7 @@ import android.support.annotation.*; import android.view.*; import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.views.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.java index 2d3e5fce9..423cf6ebc 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.java @@ -22,7 +22,7 @@ package org.isoron.uhabits.widgets; import android.content.*; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; public class FrequencyWidgetProvider extends BaseWidgetProvider { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.java index 983e25250..f6f586c4b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.java @@ -26,7 +26,7 @@ import android.view.*; import android.widget.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.preferences.*; import java.util.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.java index 0553e35ff..3035aec77 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.java @@ -25,7 +25,7 @@ import android.support.annotation.*; import android.view.*; import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.views.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java index 6f377ca3a..4fad4b853 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.widgets; import android.content.*; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; public class HistoryWidgetProvider extends BaseWidgetProvider { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.java index 325b3b464..1fcb02721 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.java @@ -27,7 +27,7 @@ import android.view.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.activities.habits.show.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.preferences.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.views.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.java index 002be7f17..1ad3fb80b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.widgets; import android.content.*; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; public class ScoreWidgetProvider extends BaseWidgetProvider { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidget.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidget.java index ecf3fe957..781ee71f4 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidget.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidget.java @@ -26,7 +26,7 @@ import android.view.*; import android.view.ViewGroup.*; import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.views.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java index 211246eb3..a097f7bb6 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java @@ -21,7 +21,7 @@ package org.isoron.uhabits.widgets; import android.content.*; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; public class StreakWidgetProvider extends BaseWidgetProvider { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.java index 1d326a46a..a10014212 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.java @@ -24,8 +24,8 @@ import android.content.*; import android.support.annotation.*; import org.isoron.androidbase.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.tasks.*; import javax.inject.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java index 2bddef022..00afeb46b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java @@ -25,7 +25,7 @@ import android.util.*; import android.widget.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.utils.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/AppScope.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/AppScope.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/AppScope.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/AppScope.java index 75c59577a..0aa1b9b52 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/AppScope.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/AppScope.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits; +package org.isoron.uhabits.core; import javax.inject.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/MyClass.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/MyClass.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/MyClass.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/MyClass.java index b2332c44d..dd5cdb01d 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/MyClass.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/MyClass.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits; +package org.isoron.uhabits.core; public class MyClass {} diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java index 0773b64e7..69797821b 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/commands/ArchiveHabitsCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommand.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommand.java index b3683901f..36ffe7945 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/commands/ChangeHabitColorCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommand.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/commands/Command.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/Command.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/commands/Command.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/commands/Command.java index 721efde98..7d48754ba 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/commands/Command.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/Command.java @@ -17,13 +17,13 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import android.support.annotation.*; import com.google.gson.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; /** * A Command represents a desired set of changes that should be performed on the diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/commands/CommandRunner.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandRunner.java similarity index 95% rename from uhabits-core/src/main/java/org/isoron/uhabits/commands/CommandRunner.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandRunner.java index 8ef46f6ec..6cac8a364 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/commands/CommandRunner.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandRunner.java @@ -17,12 +17,12 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import android.support.annotation.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.tasks.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateHabitCommand.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateHabitCommand.java index 61fbb9d4d..e5f8f15be 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/commands/CreateHabitCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateHabitCommand.java @@ -17,13 +17,13 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import android.support.annotation.*; import com.google.auto.factory.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; /** * Command to create a habit. diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/commands/CreateRepetitionCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateRepetitionCommand.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/commands/CreateRepetitionCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateRepetitionCommand.java index ddebd1073..9264a9c90 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/commands/CreateRepetitionCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateRepetitionCommand.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; /** * Command to toggle a repetition. diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/DeleteHabitsCommand.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/commands/DeleteHabitsCommand.java index 082990c28..1a99aa723 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/commands/DeleteHabitsCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/DeleteHabitsCommand.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/EditHabitCommand.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/commands/EditHabitCommand.java index 48c37ecc1..2870f4400 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/commands/EditHabitCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/EditHabitCommand.java @@ -17,13 +17,13 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import android.support.annotation.*; import com.google.auto.factory.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; /** * Command to modify a habit. diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommand.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommand.java index 556bf3e14..b2d2a0722 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommand.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; /** * Command to toggle a repetition. diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommand.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommand.java index a9e4f608c..af260d3bb 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/commands/UnarchiveHabitsCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommand.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/commands/package-info.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/package-info.java similarity index 89% rename from uhabits-core/src/main/java/org/isoron/uhabits/commands/package-info.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/commands/package-info.java index 8fce85ae1..848a9e284 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/commands/package-info.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/package-info.java @@ -19,6 +19,6 @@ /** * Provides commands to modify the models, such as {@link - * org.isoron.uhabits.commands.CreateHabitCommand}. + * org.isoron.uhabits.core.commands.CreateHabitCommand}. */ -package org.isoron.uhabits.commands; \ No newline at end of file +package org.isoron.uhabits.core.commands; \ No newline at end of file diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/io/HabitsCSVExporter.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/io/HabitsCSVExporter.java index d89413d2f..9665332fe 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/io/HabitsCSVExporter.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/io/HabitsCSVExporter.java @@ -17,12 +17,12 @@ * with this program. If not, see . */ -package org.isoron.uhabits.io; +package org.isoron.uhabits.core.io; import android.support.annotation.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import java.io.*; import java.text.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/Checkmark.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Checkmark.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/Checkmark.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/Checkmark.java index 85084c743..1075d4b4a 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/Checkmark.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Checkmark.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import org.apache.commons.lang3.builder.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/CheckmarkList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/CheckmarkList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java index 31a09b921..008191611 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/CheckmarkList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import android.support.annotation.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; import java.io.*; import java.text.*; @@ -29,7 +29,7 @@ import java.util.*; import javax.annotation.concurrent.*; -import static org.isoron.uhabits.models.Checkmark.*; +import static org.isoron.uhabits.core.models.Checkmark.*; /** * The collection of {@link Checkmark}s belonging to a habit. */ diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/Frequency.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Frequency.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/Frequency.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/Frequency.java index b21349b18..d12ff8ad2 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/Frequency.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Frequency.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import org.apache.commons.lang3.builder.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/Habit.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java similarity index 99% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/Habit.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java index e7b4d412e..0afcacb34 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/Habit.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import android.support.annotation.*; @@ -28,7 +28,7 @@ import java.util.*; import javax.annotation.concurrent.*; import javax.inject.*; -import static org.isoron.uhabits.models.Checkmark.*; +import static org.isoron.uhabits.core.models.Checkmark.*; /** * The thing that the user wants to track. diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/HabitList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitList.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/HabitList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitList.java index 52c00a893..cf49b4ba0 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/HabitList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitList.java @@ -17,13 +17,13 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import android.support.annotation.*; import com.opencsv.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; import java.io.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/HabitMatcher.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/HabitMatcher.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.java index 17198f279..d3d536b04 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/HabitMatcher.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import android.support.annotation.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.java index c6cbd0dc4..68a9daf8b 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/HabitMatcherBuilder.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.java @@ -17,9 +17,9 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/HabitNotFoundException.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitNotFoundException.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/HabitNotFoundException.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitNotFoundException.java index 74302e2ad..c40204a1e 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/HabitNotFoundException.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitNotFoundException.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; public class HabitNotFoundException extends RuntimeException { public HabitNotFoundException() { diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/ModelFactory.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ModelFactory.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/ModelFactory.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/ModelFactory.java index 2556b9755..5c6a548c1 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/ModelFactory.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ModelFactory.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; /** * Interface implemented by factories that provide concrete implementations of diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/ModelObservable.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ModelObservable.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/ModelObservable.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/ModelObservable.java index 6ab80813b..7d8f94377 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/ModelObservable.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ModelObservable.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/Reminder.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/Reminder.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.java index 88d54e293..3fb0bd1b9 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/Reminder.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import android.support.annotation.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/Repetition.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Repetition.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/Repetition.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/Repetition.java index 274fe3517..3d04328d0 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/Repetition.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Repetition.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import org.apache.commons.lang3.builder.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/RepetitionList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/RepetitionList.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/RepetitionList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/RepetitionList.java index ec355267c..8d237221f 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/RepetitionList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/RepetitionList.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import android.support.annotation.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/Score.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Score.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/Score.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/Score.java index fcfc8b56a..71739f34a 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/Score.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Score.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import org.apache.commons.lang3.builder.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/ScoreList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java similarity index 99% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/ScoreList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java index 1afb19be2..229959fca 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/ScoreList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import android.support.annotation.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; import java.io.*; import java.text.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/Streak.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.java similarity index 95% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/Streak.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.java index 5a7a59f3d..aff58c180 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/Streak.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.java @@ -17,10 +17,10 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import org.apache.commons.lang3.builder.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; public final class Streak { diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/StreakList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/StreakList.java similarity index 98% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/StreakList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/StreakList.java index 1176aa71c..ae2bc3032 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/StreakList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/StreakList.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import android.support.annotation.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/WeekdayList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/WeekdayList.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/WeekdayList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/WeekdayList.java index f6cbe4560..64aff772f 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/WeekdayList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/WeekdayList.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryCheckmarkList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryCheckmarkList.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryCheckmarkList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryCheckmarkList.java index 5b02be26a..ec847acc5 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryCheckmarkList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryCheckmarkList.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models.memory; +package org.isoron.uhabits.core.models.memory; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryHabitList.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryHabitList.java index 32f1982c4..58ec38fe0 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryHabitList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryHabitList.java @@ -17,15 +17,15 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models.memory; +package org.isoron.uhabits.core.models.memory; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import java.util.*; -import static org.isoron.uhabits.models.HabitList.Order.*; +import static org.isoron.uhabits.core.models.HabitList.Order.*; /** * In-memory implementation of {@link HabitList}. diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryModelFactory.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryModelFactory.java similarity index 93% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryModelFactory.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryModelFactory.java index 0a934d97a..bbb67a1b0 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryModelFactory.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryModelFactory.java @@ -17,10 +17,10 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models.memory; +package org.isoron.uhabits.core.models.memory; -import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.models.*; import dagger.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryRepetitionList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryRepetitionList.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryRepetitionList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryRepetitionList.java index cf1772e0b..2d7c81fea 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryRepetitionList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryRepetitionList.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models.memory; +package org.isoron.uhabits.core.models.memory; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryScoreList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryScoreList.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryScoreList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryScoreList.java index b4ddc9fec..66e228d3f 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryScoreList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryScoreList.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models.memory; +package org.isoron.uhabits.core.models.memory; import android.support.annotation.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryStreakList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryStreakList.java similarity index 94% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryStreakList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryStreakList.java index 31fd3de8d..1cadf75c2 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/MemoryStreakList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryStreakList.java @@ -17,10 +17,10 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models.memory; +package org.isoron.uhabits.core.models.memory; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/package-info.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/package-info.java similarity index 94% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/memory/package-info.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/package-info.java index f8272f334..0f45cc6bc 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/memory/package-info.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/package-info.java @@ -20,4 +20,4 @@ /** * Provides in-memory implementation of core models. */ -package org.isoron.uhabits.models.memory; \ No newline at end of file +package org.isoron.uhabits.core.models.memory; \ No newline at end of file diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/models/package-info.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/package-info.java similarity index 87% rename from uhabits-core/src/main/java/org/isoron/uhabits/models/package-info.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/models/package-info.java index 9cb029b90..baef7f609 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/models/package-info.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/package-info.java @@ -18,7 +18,7 @@ */ /** - * Provides core models classes, such as {@link org.isoron.uhabits.models.Habit} - * and {@link org.isoron.uhabits.models.Repetition}. + * Provides core models classes, such as {@link org.isoron.uhabits.core.models.Habit} + * and {@link org.isoron.uhabits.core.models.Repetition}. */ -package org.isoron.uhabits.models; \ No newline at end of file +package org.isoron.uhabits.core.models; \ No newline at end of file diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/Preferences.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/Preferences.java index e39e67540..154e06333 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/preferences/Preferences.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/Preferences.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.preferences; +package org.isoron.uhabits.core.preferences; public interface Preferences { diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/ExportCSVTask.java similarity index 94% rename from uhabits-core/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/ExportCSVTask.java index a869848fb..38c2f7f84 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/tasks/ExportCSVTask.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/ExportCSVTask.java @@ -17,14 +17,14 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks; +package org.isoron.uhabits.core.tasks; import android.support.annotation.*; import com.google.auto.factory.*; -import org.isoron.uhabits.io.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.io.*; +import org.isoron.uhabits.core.models.*; import java.io.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunner.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunner.java index 245d76d30..748b8521d 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/tasks/SingleThreadTaskRunner.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunner.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks; +package org.isoron.uhabits.core.tasks; public class SingleThreadTaskRunner implements TaskRunner { diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/tasks/Task.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/Task.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/tasks/Task.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/Task.java index a1b69098a..3531a6314 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/tasks/Task.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/Task.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks; +package org.isoron.uhabits.core.tasks; import android.support.annotation.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/tasks/TaskRunner.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/TaskRunner.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/tasks/TaskRunner.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/TaskRunner.java index c5c38d7c0..ec2a4486e 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/tasks/TaskRunner.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/TaskRunner.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks; +package org.isoron.uhabits.core.tasks; public interface TaskRunner { diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/NotificationTray.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/NotificationTray.java similarity index 91% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/NotificationTray.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/ui/NotificationTray.java index df4a0509c..3a882f465 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/NotificationTray.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/NotificationTray.java @@ -17,9 +17,9 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui; +package org.isoron.uhabits.core.ui; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; public interface NotificationTray { diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/ThemeSwitcher.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/ThemeSwitcher.java similarity index 95% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/ThemeSwitcher.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/ui/ThemeSwitcher.java index 70f6e221f..b3d6db862 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/ThemeSwitcher.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/ThemeSwitcher.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui; +package org.isoron.uhabits.core.ui; import android.support.annotation.*; -import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.core.preferences.*; public abstract class ThemeSwitcher { diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnColorPickedCallback.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnColorPickedCallback.java similarity index 94% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnColorPickedCallback.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnColorPickedCallback.java index 7cb86813a..b435c23c6 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnColorPickedCallback.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnColorPickedCallback.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.callbacks; +package org.isoron.uhabits.core.ui.callbacks; public interface OnColorPickedCallback { diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnConfirmedCallback.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnConfirmedCallback.java similarity index 94% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnConfirmedCallback.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnConfirmedCallback.java index a543e01f9..3a51f0bca 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnConfirmedCallback.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnConfirmedCallback.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.callbacks; +package org.isoron.uhabits.core.ui.callbacks; public interface OnConfirmedCallback { diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnFinishedCallback.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnFinishedCallback.java similarity index 94% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnFinishedCallback.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnFinishedCallback.java index 93efa29dc..6d0bdf8e5 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/callbacks/OnFinishedCallback.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnFinishedCallback.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.callbacks; +package org.isoron.uhabits.core.ui.callbacks; public interface OnFinishedCallback { diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/about/AboutBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/about/AboutBehavior.java similarity index 95% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/about/AboutBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/about/AboutBehavior.java index 233d791f7..996084e40 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/about/AboutBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/about/AboutBehavior.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.screens.about; +package org.isoron.uhabits.core.ui.screens.about; import android.support.annotation.*; -import org.isoron.uhabits.preferences.*; +import org.isoron.uhabits.core.preferences.*; public class AboutBehavior { diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCache.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCache.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.java index ca77d7e7d..08afffcc7 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCache.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.java @@ -17,15 +17,15 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.screens.habits.list; +package org.isoron.uhabits.core.ui.screens.habits.list; import android.support.annotation.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.tasks.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.tasks.*; +import org.isoron.uhabits.core.utils.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HintList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HintList.java similarity index 94% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HintList.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HintList.java index fd5f48ef6..56bf7b23f 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/HintList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HintList.java @@ -17,14 +17,14 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.screens.habits.list; +package org.isoron.uhabits.core.ui.screens.habits.list; import android.support.annotation.*; import com.google.auto.factory.*; -import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.preferences.*; +import org.isoron.uhabits.core.utils.*; /** * Provides a list of hints to be shown at the application startup, and takes diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java similarity index 94% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java index 374f88995..890a5c470 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java @@ -17,15 +17,15 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.screens.habits.list; +package org.isoron.uhabits.core.ui.screens.habits.list; import android.support.annotation.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.tasks.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.preferences.*; +import org.isoron.uhabits.core.tasks.*; +import org.isoron.uhabits.core.utils.*; import java.io.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java similarity index 95% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java index e77938fb7..ba299158b 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java @@ -17,13 +17,13 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.screens.habits.list; +package org.isoron.uhabits.core.ui.screens.habits.list; import android.support.annotation.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.preferences.*; +import org.isoron.uhabits.core.ui.*; import javax.inject.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java similarity index 95% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java index 10d65f14e..36d21e9ea 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java @@ -17,13 +17,13 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.screens.habits.list; +package org.isoron.uhabits.core.ui.screens.habits.list; import android.support.annotation.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.ui.callbacks.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.ui.callbacks.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitBehavior.java similarity index 92% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitBehavior.java index d43be2a42..5b319957e 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitBehavior.java @@ -17,12 +17,12 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.screens.habits.show; +package org.isoron.uhabits.core.ui.screens.habits.show; import android.support.annotation.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.models.*; import javax.inject.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java similarity index 94% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java index a7f3e68b3..2c015b4b6 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java @@ -17,12 +17,12 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.screens.habits.show; +package org.isoron.uhabits.core.ui.screens.habits.show; import android.support.annotation.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.tasks.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.tasks.*; import java.io.*; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/ui/widgets/WidgetBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/widgets/WidgetBehavior.java similarity index 92% rename from uhabits-core/src/main/java/org/isoron/uhabits/ui/widgets/WidgetBehavior.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/ui/widgets/WidgetBehavior.java index d1d6090b6..217a7b6bc 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/ui/widgets/WidgetBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/widgets/WidgetBehavior.java @@ -17,13 +17,13 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.widgets; +package org.isoron.uhabits.core.ui.widgets; import android.support.annotation.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.ui.*; import javax.inject.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/utils/ColorConstants.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/ColorConstants.java similarity index 92% rename from uhabits-core/src/main/java/org/isoron/uhabits/utils/ColorConstants.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/utils/ColorConstants.java index 294f3e6cd..0f4d97244 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/utils/ColorConstants.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/ColorConstants.java @@ -1,4 +1,4 @@ -package org.isoron.uhabits.utils; +package org.isoron.uhabits.core.utils; public class ColorConstants { diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/utils/DateFormats.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateFormats.java similarity index 97% rename from uhabits-core/src/main/java/org/isoron/uhabits/utils/DateFormats.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateFormats.java index dc1df5231..755fe54e5 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/utils/DateFormats.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateFormats.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.utils; +package org.isoron.uhabits.core.utils; import android.support.annotation.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/utils/DateUtils.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java similarity index 99% rename from uhabits-core/src/main/java/org/isoron/uhabits/utils/DateUtils.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java index cb0f20fbe..59dc12f19 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/utils/DateUtils.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.utils; +package org.isoron.uhabits.core.utils; import java.util.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/MidnightTimer.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/utils/MidnightTimer.java index 44283af94..1ddacdade 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/utils/MidnightTimer.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/MidnightTimer.java @@ -17,9 +17,9 @@ * with this program. If not, see . */ -package org.isoron.uhabits.utils; +package org.isoron.uhabits.core.utils; -import org.isoron.uhabits.*; +import org.isoron.uhabits.core.*; import java.util.*; import java.util.concurrent.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/utils/StringUtils.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/StringUtils.java similarity index 96% rename from uhabits-core/src/main/java/org/isoron/uhabits/utils/StringUtils.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/utils/StringUtils.java index 2a22c78b6..2d8b3b7f7 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/utils/StringUtils.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/StringUtils.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.utils; +package org.isoron.uhabits.core.utils; import java.math.*; import java.util.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java index 7c34632fa..384eadbb4 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java @@ -19,11 +19,11 @@ package org.isoron.uhabits; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.models.memory.*; -import org.isoron.uhabits.tasks.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.models.memory.*; +import org.isoron.uhabits.core.tasks.*; +import org.isoron.uhabits.core.utils.*; import org.junit.*; import org.junit.runner.*; import org.mockito.junit.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommandTest.java similarity index 95% rename from uhabits-core/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommandTest.java index dd0b9e53c..fc2df1508 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/commands/ArchiveHabitsCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommandTest.java @@ -17,10 +17,10 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import java.util.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommandTest.java similarity index 96% rename from uhabits-core/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommandTest.java index 88716a22a..790aa259e 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/commands/ChangeHabitColorCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommandTest.java @@ -17,10 +17,10 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import java.util.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CreateHabitCommandTest.java similarity index 96% rename from uhabits-core/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CreateHabitCommandTest.java index ac812e560..9237b04b5 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/commands/CreateHabitCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CreateHabitCommandTest.java @@ -17,10 +17,10 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import static junit.framework.Assert.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CreateRepetitionCommandTest.java similarity index 92% rename from uhabits-core/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CreateRepetitionCommandTest.java index 01426474a..f82d0ad0c 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/commands/CreateRepetitionCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CreateRepetitionCommandTest.java @@ -17,17 +17,17 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.junit.*; import static junit.framework.Assert.*; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; -import static org.isoron.uhabits.models.Checkmark.CHECKED_EXPLICITLY; +import static org.isoron.uhabits.core.models.Checkmark.CHECKED_EXPLICITLY; public class CreateRepetitionCommandTest extends BaseUnitTest { diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/DeleteHabitsCommandTest.java similarity index 96% rename from uhabits-core/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/commands/DeleteHabitsCommandTest.java index 17fafab36..77d3e0523 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/commands/DeleteHabitsCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/DeleteHabitsCommandTest.java @@ -17,10 +17,10 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.rules.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/EditHabitCommandTest.java similarity index 97% rename from uhabits-core/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/commands/EditHabitCommandTest.java index 185f4b94f..003cdf6bd 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/commands/EditHabitCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/EditHabitCommandTest.java @@ -17,10 +17,10 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import static org.hamcrest.MatcherAssert.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommandTest.java similarity index 94% rename from uhabits-core/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommandTest.java index 3ce74245a..554d631d7 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/commands/ToggleRepetitionCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommandTest.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.junit.*; import static junit.framework.Assert.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommandTest.java similarity index 96% rename from uhabits-core/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommandTest.java index 4f12101b9..81c1d2465 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/commands/UnarchiveHabitsCommandTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommandTest.java @@ -17,10 +17,10 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import java.util.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/CheckmarkListTest.java similarity index 97% rename from uhabits-core/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/models/CheckmarkListTest.java index 7bc708d96..b510d8fad 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/models/CheckmarkListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/CheckmarkListTest.java @@ -17,17 +17,17 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import org.isoron.uhabits.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; import org.junit.*; import java.io.*; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.core.IsEqual.*; -import static org.isoron.uhabits.models.Checkmark.*; +import static org.isoron.uhabits.core.models.Checkmark.*; public class CheckmarkListTest extends BaseUnitTest { diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitFixtures.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitFixtures.java similarity index 97% rename from uhabits-core/src/test/java/org/isoron/uhabits/models/HabitFixtures.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitFixtures.java index 29afe1aab..87066ed6a 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitFixtures.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitFixtures.java @@ -17,9 +17,9 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; public class HabitFixtures { diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitListTest.java similarity index 98% rename from uhabits-core/src/test/java/org/isoron/uhabits/models/HabitListTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitListTest.java index ef31ce056..ee1c70e92 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitListTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import org.hamcrest.*; import org.isoron.uhabits.*; @@ -27,7 +27,7 @@ import java.io.*; import java.util.*; import static org.hamcrest.CoreMatchers.*; -import static org.isoron.uhabits.models.HabitList.Order.*; +import static org.isoron.uhabits.core.models.HabitList.Order.*; import static org.junit.Assert.*; @SuppressWarnings("JavaDoc") diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java similarity index 98% rename from uhabits-core/src/test/java/org/isoron/uhabits/models/HabitTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java index 3c11e1101..95d57f6d5 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/models/HabitTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import org.isoron.uhabits.*; import org.junit.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/RepetitionListTest.java similarity index 98% rename from uhabits-core/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/models/RepetitionListTest.java index edba652c2..fe456e761 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/models/RepetitionListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/RepetitionListTest.java @@ -17,12 +17,12 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import android.support.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; import org.junit.*; import java.util.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/models/ScoreListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreListTest.java similarity index 98% rename from uhabits-core/src/test/java/org/isoron/uhabits/models/ScoreListTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreListTest.java index e27ade824..2ad2c2893 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/models/ScoreListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreListTest.java @@ -17,10 +17,10 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import org.isoron.uhabits.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; import org.junit.*; import java.io.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/models/ScoreTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreTest.java similarity index 95% rename from uhabits-core/src/test/java/org/isoron/uhabits/models/ScoreTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreTest.java index c794bbf35..6a90a406c 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/models/ScoreTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreTest.java @@ -17,13 +17,13 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import org.isoron.uhabits.*; import org.junit.*; import static org.hamcrest.number.IsCloseTo.*; -import static org.isoron.uhabits.models.Score.*; +import static org.isoron.uhabits.core.models.Score.*; import static org.junit.Assert.*; public class ScoreTest extends BaseUnitTest diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/models/StreakListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/StreakListTest.java similarity index 98% rename from uhabits-core/src/test/java/org/isoron/uhabits/models/StreakListTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/models/StreakListTest.java index 8bf4fc78a..0f9571e2f 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/models/StreakListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/StreakListTest.java @@ -17,10 +17,10 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import org.isoron.uhabits.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.utils.*; import org.junit.*; import java.util.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/WeekdayListTest.java similarity index 97% rename from uhabits-core/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/models/WeekdayListTest.java index 142cb7082..efe83798c 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/models/WeekdayListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/WeekdayListTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.models; +package org.isoron.uhabits.core.models; import org.isoron.uhabits.*; import org.junit.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunnerTest.java similarity index 97% rename from uhabits-core/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunnerTest.java index 95d3019d6..3f7e3090e 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/tasks/SingleThreadTaskRunnerTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunnerTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.tasks; +package org.isoron.uhabits.core.tasks; import org.isoron.uhabits.*; import org.junit.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCacheTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCacheTest.java similarity index 96% rename from uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCacheTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCacheTest.java index 9fdda511e..abad82464 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/HabitCardListCacheTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCacheTest.java @@ -17,14 +17,14 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.screens.habits.list; +package org.isoron.uhabits.core.ui.screens.habits.list; import junit.framework.Assert; import org.isoron.uhabits.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.junit.Test; import java.util.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/HintListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HintListTest.java similarity index 93% rename from uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/HintListTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HintListTest.java index 24271923e..f7509b1a0 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/HintListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HintListTest.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.screens.habits.list; +package org.isoron.uhabits.core.ui.screens.habits.list; import org.isoron.uhabits.*; -import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.preferences.*; +import org.isoron.uhabits.core.utils.*; import org.junit.*; import org.mockito.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.java similarity index 94% rename from uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.java index 58f9d6224..6fbef66cf 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsBehaviorTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.java @@ -17,12 +17,12 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.screens.habits.list; +package org.isoron.uhabits.core.ui.screens.habits.list; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.utils.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.preferences.*; +import org.isoron.uhabits.core.utils.*; import org.junit.*; import org.mockito.*; @@ -32,7 +32,7 @@ import static java.nio.file.Files.*; import static junit.framework.TestCase.assertTrue; import static org.apache.commons.io.FileUtils.*; import static org.hamcrest.CoreMatchers.*; -import static org.isoron.uhabits.ui.screens.habits.list.ListHabitsBehavior.Message.*; +import static org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior.Message.*; import static org.junit.Assert.assertFalse; import static org.junit.Assert.*; import static org.mockito.Mockito.any; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java similarity index 95% rename from uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java index dc3bcd293..af71677a3 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java @@ -17,19 +17,19 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.screens.habits.list; +package org.isoron.uhabits.core.ui.screens.habits.list; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.preferences.*; -import org.isoron.uhabits.ui.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.preferences.*; +import org.isoron.uhabits.core.ui.*; import org.junit.*; import org.mockito.*; import static junit.framework.TestCase.*; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.Matchers.*; -import static org.isoron.uhabits.models.HabitList.Order.*; +import static org.isoron.uhabits.core.models.HabitList.Order.*; import static org.mockito.Mockito.*; public class ListHabitsMenuBehaviorTest extends BaseUnitTest diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java similarity index 97% rename from uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java index ccf6b39ac..3e2632b5b 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java @@ -17,11 +17,11 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.screens.habits.list; +package org.isoron.uhabits.core.ui.screens.habits.list; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.ui.callbacks.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.ui.callbacks.*; import org.junit.*; import org.mockito.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java similarity index 95% rename from uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java index 351636681..b0ca4d0ba 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java @@ -17,10 +17,10 @@ * with this program. If not, see . */ -package org.isoron.uhabits.ui.screens.habits.show; +package org.isoron.uhabits.core.ui.screens.habits.show; import org.isoron.uhabits.*; -import org.isoron.uhabits.models.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import java.io.*; diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java similarity index 99% rename from uhabits-core/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java index ed32cbeab..963559054 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/utils/DateUtilsTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.utils; +package org.isoron.uhabits.core.utils; import org.isoron.uhabits.*; import org.junit.*; From 6255fe2d12dd6e544210f69fffd64363d16cc029 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 28 May 2017 11:39:07 -0400 Subject: [PATCH 19/27] Make generated classes work on Android Studio --- uhabits-android/build.gradle | 5 +++++ uhabits-core/build.gradle | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle index 0a8170e61..bd78b5ba9 100644 --- a/uhabits-android/build.gradle +++ b/uhabits-android/build.gradle @@ -1,3 +1,4 @@ +apply plugin: 'idea' apply plugin: 'com.android.application' apply plugin: 'jacoco' @@ -81,6 +82,10 @@ dependencies { androidTestAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' androidTestAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' + testAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' + testAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' + testAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' + implementation('com.opencsv:opencsv:3.9') { exclude group: 'commons-logging', module: 'commons-logging' } diff --git a/uhabits-core/build.gradle b/uhabits-core/build.gradle index fa1ec0e0b..47f7cc009 100644 --- a/uhabits-core/build.gradle +++ b/uhabits-core/build.gradle @@ -1,11 +1,19 @@ +plugins { + id "net.ltgt.apt" version "0.7" +} +apply plugin: 'idea' apply plugin: 'java' apply plugin: 'jacoco' dependencies { + apt 'com.google.auto.factory:auto-factory:1.0-beta3' + apt 'com.google.dagger:dagger:2.11-rc2' + compileOnly 'javax.annotation:jsr250-api:1.0' compileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' - implementation 'com.google.dagger:dagger:2.11-rc2' + compileOnly 'com.google.dagger:dagger:2.11-rc2' + implementation 'com.android.support:support-annotations:25.3.1' implementation 'com.google.code.findbugs:jsr305:3.0.2' implementation 'org.apache.commons:commons-lang3:3.5' From e826c80ff227e84bae550cc59f2b49bc8822f992 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 28 May 2017 15:26:28 -0400 Subject: [PATCH 20/27] Fix Android tests --- build.sh | 14 ++-- uhabits-android/build.gradle | 8 +- .../habits/show/views/FrequencyCardTest.java | 2 +- .../{core => }/io/HabitsCSVExporterTest.java | 3 +- .../uhabits/{core => }/io/ImportTest.java | 3 +- .../{core => }/models/HabitListTest.java | 3 +- .../models/sqlite/HabitRecordTest.java | 2 +- .../sqlite/SQLiteCheckmarkListTest.java | 2 +- .../models/sqlite/SQLiteHabitListTest.java | 2 +- .../sqlite/SQLiteRepetitionListTest.java | 2 +- .../models/sqlite/SQLiteScoreListTest.java | 2 +- .../uhabits/receivers/PebbleReceiverTest.java | 1 - .../{core => }/tasks/ExportCSVTaskTest.java | 3 +- .../{core => }/tasks/ExportDBTaskTest.java | 3 +- .../utils/ReminderSchedulerTest.java | 36 ++++----- .../org/isoron/uhabits/sync/SyncManager.java | 1 - .../isoron/uhabits/BaseAndroidUnitTest.java | 80 +++++++++++++++++++ .../habits/list/ListHabitsMenuTest.java | 69 +++++----------- .../habits/list/ListHabitsScreenTest.java | 21 +++-- .../CheckmarkButtonControllerTest.java | 2 +- .../controllers/HabitCardControllerTest.java | 2 +- .../HabitCardListControllerTest.java | 3 +- .../habits/list/controllers/package-info.java | 0 .../receivers/ReminderControllerTest.java | 2 +- .../receivers/WidgetControllerTest.java | 9 +-- .../core/commands/ArchiveHabitsCommand.java | 12 +-- .../uhabits/core}/commands/CommandParser.java | 9 +-- .../uhabits/core/test}/HabitFixtures.java | 3 +- .../java/org/isoron/uhabits/BaseUnitTest.java | 1 + .../core/commands/CommandParserTest.java | 3 +- 30 files changed, 174 insertions(+), 129 deletions(-) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{core => }/io/HabitsCSVExporterTest.java (98%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{core => }/io/ImportTest.java (98%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{core => }/models/HabitListTest.java (98%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{core => }/models/sqlite/HabitRecordTest.java (98%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{core => }/models/sqlite/SQLiteCheckmarkListTest.java (98%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{core => }/models/sqlite/SQLiteHabitListTest.java (98%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{core => }/models/sqlite/SQLiteRepetitionListTest.java (98%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{core => }/models/sqlite/SQLiteScoreListTest.java (98%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{core => }/tasks/ExportCSVTaskTest.java (96%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{core => }/tasks/ExportDBTaskTest.java (95%) rename uhabits-android/src/androidTest/java/org/isoron/uhabits/{core => }/utils/ReminderSchedulerTest.java (85%) create mode 100644 uhabits-android/src/test/java/org/isoron/uhabits/BaseAndroidUnitTest.java rename uhabits-android/src/{androidTest => test}/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java (68%) rename uhabits-android/src/{androidTest => test}/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java (95%) rename uhabits-android/src/{androidTest => test}/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java (97%) rename uhabits-android/src/{androidTest => test}/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java (96%) rename uhabits-android/src/{androidTest => test}/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java (97%) rename uhabits-android/src/{androidTest => test}/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java (100%) rename uhabits-android/src/{androidTest => test}/java/org/isoron/uhabits/receivers/ReminderControllerTest.java (97%) rename uhabits-android/src/{androidTest => test}/java/org/isoron/uhabits/receivers/WidgetControllerTest.java (92%) rename {uhabits-android/src/main/java/org/isoron/uhabits => uhabits-core/src/main/java/org/isoron/uhabits/core}/commands/CommandParser.java (91%) rename uhabits-core/src/{test/java/org/isoron/uhabits/core/models => main/java/org/isoron/uhabits/core/test}/HabitFixtures.java (97%) rename {uhabits-android/src/androidTest => uhabits-core/src/test}/java/org/isoron/uhabits/core/commands/CommandParserTest.java (98%) diff --git a/build.sh b/build.sh index dbc78e436..152104e7d 100755 --- a/build.sh +++ b/build.sh @@ -19,7 +19,7 @@ ADB="${ANDROID_HOME}/platform-tools/adb" EMULATOR="${ANDROID_HOME}/tools/emulator" GRADLE="./gradlew --stacktrace" PACKAGE_NAME=org.isoron.uhabits -OUTPUTS_DIR=app/build/outputs +OUTPUTS_DIR=uhabits-android/build/outputs KEYFILE="TestKeystore.jks" KEY_ALIAS="default" @@ -128,14 +128,14 @@ install_apk() { log_info "Installing APK" if [ ! -z $RELEASE ]; then - $ADB install -r ${OUTPUTS_DIR}/apk/release/app-release.apk || fail + $ADB install -r ${OUTPUTS_DIR}/apk/release/uhabits-android-release.apk || fail else - $ADB install -r ${OUTPUTS_DIR}/apk/debug/app-debug.apk || fail + $ADB install -r ${OUTPUTS_DIR}/apk/debug/uhabits-android-debug.apk || fail fi } install_test_apk() { - $ADB install -r ${OUTPUTS_DIR}/apk/androidTest/debug/app-debug-androidTest.apk || fail + $ADB install -r ${OUTPUTS_DIR}/apk/androidTest/debug/uhabits-android-debug-androidTest.apk || fail } run_instrumented_tests() { @@ -158,7 +158,7 @@ parse_instrumentation_results() { generate_coverage_badge() { log_info "Generating code coverage badge" - python tools/coverage-badge/badge.py -i app/build/reports/jacoco/coverageReport/coverageReport.xml -o ${OUTPUTS_DIR}/coverage-badge + python tools/coverage-badge/badge.py -i uhabits-android/build/reports/jacoco/coverageReport/coverageReport.xml -o ${OUTPUTS_DIR}/coverage-badge } fetch_artifacts() { @@ -199,8 +199,8 @@ run_local_tests() { parse_instrumentation_results fetch_artifacts fetch_logcat - run_jvm_tests - generate_coverage_badge + #run_jvm_tests + #generate_coverage_badge uninstall_test_apk } diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle index bd78b5ba9..0186097a7 100644 --- a/uhabits-android/build.gradle +++ b/uhabits-android/build.gradle @@ -73,9 +73,6 @@ dependencies { androidTestImplementation 'com.android.support:support-annotations:25.3.1' androidTestImplementation 'com.android.support.test:rules:0.5' androidTestImplementation 'com.android.support.test:runner:0.5' - androidTestImplementation "com.google.dexmaker:dexmaker:1.2" - androidTestImplementation 'com.linkedin.dexmaker:dexmaker-mockito:2.2.0' - androidTestImplementation 'org.mockito:mockito-core:2.8.9' androidTestImplementation 'com.google.guava:guava:20.0' androidTestCompileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' @@ -86,6 +83,11 @@ dependencies { testAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' testAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' + testCompile "org.mockito:mockito-core:2.8.9" + testCompile "org.mockito:mockito-inline:2.8.9" + androidTestCompile "org.mockito:mockito-android:2.8.9" + androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' + implementation('com.opencsv:opencsv:3.9') { exclude group: 'commons-logging', module: 'commons-logging' } diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java index 0b3e7a8c3..9b0b82efa 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java @@ -43,7 +43,7 @@ public class FrequencyCardTest extends BaseViewTest public void setUp() { super.setUp(); - habit = fixtures.createLongHabit(); + habit = fixtures.createLongHabit(); view = (FrequencyCard) LayoutInflater .from(targetContext) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/HabitsCSVExporterTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java similarity index 98% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/HabitsCSVExporterTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java index 48f173bc3..a2a63680c 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/HabitsCSVExporterTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/HabitsCSVExporterTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.core.io; +package org.isoron.uhabits.io; import android.content.*; import android.support.test.*; @@ -26,6 +26,7 @@ import android.test.suitebuilder.annotation.*; import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.core.io.*; import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/ImportTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java similarity index 98% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/ImportTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java index d1ef5f053..51a35e52c 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/io/ImportTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/io/ImportTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.core.io; +package org.isoron.uhabits.io; import android.content.*; import android.support.test.*; @@ -28,7 +28,6 @@ import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.utils.*; -import org.isoron.uhabits.io.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/HabitListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/HabitListTest.java similarity index 98% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/HabitListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/HabitListTest.java index 28e5cffc7..82d083bb3 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/HabitListTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/HabitListTest.java @@ -17,13 +17,14 @@ * with this program. If not, see . */ -package org.isoron.uhabits.core.models; +package org.isoron.uhabits.models; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.hamcrest.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.core.models.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/HabitRecordTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/HabitRecordTest.java similarity index 98% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/HabitRecordTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/HabitRecordTest.java index 4435bb961..872b3382c 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/HabitRecordTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/HabitRecordTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.core.models.sqlite; +package org.isoron.uhabits.models.sqlite; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteCheckmarkListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java similarity index 98% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteCheckmarkListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java index 1817c338c..1efac3177 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteCheckmarkListTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkListTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.core.models.sqlite; +package org.isoron.uhabits.models.sqlite; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteHabitListTest.java similarity index 98% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteHabitListTest.java index 211a6838d..a7b308c73 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitListTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteHabitListTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.core.models.sqlite; +package org.isoron.uhabits.models.sqlite; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java similarity index 98% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java index 3964aca1d..06ebca674 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionListTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.core.models.sqlite; +package org.isoron.uhabits.models.sqlite; import android.support.annotation.*; import android.support.test.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteScoreListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java similarity index 98% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteScoreListTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java index f71172894..3108ab96a 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/models/sqlite/SQLiteScoreListTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteScoreListTest.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.core.models.sqlite; +package org.isoron.uhabits.models.sqlite; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java index cfb914f9f..a4157ee71 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/PebbleReceiverTest.java @@ -42,7 +42,6 @@ import static org.hamcrest.core.IsEqual.*; @MediumTest public class PebbleReceiverTest extends BaseAndroidTest { - private Habit habit1; private Habit habit2; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportCSVTaskTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java similarity index 96% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportCSVTaskTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java index 1f9664960..2c268b4f8 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportCSVTaskTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java @@ -17,13 +17,14 @@ * with this program. If not, see . */ -package org.isoron.uhabits.core.tasks; +package org.isoron.uhabits.tasks; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.tasks.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportDBTaskTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java similarity index 95% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportDBTaskTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java index 316486f97..71ac1ffb4 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/tasks/ExportDBTaskTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java @@ -17,13 +17,12 @@ * with this program. If not, see . */ -package org.isoron.uhabits.core.tasks; +package org.isoron.uhabits.tasks; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.tasks.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/utils/ReminderSchedulerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java similarity index 85% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/utils/ReminderSchedulerTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java index c9ea5b6be..d409121f1 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/utils/ReminderSchedulerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/utils/ReminderSchedulerTest.java @@ -17,27 +17,26 @@ * with this program. If not, see . */ -package org.isoron.uhabits.core.utils; +package org.isoron.uhabits.utils; import android.app.*; import org.isoron.uhabits.*; import org.isoron.uhabits.core.commands.*; import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.intents.*; -import org.isoron.uhabits.utils.*; import org.junit.*; import java.util.*; +import static java.util.Arrays.asList; import static org.mockito.Mockito.*; public class ReminderSchedulerTest extends BaseAndroidTest { private Habit habit; - private PendingIntent intent; - private ReminderScheduler reminderScheduler; private HabitLogger logger; @@ -53,11 +52,11 @@ public class ReminderSchedulerTest extends BaseAndroidTest public void setUp() { super.setUp(); - intent = mock(PendingIntent.class); logger = mock(HabitLogger.class); - pendingIntentFactory = mock(PendingIntentFactory.class); intentScheduler = mock(IntentScheduler.class); commandRunner = mock(CommandRunner.class); + pendingIntentFactory = + new PendingIntentFactory(targetContext, new IntentFactory()); reminderScheduler = new ReminderScheduler(pendingIntentFactory, intentScheduler, logger, @@ -92,26 +91,23 @@ public class ReminderSchedulerTest extends BaseAndroidTest } @Test - public void testSchedule_list() + public void testScheduleAll() { long now = timestamp(2015, 1, 26, 13, 0); DateUtils.setFixedLocalTime(now); Habit h1 = fixtures.createEmptyHabit(); - h1.setReminder(new Reminder(8, 30, WeekdayList.EVERY_DAY)); - habitList.add(h1); - Habit h2 = fixtures.createEmptyHabit(); - h2.setReminder(new Reminder(18, 30, WeekdayList.EVERY_DAY)); - habitList.add(h2); - Habit h3 = fixtures.createEmptyHabit(); - habitList.add(h3); + h1.setReminder(new Reminder(8, 30, WeekdayList.EVERY_DAY)); + h2.setReminder(new Reminder(18, 30, WeekdayList.EVERY_DAY)); + h3.setReminder(null); + habitList.update(asList(h1, h2, h3)); reminderScheduler.scheduleAll(); - verify(intentScheduler).schedule(timestamp(2015, 1, 27, 12, 30), null); - verify(intentScheduler).schedule(timestamp(2015, 1, 26, 22, 30), null); + verify(intentScheduler).schedule(eq(timestamp(2015, 1, 27, 12, 30)), any()); + verify(intentScheduler).schedule(eq(timestamp(2015, 1, 26, 22, 30)), any()); verifyNoMoreInteractions(intentScheduler); } @@ -146,15 +142,13 @@ public class ReminderSchedulerTest extends BaseAndroidTest long expectedCheckmarkTime, long expectedReminderTime) { - when(pendingIntentFactory.showReminder(habit, expectedReminderTime, - expectedCheckmarkTime)).thenReturn(intent); + PendingIntent intent = + pendingIntentFactory.showReminder(habit, expectedReminderTime, + expectedCheckmarkTime); reminderScheduler.schedule(habit, atTime); verify(logger).logReminderScheduled(habit, expectedReminderTime); - - verify(pendingIntentFactory).showReminder(habit, expectedReminderTime, - expectedCheckmarkTime); verify(intentScheduler).schedule(expectedReminderTime, intent); } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java index 189a60ade..66cfc8c62 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java @@ -24,7 +24,6 @@ import android.util.*; import org.isoron.androidbase.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.commands.*; import org.isoron.uhabits.core.*; import org.isoron.uhabits.core.commands.*; import org.isoron.uhabits.preferences.*; diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/BaseAndroidUnitTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/BaseAndroidUnitTest.java new file mode 100644 index 000000000..95a6ac9db --- /dev/null +++ b/uhabits-android/src/test/java/org/isoron/uhabits/BaseAndroidUnitTest.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2017 Á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; + +import org.isoron.uhabits.core.commands.*; +import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.models.memory.*; +import org.isoron.uhabits.core.tasks.*; +import org.isoron.uhabits.core.test.*; +import org.isoron.uhabits.core.utils.*; +import org.junit.*; +import org.junit.runner.*; +import org.mockito.junit.*; + +import java.util.*; + +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class BaseAndroidUnitTest +{ + protected HabitList habitList; + + protected HabitFixtures fixtures; + + protected MemoryModelFactory modelFactory; + + protected SingleThreadTaskRunner taskRunner; + + protected CommandRunner commandRunner; + + @Before + public void setUp() + { + long fixed_local_time = 1422172800000L; + DateUtils.setFixedLocalTime(fixed_local_time); + + modelFactory = new MemoryModelFactory(); + habitList = spy(modelFactory.buildHabitList()); + fixtures = new HabitFixtures(modelFactory); + taskRunner = new SingleThreadTaskRunner(); + commandRunner = new CommandRunner(taskRunner); + } + + @After + public void tearDown() + { + DateUtils.setFixedLocalTime(null); + } + + public long timestamp(int year, int month, int day) + { + GregorianCalendar cal = DateUtils.getStartOfTodayCalendar(); + cal.set(year, month, day); + return cal.getTimeInMillis(); + } + + @Test + public void nothing() + { + + } +} diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java similarity index 68% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java index de5823212..f0a3d32a5 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.java @@ -23,56 +23,36 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.habits.list.model.*; -import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.ui.*; import org.isoron.uhabits.core.ui.screens.habits.list.*; import org.isoron.uhabits.preferences.*; import org.junit.*; -import org.mockito.*; import static org.mockito.Mockito.*; -public class ListHabitsMenuTest extends BaseAndroidTest +public class ListHabitsMenuTest extends BaseAndroidUnitTest { private BaseActivity activity; - private ListHabitsScreen screen; - - private HabitCardListAdapter adapter; - private AndroidPreferences preferences; private ThemeSwitcher themeSwitcher; private ListHabitsMenu menu; - private ArgumentCaptor matcherCaptor; - private ListHabitsMenuBehavior behavior; + @Before @Override public void setUp() { - super.setUp(); - activity = mock(BaseActivity.class); - screen = mock(ListHabitsScreen.class); - adapter = mock(HabitCardListAdapter.class); preferences = mock(AndroidPreferences.class); themeSwitcher = mock(ThemeSwitcher.class); behavior = mock(ListHabitsMenuBehavior.class); - when(preferences.getShowArchived()).thenReturn(false); - when(preferences.getShowCompleted()).thenReturn(false); - when(themeSwitcher.isNightMode()).thenReturn(false); - menu = new ListHabitsMenu(activity, preferences, themeSwitcher, behavior); - - matcherCaptor = ArgumentCaptor.forClass(HabitMatcher.class); - - reset(adapter); } @Test @@ -89,84 +69,75 @@ public class ListHabitsMenuTest extends BaseAndroidTest when(androidMenu.findItem(R.id.actionHideCompleted)).thenReturn( hideCompletedItem); + when(preferences.getShowArchived()).thenReturn(false); + when(preferences.getShowCompleted()).thenReturn(false); + when(themeSwitcher.isNightMode()).thenReturn(false); + menu.onCreate(androidMenu); + verify(nightModeItem).setChecked(false); verify(hideArchivedItem).setChecked(true); verify(hideCompletedItem).setChecked(true); reset(nightModeItem, hideArchivedItem, hideCompletedItem); + when(preferences.getShowArchived()).thenReturn(true); + when(preferences.getShowCompleted()).thenReturn(true); when(themeSwitcher.isNightMode()).thenReturn(true); + menu.onCreate(androidMenu); + verify(nightModeItem).setChecked(true); + verify(hideArchivedItem).setChecked(false); + verify(hideCompletedItem).setChecked(false); } @Test public void testOnSelected_about() { onItemSelected(R.id.actionAbout); - verify(screen).showAboutScreen(); + verify(behavior).onViewAbout(); } @Test public void testOnSelected_add() { onItemSelected(R.id.actionAdd); - verify(screen).showCreateHabitScreen(); + verify(behavior).onCreateHabit(); } @Test public void testOnSelected_faq() { onItemSelected(R.id.actionFAQ); - verify(screen).showFAQScreen(); + verify(behavior).onViewFAQ(); } @Test public void testOnSelected_nightMode() { onItemSelected(R.id.actionToggleNightMode); - verify(screen).applyTheme(); + verify(behavior).onToggleNightMode(); } @Test public void testOnSelected_settings() { onItemSelected(R.id.actionSettings); - verify(screen).showSettingsScreen(); + verify(behavior).onViewSettings(); } @Test public void testOnSelected_showArchived() { onItemSelected(R.id.actionHideArchived); - verify(preferences).setShowArchived(true); - verify(adapter).setFilter(matcherCaptor.capture()); - verify(adapter).refresh(); - assertTrue(matcherCaptor.getValue().isArchivedAllowed()); - reset(adapter); - - onItemSelected(R.id.actionHideArchived); - verify(preferences).setShowArchived(false); - verify(adapter).setFilter(matcherCaptor.capture()); - verify(adapter).refresh(); - assertFalse(matcherCaptor.getValue().isArchivedAllowed()); + verify(behavior).onToggleShowArchived(); } @Test public void testOnSelected_showCompleted() { onItemSelected(R.id.actionHideCompleted); - verify(preferences).setShowCompleted(true); - verify(adapter).setFilter(matcherCaptor.capture()); - verify(adapter).refresh(); - assertTrue(matcherCaptor.getValue().isCompletedAllowed()); - reset(adapter); - - onItemSelected(R.id.actionHideCompleted); - verify(preferences).setShowCompleted(false); - verify(adapter).setFilter(matcherCaptor.capture()); - verify(adapter).refresh(); - assertFalse(matcherCaptor.getValue().isCompletedAllowed()); + verify(behavior).onToggleShowCompleted(); } protected void onItemSelected(int actionId) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java similarity index 95% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java index 31857e61c..a86048c26 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java @@ -26,24 +26,26 @@ import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.*; -import org.isoron.uhabits.commands.*; import org.isoron.uhabits.core.commands.*; -import org.isoron.uhabits.intents.*; import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.ui.*; import org.isoron.uhabits.core.ui.callbacks.*; +import org.isoron.uhabits.intents.*; import org.isoron.uhabits.preferences.*; import org.junit.*; import org.junit.runner.*; -import org.junit.runners.*; +import org.mockito.junit.*; import java.util.*; import static org.isoron.uhabits.activities.habits.list.ListHabitsScreen.*; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.any; import static org.mockito.Mockito.*; +import static org.mockito.Mockito.eq; -@RunWith(JUnit4.class) -public class ListHabitsScreenTest extends BaseAndroidTest +@RunWith(MockitoJUnitRunner.class) +public class ListHabitsScreenTest { private BaseActivity activity; @@ -74,12 +76,9 @@ public class ListHabitsScreenTest extends BaseAndroidTest private CommandParser commandParser; @Before - @Override public void setUp() { - super.setUp(); - - activity = mock(BaseActivity.class); + activity = mock(ListHabitsActivity.class); commandRunner = mock(CommandRunner.class); rootView = mock(ListHabitsRootView.class); intentFactory = mock(IntentFactory.class); @@ -99,7 +98,7 @@ public class ListHabitsScreenTest extends BaseAndroidTest controller = mock(ListHabitsController.class); screen.setController(controller); - habit = fixtures.createEmptyHabit(); + habit = mock(Habit.class); intent = mock(Intent.class); } @@ -124,7 +123,7 @@ public class ListHabitsScreenTest extends BaseAndroidTest @Test public void testOnCommand() { - Command c = mock(Command.class); + Command c = mock(DeleteHabitsCommand.class); screen.onCommandExecuted(c, null); verify(screen).showMessage(R.string.toast_habit_deleted); } diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java similarity index 97% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java index 864adbb77..57aa937fa 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/CheckmarkButtonControllerTest.java @@ -27,7 +27,7 @@ import org.junit.*; import static org.mockito.Mockito.*; -public class CheckmarkButtonControllerTest extends BaseAndroidTest +public class CheckmarkButtonControllerTest extends BaseAndroidUnitTest { private CheckmarkButtonController controller; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java similarity index 96% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java index 8b0886c0b..6f639f187 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardControllerTest.java @@ -27,7 +27,7 @@ import org.junit.*; import static org.mockito.Mockito.*; -public class HabitCardControllerTest extends BaseAndroidTest +public class HabitCardControllerTest extends BaseAndroidUnitTest { private Habit habit; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java similarity index 97% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java index 528d3675b..d1f9d97b9 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.java @@ -29,7 +29,7 @@ import java.util.*; import static org.mockito.Mockito.*; -public class HabitCardListControllerTest extends BaseAndroidTest +public class HabitCardListControllerTest extends BaseAndroidUnitTest { private LinkedList habits; @@ -66,6 +66,7 @@ public class HabitCardListControllerTest extends BaseAndroidTest resetMocks(); + when(adapter.getObservable()).thenReturn(new ModelObservable()); this.controller = new HabitCardListController(adapter); controller.setHabitListener(habitListener); controller.setSelectionListener(selectionListener); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java b/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java rename to uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/package-info.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java similarity index 97% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java index 7e4c8ddd1..2626a138a 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/ReminderControllerTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java @@ -29,7 +29,7 @@ import org.junit.*; import static org.mockito.Mockito.*; -public class ReminderControllerTest extends BaseAndroidTest +public class ReminderControllerTest extends BaseAndroidUnitTest { private ReminderController controller; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java similarity index 92% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java rename to uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java index e51f222d1..3e988fef6 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/receivers/WidgetControllerTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java @@ -32,7 +32,7 @@ import static org.hamcrest.core.IsEqual.*; import static org.isoron.uhabits.core.models.Checkmark.*; import static org.mockito.Mockito.*; -public class WidgetControllerTest extends BaseAndroidTest +public class WidgetControllerTest extends BaseAndroidUnitTest { private WidgetBehavior controller; @@ -51,7 +51,6 @@ public class WidgetControllerTest extends BaseAndroidTest today = DateUtils.getStartOfToday(); habit = fixtures.createEmptyHabit(); - habitList.add(habit); commandRunner = mock(CommandRunner.class); notificationTray = mock(AndroidNotificationTray.class); controller = new WidgetBehavior(commandRunner, notificationTray); @@ -73,7 +72,7 @@ public class WidgetControllerTest extends BaseAndroidTest int todayValue = habit.getCheckmarks().getTodayValue(); assertThat(todayValue, equalTo(UNCHECKED)); controller.onAddRepetition(habit, today); - verify(commandRunner).execute(any(), anyLong()); + verify(commandRunner).execute(any(), isNull()); verify(notificationTray).cancel(habit); } @@ -84,7 +83,7 @@ public class WidgetControllerTest extends BaseAndroidTest int todayValue = habit.getCheckmarks().getTodayValue(); assertThat(todayValue, equalTo(CHECKED_EXPLICITLY)); controller.onRemoveRepetition(habit, today); - verify(commandRunner).execute(any(), anyLong()); + verify(commandRunner).execute(any(), isNull()); } @Test @@ -100,6 +99,6 @@ public class WidgetControllerTest extends BaseAndroidTest public void testOnToggleRepetition() throws Exception { controller.onToggleRepetition(habit, today); - verify(commandRunner).execute(any(), anyLong()); + verify(commandRunner).execute(any(), isNull()); } } \ No newline at end of file diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java index 69797821b..47433650e 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java @@ -49,18 +49,18 @@ public class ArchiveHabitsCommand extends Command habitList.update(selected); } + @NonNull @Override - public void undo() + public Record toRecord() { - for (Habit h : selected) h.setArchived(false); - habitList.update(selected); + return new Record(this); } - @NonNull @Override - public Record toRecord() + public void undo() { - return new Record(this); + for (Habit h : selected) h.setArchived(false); + habitList.update(selected); } public static class Record diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandParser.java similarity index 91% rename from uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandParser.java index 8c228a716..da7d24678 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/commands/CommandParser.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandParser.java @@ -17,15 +17,13 @@ * with this program. If not, see . */ -package org.isoron.uhabits.commands; +package org.isoron.uhabits.core.commands; import android.support.annotation.*; import com.google.gson.*; -import org.isoron.uhabits.core.commands.*; import org.isoron.uhabits.core.models.*; -import org.json.*; import javax.inject.*; @@ -44,9 +42,10 @@ public class CommandParser } @NonNull - public Command parse(@NonNull String json) throws JSONException + public Command parse(@NonNull String json) { - String event = new JSONObject(json).getString("event"); + JsonObject parsed = new JsonParser().parse(json).getAsJsonObject(); + String event = parsed.get("event").getAsString(); Gson gson = new GsonBuilder().create(); if (event.equals("Archive")) return gson diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitFixtures.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java similarity index 97% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitFixtures.java rename to uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java index 87066ed6a..6c6ac612c 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitFixtures.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java @@ -17,8 +17,9 @@ * with this program. If not, see . */ -package org.isoron.uhabits.core.models; +package org.isoron.uhabits.core.test; +import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.utils.*; public class HabitFixtures diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java index 384eadbb4..0cc34b800 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/BaseUnitTest.java @@ -23,6 +23,7 @@ import org.isoron.uhabits.core.commands.*; import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.models.memory.*; import org.isoron.uhabits.core.tasks.*; +import org.isoron.uhabits.core.test.*; import org.isoron.uhabits.core.utils.*; import org.junit.*; import org.junit.runner.*; diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/commands/CommandParserTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CommandParserTest.java similarity index 98% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/core/commands/CommandParserTest.java rename to uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CommandParserTest.java index d8eca8ea1..07ad02c02 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/core/commands/CommandParserTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CommandParserTest.java @@ -23,7 +23,6 @@ import android.support.annotation.*; import org.hamcrest.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.commands.*; import org.isoron.uhabits.core.models.*; import org.json.*; import org.junit.*; @@ -32,7 +31,7 @@ import java.util.*; import static org.hamcrest.CoreMatchers.*; -public class CommandParserTest extends BaseAndroidTest +public class CommandParserTest extends BaseUnitTest { @NonNull private CommandParser parser; From ab09eb8a03b38fce5b9ff22e91322e480bde8831 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 28 May 2017 17:04:04 -0400 Subject: [PATCH 21/27] Update CI build script --- build.gradle | 1 + build.sh | 14 ++++++---- tools/coverage-badge/badge.py | 11 +++++--- uhabits-android/build.gradle | 49 ++++++++++++++++++++++++++++++++--- 4 files changed, 62 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index 6b38608fc..9cc9777e4 100644 --- a/build.gradle +++ b/build.gradle @@ -9,6 +9,7 @@ buildscript { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.6.4' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' + classpath 'org.jacoco:org.jacoco.core:+' } } diff --git a/build.sh b/build.sh index 152104e7d..1059e375a 100755 --- a/build.sh +++ b/build.sh @@ -157,8 +157,12 @@ parse_instrumentation_results() { } generate_coverage_badge() { - log_info "Generating code coverage badge" - python tools/coverage-badge/badge.py -i uhabits-android/build/reports/jacoco/coverageReport/coverageReport.xml -o ${OUTPUTS_DIR}/coverage-badge + log_info "Generating code coverage report and badge" + $GRADLE coverageReport || fail + + ANDROID_REPORT=uhabits-android/build/reports/jacoco/coverageReport/coverageReport.xml + CORE_REPORT=uhabits-core/build/reports/jacoco/test/jacocoTestReport.xml + python tools/coverage-badge/badge.py -i $ANDROID_REPORT:$CORE_REPORT -o ${OUTPUTS_DIR}/coverage-badge } fetch_artifacts() { @@ -180,7 +184,7 @@ fetch_logcat() { run_jvm_tests() { log_info "Running JVM tests" - $GRADLE --no-daemon coverageReport || fail + $GRADLE testDebugUnitTest :uhabits-core:check || fail } uninstall_test_apk() { @@ -199,8 +203,8 @@ run_local_tests() { parse_instrumentation_results fetch_artifacts fetch_logcat - #run_jvm_tests - #generate_coverage_badge + run_jvm_tests + generate_coverage_badge uninstall_test_apk } diff --git a/tools/coverage-badge/badge.py b/tools/coverage-badge/badge.py index 3d64e3247..08d8733e7 100644 --- a/tools/coverage-badge/badge.py +++ b/tools/coverage-badge/badge.py @@ -44,10 +44,13 @@ class Devnull(object): def get_total(report): - doc = BeautifulSoup(file(report), 'xml') - tag = doc.select("report > counter[type^INST]")[0] - missed = float(tag['missed']) - covered = float(tag['covered']) + missed = 0 + covered = 0 + for r in report.split(":"): + doc = BeautifulSoup(file(r), 'xml') + tag = doc.select("report > counter[type^INST]")[0] + missed = missed + float(tag['missed']) + covered = covered + float(tag['covered']) return str(int(round(100 * covered / (missed + covered)))) def get_color(total): diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle index 0186097a7..79b59cd81 100644 --- a/uhabits-android/build.gradle +++ b/uhabits-android/build.gradle @@ -23,6 +23,9 @@ android { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } + debug { + testCoverageEnabled true + } } lintOptions { @@ -56,7 +59,7 @@ dependencies { implementation 'com.android.support:support-v4:25.3.1' implementation 'com.getpebble:pebblekit:3.0.0' implementation 'com.github.paolorotolo:appintro:3.4.0' - implementation 'com.google.dagger:dagger:2.11-rc2' + implementation 'com.google.dagger:dagger:2.9' implementation 'com.jakewharton:butterknife:8.6.1-SNAPSHOT' implementation 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' implementation 'org.apmem.tools:layouts:1.10' @@ -65,7 +68,7 @@ dependencies { implementation 'com.google.code.findbugs:jsr305:3.0.2' compileOnly 'javax.annotation:jsr250-api:1.0' compileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' - annotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' + annotationProcessor 'com.google.dagger:dagger-compiler:2.9' annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' annotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' @@ -75,16 +78,18 @@ dependencies { androidTestImplementation 'com.android.support.test:runner:0.5' androidTestImplementation 'com.google.guava:guava:20.0' androidTestCompileOnly 'com.google.auto.factory:auto-factory:1.0-beta3' - androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' + androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.9' androidTestAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' androidTestAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' - testAnnotationProcessor 'com.google.dagger:dagger-compiler:2.11-rc2' + testAnnotationProcessor 'com.google.dagger:dagger-compiler:2.9' testAnnotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta3' testAnnotationProcessor 'com.jakewharton:butterknife-compiler:8.6.1-SNAPSHOT' + testCompile 'com.google.dagger:dagger:2.9' testCompile "org.mockito:mockito-core:2.8.9" testCompile "org.mockito:mockito-inline:2.8.9" + androidTestCompile 'com.google.dagger:dagger:2.9' androidTestCompile "org.mockito:mockito-android:2.8.9" androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' @@ -95,6 +100,42 @@ dependencies { exclude group: 'org.json', module: 'json' } } + repositories { mavenCentral() } + +task coverageReport(type: JacocoReport) { + + jacocoClasspath = configurations['androidJacocoAnt'] + + reports { + html.enabled = true + xml.enabled = true + } + + def excludes = [ + '**/R.class', + '**/R$*.class', + '**/BuildConfig.*', + '**/Manifest*', + '**/*Test*.*', + '**/*$Lambda$*', + '**/*$ViewBinder*', + '**/*MembersInjector*', + '**/*_Provide*', + '**/*Module_*', + '**/com/android/**/*', + '**/*Dagger*', + '**/*_Factory*' + ] + + def androidSrc = "${project.projectDir}/src/main/java" + def androidClasses = "${buildDir}/intermediates/classes/debug" + def jvmExecData = "${buildDir}/jacoco/testDebugUnitTest.exec" + def connectedExecData = "${buildDir}/outputs/code-coverage/connected/coverage.ec" + + sourceDirectories = files(androidSrc) + classDirectories = files(fileTree(dir: androidClasses, excludes: excludes)) + executionData = files(jvmExecData, connectedExecData) +} \ No newline at end of file From 94025c5262d9e6fbe911a20643c5a2b32bb847ba Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 28 May 2017 22:03:54 -0400 Subject: [PATCH 22/27] Add test for BundleSavedState --- build.sh | 9 ++- uhabits-android/build.gradle | 5 +- .../isoron/uhabits/BaseUIAutomatorTest.java | 58 +++++++++++++++++++ .../uhabits/integration/SavedStateTest.java | 45 ++++++++++++++ 4 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUIAutomatorTest.java create mode 100644 uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java diff --git a/build.sh b/build.sh index 1059e375a..12df11b39 100755 --- a/build.sh +++ b/build.sh @@ -120,6 +120,12 @@ uninstall_apk() { $ADB uninstall ${PACKAGE_NAME} } +install_test_butler() { + log_info "Installing Test Butler" + $ADB install tools/test-butler-app-1.3.1.apk + $ADB uninstall com.linkedin.android.testbutler +} + install_apk() { if [ ! -z $UNINSTALL_FIRST ]; then uninstall_apk @@ -141,7 +147,7 @@ install_test_apk() { run_instrumented_tests() { log_info "Running instrumented tests" $ADB shell am instrument \ - -r -e coverage true -e size medium \ + -r -e coverage true \ -w ${PACKAGE_NAME}.test/android.support.test.runner.AndroidJUnitRunner \ > ${OUTPUTS_DIR}/instrument.txt @@ -197,6 +203,7 @@ run_local_tests() { run_adb_as_root build_apk build_instrumentation_apk + install_test_butler install_apk install_test_apk run_instrumented_tests diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle index 79b59cd81..633568fab 100644 --- a/uhabits-android/build.gradle +++ b/uhabits-android/build.gradle @@ -92,6 +92,9 @@ dependencies { androidTestCompile 'com.google.dagger:dagger:2.9' androidTestCompile "org.mockito:mockito-android:2.8.9" androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' + androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1' + androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' + androidTestCompile 'com.linkedin.testbutler:test-butler-library:1.3.1' implementation('com.opencsv:opencsv:3.9') { exclude group: 'commons-logging', module: 'commons-logging' @@ -134,7 +137,7 @@ task coverageReport(type: JacocoReport) { def androidClasses = "${buildDir}/intermediates/classes/debug" def jvmExecData = "${buildDir}/jacoco/testDebugUnitTest.exec" def connectedExecData = "${buildDir}/outputs/code-coverage/connected/coverage.ec" - + sourceDirectories = files(androidSrc) classDirectories = files(fileTree(dir: androidClasses, excludes: excludes)) executionData = files(jvmExecData, connectedExecData) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUIAutomatorTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUIAutomatorTest.java new file mode 100644 index 000000000..871614092 --- /dev/null +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUIAutomatorTest.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2017 Á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; + +import android.content.*; +import android.support.test.uiautomator.*; + +import com.linkedin.android.testbutler.*; + +import org.junit.*; + +import static android.support.test.InstrumentationRegistry.*; +import static android.support.test.uiautomator.UiDevice.*; + +public class BaseUIAutomatorTest +{ + static final String PKG = "org.isoron.uhabits"; + + protected UiDevice device; + + @Before + public void setUp() + { + TestButler.setup(getTargetContext()); + TestButler.verifyAnimationsDisabled(getTargetContext()); + device = getInstance(getInstrumentation()); + } + + @After + public void tearDown() + { + TestButler.teardown(getTargetContext()); + } + + protected void startActivity(Class cls) + { + Intent intent = new Intent(); + intent.setComponent(new ComponentName(PKG, cls.getCanonicalName())); + getContext().startActivity(intent); + } +} diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java new file mode 100644 index 000000000..7250c62bd --- /dev/null +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2017 Á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.integration; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.activities.about.*; +import org.isoron.uhabits.activities.habits.list.*; +import org.junit.*; + +import static java.lang.Thread.*; + +public class SavedStateTest extends BaseUIAutomatorTest +{ + /** + * Make sure that the main activity can be recreated by using + * BundleSavedState after being destroyed. See bug: + * https://github.com/iSoron/uhabits/issues/287 + */ + @Test + public void testBundleSavedState() throws Exception + { + startActivity(ListHabitsActivity.class); + device.waitForIdle(); + startActivity(AboutActivity.class); + sleep(1000); + device.pressBack(); + } +} From 745d07024c38952ef0c2c87e63aceda2d301be0d Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Mon, 29 May 2017 08:37:49 -0400 Subject: [PATCH 23/27] Remove unused permissions --- uhabits-android/src/main/AndroidManifest.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/uhabits-android/src/main/AndroidManifest.xml b/uhabits-android/src/main/AndroidManifest.xml index 83816e1d3..ee4fb56df 100644 --- a/uhabits-android/src/main/AndroidManifest.xml +++ b/uhabits-android/src/main/AndroidManifest.xml @@ -25,14 +25,6 @@ - - - - From 223aee3be2abe9de8f30e516ed11a2633ab404a5 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Mon, 29 May 2017 09:14:02 -0400 Subject: [PATCH 24/27] Add Test Butler APK --- tools/test-butler-app-1.3.1.apk | Bin 0 -> 17671 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tools/test-butler-app-1.3.1.apk diff --git a/tools/test-butler-app-1.3.1.apk b/tools/test-butler-app-1.3.1.apk new file mode 100644 index 0000000000000000000000000000000000000000..c17cabad5701b0ec95053e667a6f852e6808fc39 GIT binary patch literal 17671 zcmeIabxig^7s@pZ)y?XVmHPdTWuj$&mf1@l10f_+s0ASxU06^wy2-^<<00+QM)gW z_Lg51jO{GVOr4yW+-+?N6BX?7C2$5n*89J0r)S}0()tu$>qwo&WZ6t#`#WJL<5QTGMF8Dt5 zfRJpZlwym%{%ndXdgJq|hi-o38u8w+r1j$qmyN3cB|)-@6bfS%p;@(3wCxjz>O7}c z_BTvst+%!Z6vi&(^^A#*k4pC(L@Q~{%TwB}-c??av!v@$WKo1+EBB_lhC1!K-1h{P zTOHpj9g}BPJQr5)#|~Seo*Hcv=m!Oz4!-~!Y~-8lmwSYoy(zvKe8qH~%EQyqOmwlS zc1kbFZR2sfz-#6X)e3qrliWg^QrB2i(L7w4rEZmJ8OJ}CZo)B+vc~lb`qX+e+)_FD zoV2@8SU#h%-Ki*k*V5L)J0EAN$v*88D%U<#2Bz;RNPda@y86VZBN@SBzk*l(yh=C~ zwQuGlMDElxUp8z|i9b}at3Of$@71H&SH7hF8ehU*h3DcnY<7HnCl%FsHq_ElV?)2Y zH&>mg;|(>x>2f~C_e`w$a)F1kbU0Ic|InFalgqs$A`JqDOMh*Ff5^(NI{WIDL>7nkX znOW-eMA>)NEB5@GX5{CrO!c*9)(s&W!?a4xn{~M1g;s;F%U*CPsk^5ti?O_<}U!V$+DEB>njP$3VWet6JIJf_mJpxPm#ntczA3jkk5%82~j8}{KV3{6FH zMz%Ex^|-Z>vC(G>t1n+Z8(Dpz9JjWyGO{#+-9^?g=VqlNfng!1hj2nCXNFMD`1Ug_ zHr7}X>bQWjy#|ZzUZb#+wagVAh6S)t86a1v7c?U)$qXeG(Patugkj5 zxu!X_@-{rjSuQVxWIE>5gxsAW$B?O+%HZR6jN`C4`?}OJbi_SHnwFi}3l^^mjkd7V zFTk>M9irBZbSa073Tgttj6|l~APOs;h9U440ZH^01Nv%BsL7@Wer=IGHOMdrq z=}U6!ZvxnPR0J1PJdr+rdwC!O1gj=rzrya3mJ?u-M>z6Rract3vrfg2w8ab7gCO7I zxC`L*B@8tNk&oNQ%&=IGuiM1m`m>>HyC)NOO;AlxFa2tbuGe_mIJ!o#8i+l7n+i~RC>RBImYX$%uhoh6*-xAtH#sZt3; zNVfmxpe-fC+g9_$HI{6{-tNU$! zTE$`6nwDXYok83!hi#s#E(jAPwo24;N-7KymkCTynU^`6cc-CZ@=gj?tx=v?i$1zF ztg{cN=gFB~bpmIe^apEcjy5jmbA(CpDfSgJZCgd<`yj`2j!oJD#0PLjqU^5Or<0-h zJzy3gK6eN{7i$){S*%I-$FZERQzTI;J8T#~S0%=DGxgUP1u}F?A9VA{xJD$F;c2 zzXYd@?e_Uk6Jrr$d#Bm-Jb5lfWx7>q*m$Q+XE&H;${(yUW`ioUlaCADtSUdftQz)z zayozQ@RN5)tdVuAyR0mbK@YzZTD`Q|l0^M|JY7D4^%Io!#p|g;UBO}^5&}U-38$RF z$>(t;qdKDIqFk#| z{4#CZ?%y=`@i%i|!d>ejHNh5bzHuu@CT zbd*;ovb&LtlU~|1G}3+^B!FFCiYg6B<3Wp9QFX6INmXQ|93ZXUbXEH3iNqKWuF|E5uLLgeA-xSiCzu z`Dv(d*RH@@Of--;A_EN@>c7NjOv_uI6eJx)O2 z|8Aa|=$VMcce9Yao9E98@4te&f~ca5q=c#(lY*pvl)h3g3r^5^`i<}nN;$kmq+Gj& zgyd`#3N_o=@Dm@uB#eEN45&jo5|3$u*CPv^-g>=n1Rl_J_n^ z7Irjl&^ zt$SPQ^8gy(ZhBrBlPoz^5ZVxAHy=+;-55<}H#c*O7X<~Jq_tuus9rt2M$3b4YO|g9 z^!eYWm6&ZFWkFJJuKMZ^eL{J#sDz6xs}e{1yeyrg6n^;1_SDPZp0VF7$Pdza#f8B$ zW2HC{ZY~h>di2E!gJ^W6Zn!R(M2^F10}i_pjfkpYwcwn=umPIjQUTlD`Q38eULpqQ zI{|b?m@MD~V0K_<(4ByG#2s4_9WVk&BFHT0EGS>(7tEBI$TtY`?%&;}-KX7|-CbbW zFp2;rh_VX@xA)2(LI+{$Gmr{c)m^Jm4>b!BC4xQ)ZUfdDU|28G0my=U!*{TyvI4k5paNMgEP<#%Tp*H>8NLeABs?NGG1M8jFZ2s8P0x-E^i#lV zcSm=Ge;MI5)Ct5HSQZQcp?GFDDX^_OJ0K`C#oS2vf)|J)Vu?LP1pEZVx!}2w11gZ% z(=S76fa!~1@W2ZozJR+!44zZz0Lr0U0jNO5_v=Y@69>TKB%?G#xI-DOOi^9nTtLUn zeY=DR_kTCVB+?B8On`1c6$CSY8KMhJi+Rf12(uc22e1mciqZ~fhuS&qPJ!45NAFev zs&;?t{?(1%trUPAkQ`tL(FI`up$KLVb`I_bW9i96198 z5rWi+pc%HA;6W4U3Df}2ylZd^AckOu@B^$v*Vj$?86hh}&qC<>U;D#4Ksi7-AUGhp z6Y#*bqhRHXt4l8Cci7;BOBQ2KPm2hj@2~I+$%}4lvtpE+g&_044x3m>U?i zf3g4my9G8Niv8XEyTEz(dz--QjA)fn%E5H}6@fN6#IRt*5N8l?5D!on)ZJf+=5du# zY@l5M`(R!H(cqc@Vwg%OJMc5;Gl))TZS8Bw!<>wyzM+d*`~dPBGqJ=lxfqmDt*1Okp$(~R4U-;C{!=#KoL;>(PpWS!Ta)l5-M#XNn`n0S^v9B>|j3Nd}OxK!5jV8R{U=6_g0T z`2f@ZJ~tpYKmp&ngS@k0gy8iM^}zMu^`Ku6-iHfy!3vZG(g8nQNC1t2{O>++{`1m= zu1KqN8l~cQR_Sy!X@_`WwpMzA2l63&qOWB|286=g41k0nS94*wUTjVkB`yDpJKsXW zxa#4YKRQq0j(N(_&Y_!HCcA>mINKo>?HXr}lQbT5GA-BKHs@`Wu+kY{Y9&h{y~3fD zYU_A{ft_rX@?nFdp?aIO{As0%kDcirpq3|0My0L*H zT{<7c7m)JdbByn54C^H^`(-xU+;s-+E84Un_l^pPTm7j(o9M;9tlk(!zZ9gQbq&uz zgl`tJQjSD_s3;Ll>zSOFt#M-~aSo9w8T45YgT#-$iP)$yhw+A1v`HCkyFOw$Wz>+u zg53w%nRMr&b%#T0QgN2%nlg}$FZaq2T)*H+xAIB%$CVexE4PGj{((8BVCBI+#%p`t zJ=#69+yTvYr^KBboabF>&hAZPj+|vIO;yhCK)w>$N!e1&`m{zk9Vt}NE>6t4+6nX}^$p88^jAMRAhy-P56ncW2WWiJLmdT5 z%J`Yg2jEvfuY5)64-5+ZvU3t|pwxZ4w){}*WAP^a@VC#MU-RgjNr~-!nG7XIM_z;U|eI zwU;uC*XF#CAj8<(?0CWm-vC^ zl&EMS@#YIZ&V5(yx|O;;Cz+oRF(;j2*#Voxae}u#nW2Ixm8IIGB&*>_;;JKM6Tz;D z{B%mr@o(=+Wk>piRrrLEl!C9K3p1pXiKX6@0#naq$P7hoIMGo1Dp@%ObQsR8n6!MF zlTbUxFY@HCAL~ksafytmw$0Nq$u!}=abJP0O;1*L+Z+|s{ zQ-^I0M`rOQDlOKd+IBUIui39@VAH6S`tbOWg4#5gZH9?(bp=5KDx}*t>19|wry3#t z=z)yPn;bpF^ZVz`qY~By;&7Q5TUSgoic%83`FEiNzt8gX=4TrmzEu8i&C`ZojyB-b zJ8=WfD@xl}XNB`$XomelulNUcS_Wds=aSKB{NxVt&2w#3A88YkgX7IK`>j{e$E8y57QFYHaeecq z>H4r69XaHb(DH)pTPgXNNdwx$F_ikbd;PeCwHsab9R|^PM(xe7}}Fr}gKH zvy0Cnn-e~{?4GWuOg5tIQnr65PC{)Lln3q)LlB~G#8%s30T91& z<1D%JC6dAK;@7?E^2^65;`Qii!^)u0nGq%E1N9O!KF_4$lOI*buf86d4oPM`LOg`~ zA@LZu45ED4?AbxhzZ7pr;k_E-@1s5mDE0la*X^i^wTJ={+{yW|=$~+FOeG)pY}aJa zuW+`J-OH?}cmBTlCTwQDYktY~fIdNf?!~4bARR1x$T4hoTaHsq596t#H1VmD%P>8- zRwrTiC^wBjr_`Lh3r(r#d7yHiJt{5B&2nA1wypg<%^E{TXE2_TVQ{jyZlk~9jQac+ zZh@(=b7B*X6%wzth?5Q7d9@$y+2F2I{LgjkiJbM@84Jt0+_Bp$U{&6Ec9@v~^cZ0( zhaglDH8;h=HBhxKf_FxGxm@D6)2d(7o$KxH&o*aYDHpKra~UG#`zCqg`S4Q;^A=k{C?8w#@B+RA***AGeZ0M)rETLD{s_}n2bF2iF(? z%Q5jU90vd3e`c3I5|B`lsx<914gOg_LncS|k(qdcCn|B7J8nfqHa5+En?Tua;WweM z29z#-bqS~YeN1GJr?unHCN5%MA5ly0%d`v~CJpuEZs)Jb)LQ_tPX1`mCeiiZyZWB? z=Nw1%7Ok_R=x(%nZ*Qa?N>gpNc!~0cz>_?mtl~rOo!lf0~JjWMw}sJTE%M@|HR!OyQgp`r7Yh7VF*#eZ=B~i8wVZl)NkwD+V4@g%*RBi^J&w@Y}q5pc)@{@qL(AxZbx~ zWd-3SEvm8K&KIxpr!C@M0kq4y^7|dpSV{^NyljPLGnO2$s#ZyG3Y{LN3b=kt>KUee z#&WafxI%eCFbyk6?yRcXqtW0BaOM&!F!n*J$0)gth1yz8Bkn|e$}>RuYt%O?C(r5>c0rwXMNMcWPpSib1%ec+clXn-@Lf*t$7}@st@< z+BQb0>Pw0G(YUg6qLS~5lm#O>+w=6KUYHda?CC)Q!U~us*}%96k`~xFJJOb4F<-8i zY|?Vu!mL)Yu&wNJbX1(6cIZj`uy*8b3lDaUr$*RzN@Jh7W3S1Yz+0+93GO&a9>1gH zZO{@dTGTbD86roae>8y`PEO(IWZ;k|D2J?6i3N%aEQp%jcYi!-9GKmAh!i}V@_)%t zTjV8v^wla)-;GFh{JeI-rxAhKH(>lj`m#os=9BkMo4D+FZ2v;SzGQC8VqXhNhR;?! zQb$%H)thF}4jTHtTwvXY4D!s}&# ziGA`k=IYS`%rVxuLvWpSfzZcS_OE5yQNFWvlxpSszs!XD_1Ljbx`$@w?d^*c+vfTw zQpV=>Dh$f}P2Vk4U>a7pD6~(mwb3%KSSAqP;+)Jxc}4i@iFx#_d1Gui_NyJbLvJ8e z)*(6uh`KK`&WXFLk+Oqma7(dfBWu-qd&=;rrjFAx&?5B<@9_XeKzj~GAokuhfA^TG z!P}+ZfH|AOjVE6(QATn6)#}EjjW3-D<9vXx?=1!CiBW>n=ht4N;BoK`l3QIP%u*|H ziuaX=7gG99mL>V9k`<~uSV;)4-Fw5k>PUOn>H;=~nmNu5FT8b-j?%~#$43UAlX|}5 zXDsac8V;XoS(oZHv9*{JEYWWV6OQxMfY@ZuG*=ha>owQVXBougk9s@RYG$l9>Z8V?7WJV3?$4H>JN}rbAD--LK0C&X#}q4HA~el7Hx%kJxVTf+Icikpl_{uO(Z-LZXNMONZ~+WgX}sV+;O{b{Gn zicJe&JNwlYa>YOry*K9Nv+#=O9-STwnBgwXc&(~=(przp%bgy=z43)=%6*}Rs8iA@+P0$l;YO}YXsix9sVf6RFKdHsqHG$OWOUym7;ZOb%cUTKYJx{ zB5V7|jg4gcBA@K%q-RzGvz3RSA+9WugzWk#pDe}{`c5)iy0{~v#B-10h0BoyzQ!== z1WJ$bPouD12wYc(xBH>^sCk0vc&DQJKPVjgYC} zx=`9ta-q4IvyGZ>(V9B2_Pc}Y2=O40Rg={n3Vx z6_t8rW1MA9cm~*~=-Dje4I`nOv~)Fl5rpkTWzU|QhF+nZUK?EQ^zrQrNCpaV_tpwN zS#gK>8jTf(O~2hc4GRUcdq8U#FAG$cyIP&GI3s*BT9t~pBTZ5>_dG39uO4b==ysk- zjmaE23l#Nu%7u0ypL| zGO=-PCuKj?;x+O~Kc>(!*r%q5y(xs~{dqXqs!>u$i&I&t<^0F;F2rV5%%f-+N)vmS zbsl9wep}l>xZ#QKv$_aC%_ME(iY(K4%bikfvoWkTGFM}^yLR8m%B3s&^!mKGqzNTl zZ-GZxt#a>Zj=c&xi_sOwnf3~W)TUOWqxM6q^`mcBonJzn2rp-p!W>q@^KA`ee6&5`f9@~)lm zp~7K?ri1lqpW{qSXS*k17MWYhdL(VqW>KcNCn5Ds1n!xKrDyFv)tfIFc_vW_jI_@P zj9^+$IKCE`$G*1nR%E*t`gtjz88h)2imiTkx+yh#6&Lj#eZLovQ{p z%b9Pxp4@;sVoDbs`gYq`?%V?Ueco?z1%G+9A8rkD3nPL;IPSqDeSv$2u7)(M{jsgp< zsnEPL2{+nS-6_HFtTGF!taVvnujme(>qbM$I`yhyq}M<)jJG*a-@B!Y?X3fPPCb6K)!uOxeQ&f34TPv zpHj+aijJD~8{9(jvej->!`FWv6l3mQuIKj7c7{2jf-=-%3#62NX-;wNVN#{l|^(@+2!n`f@Iw7z^eZ*4do@gkk#ddDX5f1B@+yx5k^tuzYcx?I^s= zkZh&Ae94?vN^x%iT5c_U@rrtApzII6Zl<`7aWO9cY#d1tc#+W1SXx<{RISU82NM{e zOwyTT6BW0|>Eh;A&&hq;XnT5Oy&_$g_A!9fP~ZcyEn=VdtEgYSRh4~LbP|UIc$P0n zndj(!Hft9yXgh1sodWGg|LZp(%0s`2uaf(qldCgsA48btRJ5|8fRlUqN@s_F=?a35ha;yiXMi|m|^t>~tCHrW*)?OnJ#C<_?Pp5xy< zKtsQLK#YFeek-BI`w`J|+4qtsRVG+ZqW}gGt1{kNWBTidLPAGPVX=poF1P(iO-)6y zrI^%+WT{=4pr7WY!0p0m*cJykO=Qe^S4N)q{zVM>n}iF-8Z?7(_G|Juyi zz}6`b4i(k~sBR!^|A_o92E*?|x=}4G3t>L};phzU-Xvu_2TH(uunM}@qQER%l1fs! z*qrAG0j})FL%s=Ed5A+ORs$~9I$VS;*OJ>&vw2exaP#Gx19N>fWBmp;BBCc*XNgj! z;RCah4aw1c2%22N-A8%G5CcOD`Xi8obI5pgg`czkagm+*5v!SQs7uWJlq6r10+QrU zr;&Q+3(X1>>_q2>kKd*ojH;Kh;eTG1o%INP_|4%8`SB7uEm=nV4$Ns<1as(0x`6K& z8trjd^nJ36)GruhuE{+1I6D?MhB`e6Mj2GrMtn{q)4kK;fIZ(B8;CJ^T8-z(7W9j* zuYNQJYYd03ehdVw6P)JeSiJrL^l56dRMHTPDQalAWoLItk$K!L*HUE8s)Z; zn%nmf{E|u&5&;b)Y=NVJGs8@^sNc^Led>a=-8MPHGjyqWgU~u2&|7qU@?WVq{fZ4B z7zLf8pi2eCjCYxbt?)~p&Q*Eixu)}Cp{;}}hAo@sq4|#M6P-&=C0#h@1-1~vT;|+$ z<|;4x{h4uy#&;T&?3LESkZjO5W}4&f>t$C)yf2#$XDR{CGe$&c0}eMKQ0yW9&Beh89=9Uoye-F8^qn%3N5*+NtudcSf1{){r16-XJ(AD7J_|RJ4$Z;szY!{;cJ_W>mD$%ZEc8c zYV(ryWRZ$CTBekKm0gHs8t(#TjH&ZWoOm(pgFG2i{NVgs$KuhWM&gbwv6M6SUiQa) zDeapR8G%i6)6jSZG%+S_h&stxVGQwKb9v9JVMePDh| zW-Rp#R{JSv;;`1WBjK?879z3_mbPI10rvif3v4jVt6tF2`!7)j_g?LXxzAq;>%LEi z@Il+el!BB)h5f9WXa{yOA{(!jc>8a%wdX*S*QQ*rC_J5`Y4zxXU#r7Uvu##PT_w{X zlJvYL`tLd$D-GyQEDuj@kC$hg>VBF?ZDFj}#%2hnH)X9Y%r8wBQ&^ZOxyeaM8D8%t z?cF7v!rcjAM&rVaIdA|_NY1IZj8PJObNG|jQZt84M#vCQ6r|5>m&Jc~tfaSkrltMf z%~XmaM#kSZu@G{yjBcgN*QPCum3ErN#=k`QB!k!W8yks8oFLqad~*`G6HXpGJI%ZI ziB)OHBln{dDFfsbyeGzeJa>iBa0*3(uQZ--0D@xaMvApgng+{ng28e3=^%x8Qp)gY ziib<-q){bWR4|XD2d%yii_IUC7Bm8=vK?W%r=*SXj&m(={Y^ELsmE4FHl()Z^pnsw zU=AW1OH;#!%MS?1hx~4+D-z3ZIEO9S`r!Og`oqKdKCb|2SG)jic#A(q; z`r(KAPoF7=Y^TV)S1^#c`pOcIQwVkB#|apW@O%`7`$FOwmW(hO#KVGtL4~5rL3Z}% z$lgdB)|f-&zQpl>1c>&|82eEru7a0bQHRf0L}04;a;t>OLR+32-O_Q!n*laoO&~i_Q33-6s&_{d_>moVx0U#rr$Ic zJKKkIQsd%Xe~Wm;Wx8hvBE?CR7ablMw9$GvWmakR`(UyP^X@`5$qZMXt$Iu;- z=)fUaDMML$XzLX?&3TF77rw*+gjgb!g|sysq)%4MWnOf z(Y^2(ITlqbNjk}=5XBfMQ&Ka>Pr0C}e#X>h!K3Nnu7&D^qsgmckjtVaUgXM(%X-AB zv5%{G7&qU+V&QG1)hYzs-$;7`6*RtvlL?}Ae;1bw=>aBJB;d2Iwd6I@G}VaKlb-8J z;J48I+NOQT`_37|$i|dphE<{?2*tA@g>rQXN42)d@iuQV9klF`bj<6X2azPcBv4o? za@pMjrWF=1bxiw)F2PgLXQZoQ>GC+mac`4Iie#nnR)j-48YEozi(PhRqL$4$BUiQw z4?U@ulS>`L zBH*`EoXs09A31xO&aE!vMY8_mwB}3c)maH?9HyKND?3|eiNplDwcFdFBG;p3F|LXw zw9}?u?67JGetyep!ml6XT<=Tq7LzRe=NvJ{u}A-ClTXhHJ$e<|)@Jv|xwTWxNK6IAvV@t^35|uoni8 zzonpv0z^e=IIBqS0YUCXv_@tioLdt@ZCNmcEmHjz8?$bJM7zbvRit=(xx5>%Nc(Z) zRg6)N@w|GZL9@Y{^}{lAiRkkQ<$mNTGQoVqIs0sd@Q}_FxF6kVARN6mXW4j)0>oeu zGfiT~+NoZ9!ZAmil8!E+ZWb`K->ez ziJ7nwTPeHD*qX0}^yqhP4Jo{ROv0Z}lv`P$9$|9O#%)9lRE zJO%q4wmVaU{nYpn+_q@VC8fI-YbG8CjIMp5O6!t`JweSw=Z_tlXL)GrNGN`^3vX0K?A6>kbubN4iKE&%)`m07 z^ecYliMCU&z0vFTrk@)){CZ`%9%8n=382hJ#x&5vZlx-mt-Jf_Qp>uF)U)KJIjqsS zzcS|kU|bI39?}uYj?rdrt4(=LT-xW-P~SvFwzlQ2J7lkr=jU1IFHN`#E{oi=fLPFC z3~qc4csy(PtX!xPRNpmx2upGa+WC^Z*WTUYR3ckcIm49URaasuRHPQl4aq{eEX2jH z

EQ+X6#u&mXNYVSl_3xUXEenOB0stf`XH(N|Vey;0qOyZ^ObD-v?4DyX&u67v@vWVp;(&erA4H>Q*irJSB*&byg(sLFjQT>xFXCa zSe?hRcv0A$(V!;uL9XzPn@S!XLDfrV#9ZQ$knfj(RZBTZGzw>8;wzN1I9n^~F#=mhjaF;ujwJG`mlg z*u!l*-4lXBZJ(k%%kHxAvfCvye;h9R(t}*#`qo}dQ>QPB4mlL3X}7izZgp=$>dRDE z42!YrE4v^0o;x)3a2InV_I0$knefZXC{7t%<(bVSxNIBbN2fGM1H3!#oXm!N#p&Bc z9Zv#PlT5*m=)KM7NYV{M)8HAkgU$oZYj{X< zbx*L;gKB#3AB2mhn2gIRO>E|FU*b0#ag%vNO#!U^UDh6lg-I}0xL&~~xF+YbtghSe z{XZ(docvIa6a)w~3@fJfua?t1rn@W^CfP5n)EQJvnBQj>)(wnLGiWfbjMX}EQu(f+ z=v%dzBZ<8#l}|NL&$FHq0w10f`C783E~(zk_cH3Vx7_%xybEQ#h26r5(mk^T<&H(i z&N*&t@wvMtz&D_?EX+7FoI3?~)rC1VoL8(JwZxC--t)8IL>fgj`G4 zdMgir`CGhOVVA~-KkCd|a}fzPf;Yh`7snUHx{teSh?3F^lbhu@_dYN0Y(%gCm~U7( zE|ZB|2c49d4TyG`CoYp09!D_wFC1a~Jd6fN5pR&4ad{k($)nU;s?18Za`n9t4VPVz zOzh95ofXPl+1)BEHgyc%o;=!Lq&H9{smIN4MjsLHs#iO}ce8=JAwKOd-zV|}H%*qy zI`MG{kIZjq90ma7WwwdW8cc5a*&~8GO}tr`btl}fY1;vtE0?psSVB?jkqDL%S~bn9 zBCp=&+RisU?;(E^zzF|3z`WG-7ak#gbPx4=JStxr@Yt*QuuCq zrayGuWoUCbcpiG$)n#)#c;0-`r9KYo!LZkSIdv+2>XLHz2ci7ExBY!1`+NGfIQU5f z902%}kpa*EM^h(z7e|x#-R;JXP9~g7-~dPfH~{gl{&ye%01Q9?VEL>5BmJJcE_^x;ZY=X_ z(B4?}yG;3eW(kBWVF`qY$$Ui(FIEf-y?y6K|%po0uope zSm2-`)FGkK!PQk+(OFRcG+@!;#f)t%&FmfRER9*QSTO!DVbGBj>|N}fjV{5J>Tf8#*>H;0Uc0MA%3yJS-fn zoNR0yESxMl*huW0EW9kN|7`xBdfS0uB>!q)Fem^-AQ;m7!vKQ?4+H}PWVl1cl_Tl% z5UiJ)o(vWN?6{;6Z5?51NKiYKgZav~8uS5a8($^ouSm%J2gVeg3Q} z$P3~u$YdZ_!DNKI;V1B*2A%KHA-s%OGGm;lKl*Q4SI~uUaN(*P-P1`k!qr07gczWe zr}UJ%30eSJj$U_dwK^9Mma!i5jo>o4OE`))PMaF*Wg)X*@+@B_7}S!kCb;Gm9^v_; zqB-(g%j9q0H!DzoP3JERQL8{yeZkmVk(eVQS86*HNG~{j99N@4S3XhIfa$W#1Igz2 zG~6GNAi)*&)Mt^3Fo&I@#)R>e>BRb9emY`ul8<8XOEFKj4KW;E{#! z-Ejz!A+aDaly-9J)-qaY?+G14`u2ZClLYssvIGqM=_iK_=wS)y^#32v$qh&=2uS`v z)Dr^#WyT@?845Zi6bl3x80cT!<9+_Uy9XFRlTxL5iI3Q69mQ5MJ9v5C0RuoQ5SlaQ zz2M#?ST&04SLV7$%B0aVU_8;syuiNx={Gzu6l44ao?iz~OcF{VFq<&2o}NUyE3{!s zhW0$@4tWi2fl=Mmmu&k$A99d&9(^j6r!6dy!Y`kc(mI!s&?-9ah_L3D6RTHFH}}O< z)tyA;6-9D(tDPrCJGkE0mH?jd>$MlCB7c!xoo}j<%{6tJf8rnFdwhd^&wt|FpWsV>A>OQyMc)t(`c)4v z){a|_z8E0X29e(*J2r=+O+y0!&DX_`i_r}ydMUYSKPWLGm)!JbO;u@vrCNrye7I*A zYo(!!_%%DvlrDTYXD|U|NICh8{QTuD7ktcz!hP(^JsT-$mCG90x{QB_;vA}Y6oMr}%21xQkLHfu*~X+Rj3sczkAa_fhTJS`queZ5k# z2Z38~-ny{C|X#zu%vt z%5o&CmgXcMZR|~~NjTV)<-owPA^yD0|L3o7{PDRzD}%;>KlT6cEsj45aQ<2j{6oQi z;`slF{UhDKzsUa!0Qxto|3Ah56HxoNFaS{TuK(Y~RVDvZ`akie|1CWV_b<}_f Date: Tue, 30 May 2017 08:19:28 -0400 Subject: [PATCH 25/27] Add missing tests for RepetitionList and Habit --- .../org/isoron/uhabits/HabitFixtures.java | 4 +- .../uhabits/io/HabitBullCSVImporter.java | 2 +- .../isoron/uhabits/io/RewireDBImporter.java | 2 +- .../isoron/uhabits/io/TickmateDBImporter.java | 2 +- .../receivers/WidgetControllerTest.java | 4 +- .../commands/ToggleRepetitionCommand.java | 2 +- .../org/isoron/uhabits/core/models/Habit.java | 8 ++- .../uhabits/core/models/RepetitionList.java | 17 ++++++- .../uhabits/core/test/HabitFixtures.java | 4 +- .../isoron/uhabits/core/models/HabitTest.java | 50 +++++++++++++++++++ .../core/models/RepetitionListTest.java | 48 ++++++++++++------ .../uhabits/core/models/ScoreListTest.java | 2 +- 12 files changed, 118 insertions(+), 27 deletions(-) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java index b8641c46e..3c475a0a0 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java @@ -73,7 +73,7 @@ public class HabitFixtures 81, 83, 89, 90, 91, 95, 102, 103, 108, 109, 120}; for (int mark : marks) - habit.getRepetitions().toggleTimestamp(today - mark * day); + habit.getRepetitions().toggle(today - mark * day); return habit; } @@ -108,7 +108,7 @@ public class HabitFixtures long timestamp = DateUtils.getStartOfToday(); for (boolean c : LONG_HABIT_CHECKS) { - if (c) habit.getRepetitions().toggleTimestamp(timestamp); + if (c) habit.getRepetitions().toggle(timestamp); timestamp -= DateUtils.millisecondsInOneDay; } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/io/HabitBullCSVImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/HabitBullCSVImporter.java index 891d5bbc9..cbfa366c5 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/io/HabitBullCSVImporter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/io/HabitBullCSVImporter.java @@ -108,7 +108,7 @@ public class HabitBullCSVImporter extends AbstractImporter } if(!h.getRepetitions().containsTimestamp(timestamp)) - h.getRepetitions().toggleTimestamp(timestamp); + h.getRepetitions().toggle(timestamp); } } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/io/RewireDBImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/RewireDBImporter.java index 7082ed1bd..11104c9fa 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/io/RewireDBImporter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/io/RewireDBImporter.java @@ -101,7 +101,7 @@ public class RewireDBImporter extends AbstractImporter GregorianCalendar cal = DateUtils.getStartOfTodayCalendar(); cal.set(year, month - 1, day); - habit.getRepetitions().toggleTimestamp(cal.getTimeInMillis()); + habit.getRepetitions().toggle(cal.getTimeInMillis()); } while (c.moveToNext()); } finally diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/io/TickmateDBImporter.java b/uhabits-android/src/main/java/org/isoron/uhabits/io/TickmateDBImporter.java index 73a8ba6a0..fc7e7e05b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/io/TickmateDBImporter.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/io/TickmateDBImporter.java @@ -100,7 +100,7 @@ public class TickmateDBImporter extends AbstractImporter GregorianCalendar cal = DateUtils.getStartOfTodayCalendar(); cal.set(year, month, day); - habit.getRepetitions().toggleTimestamp(cal.getTimeInMillis()); + habit.getRepetitions().toggle(cal.getTimeInMillis()); } while (c.moveToNext()); } finally diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java index 3e988fef6..5cbb3a1a4 100644 --- a/uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java +++ b/uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java @@ -59,7 +59,7 @@ public class WidgetControllerTest extends BaseAndroidUnitTest @Test public void testOnAddRepetition_whenChecked() throws Exception { - habit.getRepetitions().toggleTimestamp(today); + habit.getRepetitions().toggle(today); int todayValue = habit.getCheckmarks().getTodayValue(); assertThat(todayValue, equalTo(CHECKED_EXPLICITLY)); controller.onAddRepetition(habit, today); @@ -79,7 +79,7 @@ public class WidgetControllerTest extends BaseAndroidUnitTest @Test public void testOnRemoveRepetition_whenChecked() throws Exception { - habit.getRepetitions().toggleTimestamp(today); + habit.getRepetitions().toggle(today); int todayValue = habit.getCheckmarks().getTodayValue(); assertThat(todayValue, equalTo(CHECKED_EXPLICITLY)); controller.onRemoveRepetition(habit, today); diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommand.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommand.java index b2d2a0722..bc9e4b391 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommand.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommand.java @@ -43,7 +43,7 @@ public class ToggleRepetitionCommand extends Command @Override public void execute() { - habit.getRepetitions().toggleTimestamp(timestamp); + habit.getRepetitions().toggle(timestamp); } @NonNull diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java index 0afcacb34..15c0aba07 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java @@ -322,7 +322,13 @@ public class Habit public synchronized boolean isCompletedToday() { int todayCheckmark = getCheckmarks().getTodayValue(); - if (isNumerical()) return todayCheckmark >= data.targetValue; + if (isNumerical()) + { + if(getTargetType() == AT_LEAST) + return todayCheckmark >= data.targetValue; + else + return todayCheckmark <= data.targetValue; + } else return (todayCheckmark != UNCHECKED); } diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/RepetitionList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/RepetitionList.java index 8d237221f..db1346cb7 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/RepetitionList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/RepetitionList.java @@ -107,6 +107,7 @@ public abstract class RepetitionList */ @Nullable public abstract Repetition getOldest(); + @Nullable /** * Returns the newest repetition in the list. @@ -184,8 +185,11 @@ public abstract class RepetitionList * @return the repetition that has been added or removed. */ @NonNull - public Repetition toggleTimestamp(long timestamp) + public Repetition toggle(long timestamp) { + if(habit.isNumerical()) + throw new IllegalStateException("habit must NOT be numerical"); + timestamp = DateUtils.getStartOfDay(timestamp); Repetition rep = getByTimestamp(timestamp); @@ -207,4 +211,15 @@ public abstract class RepetitionList */ @NonNull public abstract long getTotalCount(); + + public void toggle(long timestamp, int value) + { + if(!habit.isNumerical()) + throw new IllegalStateException("habit must be numerical"); + + Repetition rep = getByTimestamp(timestamp); + if(rep != null) remove(rep); + add(new Repetition(timestamp, value)); + habit.invalidateNewerThan(timestamp); + } } diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java index 6c6ac612c..c5450fcb3 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java @@ -58,7 +58,7 @@ public class HabitFixtures 81, 83, 89, 90, 91, 95, 102, 103, 108, 109, 120}; for (int mark : marks) - habit.getRepetitions().toggleTimestamp(today - mark * day); + habit.getRepetitions().toggle(today - mark * day); return habit; } @@ -98,7 +98,7 @@ public class HabitFixtures long timestamp = DateUtils.getStartOfToday(); for (boolean c : NON_DAILY_HABIT_CHECKS) { - if (c) habit.getRepetitions().toggleTimestamp(timestamp); + if (c) habit.getRepetitions().toggle(timestamp); timestamp -= DateUtils.millisecondsInOneDay; } diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java index 95d57f6d5..6b5343827 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java @@ -21,12 +21,17 @@ package org.isoron.uhabits.core.models; import org.isoron.uhabits.*; import org.junit.*; +import org.junit.rules.*; import static org.hamcrest.CoreMatchers.*; +import static org.isoron.uhabits.core.utils.DateUtils.*; import static org.junit.Assert.*; public class HabitTest extends BaseUnitTest { + @Rule + public final ExpectedException exception = ExpectedException.none(); + @Override public void setUp() { @@ -76,4 +81,49 @@ public class HabitTest extends BaseUnitTest h.clearReminder(); assertThat(h.hasReminder(), is(false)); } + + @Test + public void test_isCompleted() throws Exception + { + Habit h = modelFactory.buildHabit(); + assertFalse(h.isCompletedToday()); + h.getRepetitions().toggle(getStartOfToday()); + assertTrue(h.isCompletedToday()); + } + + @Test + public void test_isCompleted_numerical() throws Exception + { + Habit h = modelFactory.buildHabit(); + h.setType(Habit.NUMBER_HABIT); + h.setTargetType(Habit.AT_LEAST); + h.setTargetValue(100.0); + assertFalse(h.isCompletedToday()); + + h.getRepetitions().toggle(getStartOfToday(), 200); + assertTrue(h.isCompletedToday()); + h.getRepetitions().toggle(getStartOfToday(), 100); + assertTrue(h.isCompletedToday()); + h.getRepetitions().toggle(getStartOfToday(), 50); + assertFalse(h.isCompletedToday()); + + h.setTargetType(Habit.AT_MOST); + h.getRepetitions().toggle(getStartOfToday(), 200); + assertFalse(h.isCompletedToday()); + h.getRepetitions().toggle(getStartOfToday(), 100); + assertTrue(h.isCompletedToday()); + h.getRepetitions().toggle(getStartOfToday(), 50); + assertTrue(h.isCompletedToday()); + } + + @Test + public void testURI() throws Exception + { + assertTrue(habitList.isEmpty()); + Habit h = modelFactory.buildHabit(); + habitList.add(h); + assertThat(h.getId(), equalTo(0L)); + assertThat(h.getUriString(), + equalTo("content://org.isoron.uhabits/habit/0")); + } } \ No newline at end of file diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/RepetitionListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/RepetitionListTest.java index fe456e761..68a089730 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/RepetitionListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/RepetitionListTest.java @@ -27,9 +27,12 @@ import org.junit.*; import java.util.*; -import static org.hamcrest.MatcherAssert.*; +import static junit.framework.TestCase.assertFalse; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.*; import static org.hamcrest.core.IsEqual.*; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.*; public class RepetitionListTest extends BaseUnitTest @@ -58,14 +61,15 @@ public class RepetitionListTest extends BaseUnitTest today = DateUtils.getStartOfToday(); day = DateUtils.millisecondsInOneDay; - reps.toggleTimestamp(today - 3 * day); - reps.toggleTimestamp(today - 2 * day); - reps.toggleTimestamp(today); - reps.toggleTimestamp(today - 7 * day); - reps.toggleTimestamp(today - 5 * day); + reps.toggle(today - 3 * day); + reps.toggle(today - 2 * day); + reps.toggle(today); + reps.toggle(today - 7 * day); + reps.toggle(today - 5 * day); listener = mock(ModelObservable.Listener.class); reps.getObservable().addListener(listener); + reset(listener); } @Override @@ -130,7 +134,7 @@ public class RepetitionListTest extends BaseUnitTest weekdayCount[month][week]++; monthCount[month]++; } - reps.toggleTimestamp(day.getTimeInMillis()); + reps.toggle(day.getTimeInMillis()); } } @@ -155,17 +159,33 @@ public class RepetitionListTest extends BaseUnitTest } @Test - public void test_toggleTimestamp() + public void test_toggle() { - assertThat(reps.containsTimestamp(today), equalTo(true)); - reps.toggleTimestamp(today); - assertThat(reps.containsTimestamp(today), equalTo(false)); + assertTrue(reps.containsTimestamp(today)); + reps.toggle(today); + assertFalse(reps.containsTimestamp(today)); + verify(listener).onModelChange(); + reset(listener); + + assertFalse(reps.containsTimestamp(today - day)); + reps.toggle(today - day); + assertTrue(reps.containsTimestamp(today - day)); verify(listener).onModelChange(); reset(listener); - assertThat(reps.containsTimestamp(today - day), equalTo(false)); - reps.toggleTimestamp(today - day); - assertThat(reps.containsTimestamp(today - day), equalTo(true)); + habit.setType(Habit.NUMBER_HABIT); + reps.toggle(today, 100); + Repetition check = reps.getByTimestamp(today); + assertNotNull(check); + assertThat(check.getValue(), equalTo(100)); verify(listener).onModelChange(); + reset(listener); + + reps.toggle(today, 500); + check = reps.getByTimestamp(today); + assertNotNull(check); + assertThat(check.getValue(), equalTo(500)); + verify(listener, times(2)).onModelChange(); + reset(listener); } } \ No newline at end of file diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreListTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreListTest.java index 2ad2c2893..44d5214d3 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreListTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreListTest.java @@ -205,6 +205,6 @@ public class ScoreListTest extends BaseUnitTest long day = DateUtils.millisecondsInOneDay; for (int i = from; i < to; i++) - reps.toggleTimestamp(today - i * day); + reps.toggle(today - i * day); } } From 88c1e737203a7d4d15a31ac9a8736aea0edcd773 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 30 May 2017 11:11:42 -0400 Subject: [PATCH 26/27] Merge tag 'v1.7.3' into dev 1.7.3 --- CHANGELOG.md | 5 ++++ gradle/wrapper/gradle-wrapper.properties | 1 + .../isoron/uhabits/BaseUIAutomatorTest.java | 9 +++++- .../sqlite/SQLiteRepetitionListTest.java | 22 +++++++------- uhabits-android/src/main/AndroidManifest.xml | 4 +-- .../common/views/BundleSavedState.java | 29 ++++++++++--------- .../common/views/ScrollableChart.java | 6 ++++ .../habits/list/views/HabitCardListView.java | 6 ++++ .../models/sqlite/SQLiteCheckmarkList.java | 1 + .../models/sqlite/SQLiteRepetitionList.java | 9 ++++-- .../uhabits/core/models/CheckmarkList.java | 4 ++- .../models/memory/MemoryCheckmarkList.java | 2 ++ 12 files changed, 68 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc0407636..307b541c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +### 1.7.3 (May 30, 2017) + +* Improve performance of 'sort by score' +* Other minor bug fixes + ### 1.7.2 (May 27, 2017) * Fix crash at startup diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4d42a9f55..a3cb482d4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -4,3 +4,4 @@ distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions-snapshots/gradle-4.0-20170417000025+0000-all.zip + diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUIAutomatorTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUIAutomatorTest.java index 871614092..0f23f0b55 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUIAutomatorTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUIAutomatorTest.java @@ -24,6 +24,7 @@ import android.support.test.uiautomator.*; import com.linkedin.android.testbutler.*; +import org.isoron.androidbase.*; import org.junit.*; import static android.support.test.InstrumentationRegistry.*; @@ -39,8 +40,14 @@ public class BaseUIAutomatorTest public void setUp() { TestButler.setup(getTargetContext()); - TestButler.verifyAnimationsDisabled(getTargetContext()); device = getInstance(getInstrumentation()); + + HabitsComponent component = DaggerHabitsComponent + .builder() + .appModule(new AppModule(getTargetContext())) + .build(); + + HabitsApplication.setComponent(component); } @After diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java index 06ebca674..529050696 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionListTest.java @@ -34,9 +34,8 @@ import org.junit.runner.*; import java.util.*; -import static org.hamcrest.CoreMatchers.*; -import static org.hamcrest.MatcherAssert.*; -import static org.hamcrest.core.IsNot.not; +import static android.support.test.espresso.matcher.ViewMatchers.*; +import static org.hamcrest.core.IsEqual.*; import static org.isoron.uhabits.core.models.Checkmark.*; @RunWith(AndroidJUnit4.class) @@ -66,13 +65,14 @@ public class SQLiteRepetitionListTest extends BaseAndroidTest public void testAdd() { RepetitionRecord record = getByTimestamp(today + day); - assertThat(record, is(nullValue())); + assertNull(record); Repetition rep = new Repetition(today + day, CHECKED_EXPLICITLY); habit.getRepetitions().add(rep); record = getByTimestamp(today + day); - assertThat(record, is(not(nullValue()))); + assertNotNull(record); + assertThat(record.value, equalTo(CHECKED_EXPLICITLY)); } @Test @@ -91,18 +91,18 @@ public class SQLiteRepetitionListTest extends BaseAndroidTest public void testGetByTimestamp() { Repetition rep = repetitions.getByTimestamp(today); - assertThat(rep, is(not(nullValue()))); + assertNotNull(rep); assertThat(rep.getTimestamp(), equalTo(today)); rep = repetitions.getByTimestamp(today - 2 * day); - assertThat(rep, is(nullValue())); + assertNull(rep); } @Test public void testGetOldest() { Repetition rep = repetitions.getOldest(); - assertThat(rep, is(not(nullValue()))); + assertNotNull(rep); assertThat(rep.getTimestamp(), equalTo(today - 120 * day)); } @@ -111,20 +111,20 @@ public class SQLiteRepetitionListTest extends BaseAndroidTest { Habit empty = fixtures.createEmptyHabit(); Repetition rep = empty.getRepetitions().getOldest(); - assertThat(rep, is(nullValue())); + assertNull(rep); } @Test public void testRemove() { RepetitionRecord record = getByTimestamp(today); - assertThat(record, is(not(nullValue()))); + assertNotNull(record); Repetition rep = record.toRepetition(); repetitions.remove(rep); record = getByTimestamp(today); - assertThat(record, is(nullValue())); + assertNull(record); } @Nullable diff --git a/uhabits-android/src/main/AndroidManifest.xml b/uhabits-android/src/main/AndroidManifest.xml index ee4fb56df..ac3389550 100644 --- a/uhabits-android/src/main/AndroidManifest.xml +++ b/uhabits-android/src/main/AndroidManifest.xml @@ -20,8 +20,8 @@ + android:versionCode="30" + android:versionName="1.7.3"> diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java index b5011b03c..6f9e1163d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java @@ -20,24 +20,27 @@ package org.isoron.uhabits.activities.common.views; import android.os.*; +import android.support.v4.os.*; public class BundleSavedState extends android.support.v4.view.AbsSavedState { public static final Parcelable.Creator CREATOR = - new Parcelable.Creator() - { - @Override - public BundleSavedState createFromParcel(Parcel source) + ParcelableCompat.newCreator( + new ParcelableCompatCreatorCallbacks() { - return new BundleSavedState(source, getClass().getClassLoader()); - } + @Override + public BundleSavedState createFromParcel(Parcel source, + ClassLoader loader) + { + return new BundleSavedState(source, loader); + } - @Override - public BundleSavedState[] newArray(int size) - { - return new BundleSavedState[size]; - } - }; + @Override + public BundleSavedState[] newArray(int size) + { + return new BundleSavedState[size]; + } + }); public final Bundle bundle; @@ -50,7 +53,7 @@ public class BundleSavedState extends android.support.v4.view.AbsSavedState public BundleSavedState(Parcel source, ClassLoader loader) { super(source, loader); - this.bundle = source.readBundle(getClass().getClassLoader()); + this.bundle = source.readBundle(loader); } @Override diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.java index 8b54b324f..c488cb17a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.java @@ -107,6 +107,12 @@ public abstract class ScrollableChart extends View @Override public void onRestoreInstanceState(Parcelable state) { + if(!(state instanceof BundleSavedState)) + { + super.onRestoreInstanceState(state); + return; + } + BundleSavedState bss = (BundleSavedState) state; int x = bss.bundle.getInt("x"); int y = bss.bundle.getInt("y"); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java index 1f0b538fd..975902cc8 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java @@ -155,6 +155,12 @@ public class HabitCardListView extends RecyclerView @Override protected void onRestoreInstanceState(Parcelable state) { + if(!(state instanceof BundleSavedState)) + { + super.onRestoreInstanceState(state); + return; + } + BundleSavedState bss = (BundleSavedState) state; dataOffset = bss.bundle.getInt("dataOffset"); super.onRestoreInstanceState(bss.getSuperState()); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkList.java index 74e2f73a9..dc6f2e2d2 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkList.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteCheckmarkList.java @@ -153,6 +153,7 @@ public class SQLiteCheckmarkList extends CheckmarkList } @Override + @Nullable protected Checkmark getOldestComputed() { check(habit.getId()); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionList.java b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionList.java index 0a4969cd4..1ebac67f7 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionList.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/models/sqlite/SQLiteRepetitionList.java @@ -38,6 +38,7 @@ import java.util.*; */ public class SQLiteRepetitionList extends RepetitionList { + private final SQLiteUtils sqlite; @Nullable @@ -45,14 +46,17 @@ public class SQLiteRepetitionList extends RepetitionList private SQLiteStatement addStatement; + public static final String ADD_QUERY = + "insert into repetitions(habit, timestamp, value) " + + "values (?,?,?)"; + public SQLiteRepetitionList(@NonNull Habit habit) { super(habit); sqlite = new SQLiteUtils<>(RepetitionRecord.class); SQLiteDatabase db = Cache.openDatabase(); - String addQuery = "insert into repetitions(habit, timestamp) values (?,?)"; - addStatement = db.compileStatement(addQuery); + addStatement = db.compileStatement(ADD_QUERY); } /** @@ -69,6 +73,7 @@ public class SQLiteRepetitionList extends RepetitionList check(habit.getId()); addStatement.bindLong(1, habit.getId()); addStatement.bindLong(2, rep.getTimestamp()); + addStatement.bindLong(3, rep.getValue()); addStatement.execute(); observable.notifyListeners(); } diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java index 75a34e42b..847775127 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java @@ -202,7 +202,7 @@ public abstract class CheckmarkList Checkmark newest = getNewestComputed(); Checkmark oldest = getOldestComputed(); - if (newest == null) + if (newest == null || oldest == null) { forceRecompute(from, to); } @@ -218,6 +218,7 @@ public abstract class CheckmarkList * * @return oldest checkmark already computed */ + @Nullable protected abstract Checkmark getOldestComputed(); /** @@ -295,5 +296,6 @@ public abstract class CheckmarkList * * @return newest checkmark already computed */ + @Nullable protected abstract Checkmark getNewestComputed(); } diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryCheckmarkList.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryCheckmarkList.java index ec847acc5..fb33a168a 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryCheckmarkList.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryCheckmarkList.java @@ -72,6 +72,7 @@ public class MemoryCheckmarkList extends CheckmarkList } @Override + @Nullable protected Checkmark getOldestComputed() { if(list.isEmpty()) return null; @@ -79,6 +80,7 @@ public class MemoryCheckmarkList extends CheckmarkList } @Override + @Nullable protected Checkmark getNewestComputed() { if(list.isEmpty()) return null; From e4b5a3ea4590287f904ea0295b74c4284ba25103 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Wed, 31 May 2017 17:58:17 -0400 Subject: [PATCH 27/27] Implement acceptance tests for some basic features --- build.sh | 4 +- uhabits-android/build.gradle | 1 + .../src/androidTest/AndroidManifest.xml | 27 +++ .../src/androidTest/assets/test.db | Bin 0 -> 49152 bytes .../org/isoron/uhabits/BaseAndroidTest.java | 2 + .../isoron/uhabits/BaseUIAutomatorTest.java | 32 +++- .../isoron/uhabits/acceptance/AboutTest.java | 46 +++++ .../isoron/uhabits/acceptance/HabitsTest.java | 107 ++++++++++++ .../isoron/uhabits/acceptance/LinksTest.java | 63 +++++++ .../uhabits/acceptance/steps/CommonSteps.java | 127 ++++++++++++++ .../acceptance/steps/EditHabitSteps.java | 64 +++++++ .../acceptance/steps/ListHabitsSteps.java | 161 ++++++++++++++++++ .../uhabits/integration/SavedStateTest.java | 3 + .../uhabits/performance/PerformanceTest.java | 0 .../org/isoron/uhabits/HabitsApplication.java | 4 +- .../uhabits/activities/about/AboutScreen.java | 8 +- .../preferences/AndroidPreferences.java | 7 + .../core/ui/screens/about/AboutBehavior.java | 2 +- .../ui/screens/about/AboutBehaviorTest.java | 94 ++++++++++ 19 files changed, 739 insertions(+), 13 deletions(-) create mode 100644 uhabits-android/src/androidTest/AndroidManifest.xml create mode 100644 uhabits-android/src/androidTest/assets/test.db create mode 100644 uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/AboutTest.java create mode 100644 uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java create mode 100644 uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/LinksTest.java create mode 100644 uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java create mode 100644 uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java create mode 100644 uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.java rename {app => uhabits-android}/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.java (100%) create mode 100644 uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/about/AboutBehaviorTest.java diff --git a/build.sh b/build.sh index 12df11b39..15d46f661 100755 --- a/build.sh +++ b/build.sh @@ -147,9 +147,9 @@ install_test_apk() { run_instrumented_tests() { log_info "Running instrumented tests" $ADB shell am instrument \ - -r -e coverage true \ + -r -e coverage true -e size medium \ -w ${PACKAGE_NAME}.test/android.support.test.runner.AndroidJUnitRunner \ - > ${OUTPUTS_DIR}/instrument.txt + | tee ${OUTPUTS_DIR}/instrument.txt mkdir -p ${OUTPUTS_DIR}/code-coverage/connected/ $ADB pull /data/user/0/${PACKAGE_NAME}/files/coverage.ec \ diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle index 633568fab..0bf33ad84 100644 --- a/uhabits-android/build.gradle +++ b/uhabits-android/build.gradle @@ -94,6 +94,7 @@ dependencies { androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' + androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2' androidTestCompile 'com.linkedin.testbutler:test-butler-library:1.3.1' implementation('com.opencsv:opencsv:3.9') { diff --git a/uhabits-android/src/androidTest/AndroidManifest.xml b/uhabits-android/src/androidTest/AndroidManifest.xml new file mode 100644 index 000000000..f5c89202e --- /dev/null +++ b/uhabits-android/src/androidTest/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + + \ No newline at end of file diff --git a/uhabits-android/src/androidTest/assets/test.db b/uhabits-android/src/androidTest/assets/test.db new file mode 100644 index 0000000000000000000000000000000000000000..5319030635db9233852b113123678a8fbee0e49a GIT binary patch literal 49152 zcmeI5dwg7FoyIeBt~2ke0^Ms9xMK?aHV=k=?m znmd2i>}m5)EFIT!VrkmK_BpfKaF5w7ZS75^YTxM1no3>erQNmBd(Cf|*)qSSZFP`L_AReR#T}gI}XBsisn2xwl$>gn|Ac`EqQy{b04XyRT9m?5LDi z5B)C}cl8f%^qfX-jXQ0)FVeVJ@Z#Ww%(DJ^+2jVpeUM5Y*o2WbH)tF? zHj^xugr|2^J6H6U2UiSj_?^E=(i<-SuxbBU9r%+knYoVNxX(VB6XkG*R`%enZO2e` z<#4sHv-$z_HaV~lTsdBU>6&oQ2_tS+UW6l^@|Z2Fs(rN~es(u`1YY)GV}ZXz<>ltp zF;pE~g;zp%rT%L9gX5gADC0LyoS5O0DECzc`@1V0z13Q|Qm&Oh$j&BD?1R^q#`pAh zmV5YTPtb4T<(>SW_~hYczI^)VRFr+DHUXP}O~58#6R-)`1Z)B}0h@qLz$Rc5un8~$ z{de=3_%{vs$9~uZYyvg`n}AKgCSVh=3D^W|0yY7gfK9+Auz4jAWU`IbzK(?p^!tCD z^lv|G0yY7gfK9+AU=y$j*aU0>HUXP}O~58#6WELs(C`19cwIxhK3*5Ux)~p+Jv5tu zO~58#6R-)`1Z)B}0h@qLz$Rc5unBA?2}D_EY^FZZ5aajR4RZ~d=W>qIn2|-3FrRV8 zWH_1;>Tl`K#P8_@3h{gKqw%-mTjQ_9m&X^zYvYx1C0-OC8y^u*ipRy<#kuJH==JFN z=*j5e=$`22=u6RM(fQGtQEzl=v>=)p9Tqi3yGC0@Uh$pc&x=1T{-F3k@y_Cn#jA^# z6w~6WVs~*#aZa(hcu;YCamQj*%oNraUMj3Be7A6K;pW0Mg-Z+P6;>6x3MUm>3r7|v z6?Q9ZQ}ES0>NWMOdQ9D?ZdKQ+&#DX5nW{&fqUNe*b)ec)ZLjkA_w&EZKbQYu{(<}* z`5W?AAZwtQ?el|QmJR|H5PYRCr8VFaK<^? zI9~Sc?9178*+;T>XTO%cDtmEuZMHvqYIa_>IXgMKdv@EbZ(jI?k+Zypj2C*DCF5t` z)=(HZ)8NF~7Qod854fTSc!t44?t2(`y1^+g?+#pLu(^0HaM<9{lb;3F47Q$hC~(N& zymK!D4jMfEx?cfT8eIJSR^Wi3n_0Zi+uH;C4eq~F4cKS!;O57Hy#^2OZUXigociet zfGZ5P-2MXaG=s-JI~CY%aBlW0V3)y#EE`;X&>G;W2G=fL2kbDICI08GD z7aP2M$7_Kn8N9j~;*XqY@XK9GfF~Hd{!@1W7a6?i_HBU28~nyI1Hgp_@60?3Y&UrC z`0>C62Jde>4>;f8gSF>?^9+9P$|=CP1|Prwa^M_;Prke!*k?qHA(jxk6Fw>L-!8x7LI?F`bvZ4J`FZ4A=E ztqsz_tqjt^Ee+DaEez7Z*dQH@4AQ}(K{{A4NC%ZcI+(9x-NBqeI*9*@L3ufuC3G+_ zNCz=n#B1rGXOIrM2I-(DI@n-P96ZO6D7e;;7Sg;_GjQt7{$5^i*QH<>h62n-oAQ6n+3KG9qtsv2h%?c8`SgatCi@gdG zw^*wnQH!k#60=yUAQ6k53KFkasUXpcjS3R0Sg0V8ihT+ar&y;TQHpJv&Cn>8DM*B3 zmx9D6Rw+nyVv~ZzCKf43WMYqk#3j}!NK|5rg2W`2C`d$Nhl0c-Rwzh3VuOOjBNiw~ zJYs)>#3R-xNIYVDg2W@1CrEpw(49Fiq(%zODWEM<=uH7FkwR+tx@Pj0WFO}D+*|56gp8rE2Gee0@@gbJ`~WxD72w~_C=u!1+*>- zO(>vkQRqPdEsH`63TRgpI#58XqR@Z>+7yNU6VRe4w4Z?XM4|fxv?dD8C!j4+=sf`~ zi9+iMXh#$}Pe3c8(0Bsc5QV-I(1Iwmoq+a3q3Z;+9tuq-pzToTISnF*LdywgHxxQf zK&zq9a01#4g?03e6^s|jc)6go{nE1}S60@?_L zJ`>PFD72Y?_CcY`1hftcO(vjiQ0OrMErUXf0r1{WjhrRh{Ka=0;``$B<5{s6-5;%q zj=}}@!zN%8unE`%Yyvg`n}AKgCSVh=3D^WSj|66fTQ-E56LYz6YzFTI!%SGr&FHR_ zR`(B=271b?OZahcJ=OA1t<>LFE#Zg5b#|3%{rF)8N6ppOc6MRGKBycX=tr53N7=(X zO4dBeP;I!fx-@eTKWC+&h8=k@ph%jlS=sE3B$F~M`@{F>sFfGKmHiK z)e3&527g3eY5xyC#_amFPGyRtA7j?W2jiLNQ5!6GuF%O2%8%}-A4R)ds<-~Ll|!=n z-bdr!JLc+NjnR9rs8$C`<M!Hy9ZxT>sFsEY zN(jAYb^U&eHookfuwuXefAi4U9)(T7CSVh=3D^W|0yY7gfK9+AU=y$j*aZHs1my4k zHUXP}O~58#6R-)`1Z)C-xdaM0 z@jnyl?>&%j`NEn1prB4T^&jNd3FrQU@IBjdOPu@T$b9>YKL1~T ztGB+J{rmsF+?UcmvQ5AyU=y$j*aU0>HUXP}O~58#6R-)`1pZbM(C`0$iy=7t{r^kx zkL~`S-T$-ue|G;5|GUr&v9oCR{~GN6U;V|v|I0jrO(R)Tt8Z{()re^K|L{`5@)6Up z`+rCS>qtz)?*G~SKkUxg{XY=`N!b0rdJ=a3?-slNXZQbP6!ZUi|8K+J|G$|1`-b?} z@$>PI;s@f};*8`00AC!+5}cSP4mmq(w#?*EEt zNi;h;GTJXHMO#MM;+w@6icc0F#OD7E#m^T%Sv;%QQ#`rYRy?XWsW`T{RnfuT|BHpE z3J(?TDtxtYMd8B2nnG{kl){|C)WZH)``^0Ys<+fj>S^_``lh;3U8ycoXRAKdfvx{( z>HsxPZKJ&W+xeIC>++A}@6LZMe^vfsEdBTAPtDKEH|Hnkch7H|_jA9=y^{NJ?z_2r zu=9U)?o+vQas#=H^;l1J4!!LxN4$lo&hD*Z*;f(O0 zaL=$Y41;%r*Met)M}vP3ZVtW}ToQ}~gF$D|9<&4p2YUtE2RZ*e|L6X*{`dWV@&D1k z#{Z0;_(OihU+B;D5AnzQWBk1LTkjX%zk82)-|}wpzT{o%rC!aeddGW5dxv@xyd6B{ zzVH5*`&0Md-22>bxL z+*#!;cTR9-IUjTOadvWw+5gVIo_#L+gY37n|CGHJU&@dEMp0~&FHpvgQ?By@W$ifSJTFk@j#KXQ0%h+wnGGKidF#g{0H$SHPw zi86_tV#!yKo5(4)e2FrOobsJ7PRx>3=^(a&iF6R_z(hKTePALT#6mEU z4q_viNC)-Fg7P(@gZgYiK{}{U7Zjv}`g}n_I;c+=6r_Xtj6p# z#ld9Qpg5S+42pxvkU?=U88j#kCMyk!gUNtFaWLsOC=Mol2F1ao*Pu9<^cWNelNAQV z!Q?c9;$YHkP#jFU1pT^$$#R3@V6x1hIG9uoii1hTpg5Rx8WabUr3S^pq-;#0E{R|Y=qWd8!`Ao~|c2id`P7(n0nwkPfnc zfpn1l3#5bWUmzW1{{rbC`xi(D*}p(K$o>V=LG~|@4zhoNbddcEq=W2VART1?dd5Na zFOUwhe}Qz6{R^an>|Y=qWd8!`Ao~|c2id`P7(n0nwkPfncfpn1l3#5bWUmzW1 z{{rbC`xi(D*}p(K$o>V=LG~|@4zhoNbddcEq=W2VART1?0_h<87f1)$zd$<3{sq!O z_AihQvVVbeko^m!gX~`*9c2Fk=^*|Y=q zWd8!`Ao~|c2id`P7(n0nwkPfncah5(EWd8!`Ao~|64vw&Yf#To@`xht + * + * 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.acceptance; + +import org.isoron.uhabits.*; +import org.junit.*; + +import static org.isoron.uhabits.acceptance.steps.CommonSteps.*; +import static org.isoron.uhabits.acceptance.steps.ListHabitsSteps.MenuItem.*; +import static org.isoron.uhabits.acceptance.steps.ListHabitsSteps.*; + +public class AboutTest extends BaseUIAutomatorTest +{ + @Test + public void shouldDisplayAboutScreen() + { + launchApp(); + clickMenu(ABOUT); + verifyDisplaysText("Loop Habit Tracker"); + verifyDisplaysText("Rate this app on Google Play"); + verifyDisplaysText("Developers"); + verifyDisplaysText("Translators"); + + launchApp(); + clickMenu(SETTINGS); + clickText("About"); + verifyDisplaysText("Translators"); + } +} diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java new file mode 100644 index 000000000..bad651adf --- /dev/null +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2017 Á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.acceptance; + +import org.isoron.uhabits.*; +import org.junit.*; + +import static org.isoron.uhabits.acceptance.steps.CommonSteps.*; +import static org.isoron.uhabits.acceptance.steps.EditHabitSteps.*; +import static org.isoron.uhabits.acceptance.steps.ListHabitsSteps.MenuItem.*; +import static org.isoron.uhabits.acceptance.steps.ListHabitsSteps.*; + +public class HabitsTest extends BaseUIAutomatorTest +{ + @Test + public void shouldCreateHabit() throws Exception + { + launchApp(); + clickMenu(CREATE_HABIT); + typeName("Hello world"); + typeQuestion("Did you say hello to the world today?"); + pickFrequency("Every week"); + pickColor(5); + clickSave(); + verifyDisplaysText("Hello world"); + } + + @Test + public void shouldShowHabitStatistics() throws Exception + { + launchApp(); + clickText("Track time"); + verifyDisplayGraphs(); + } + + @Test + public void shouldDeleteHabit() throws Exception + { + launchApp(); + longClickText("Track time"); + clickMenu(DELETE); + clickOK(); + verifyDoesNotDisplayText("Track time"); + } + + @Test + public void shouldEditHabit() throws Exception + { + launchApp(); + longClickText("Track time"); + clickMenu(EDIT_HABIT); + typeName("Take a walk"); + typeQuestion("Did you take a walk today?"); + clickSave(); + verifyDisplaysText("Take a walk"); + verifyDoesNotDisplayText("Track time"); + } + + @Test + public void shouldEditHabit_fromStatisticsScreen() throws Exception + { + launchApp(); + clickText("Track time"); + clickMenu(EDIT_HABIT); + typeName("Take a walk"); + typeQuestion("Did you take a walk today?"); + pickColor(10); + clickSave(); + verifyDisplaysText("Take a walk"); + pressBack(); + verifyDisplaysText("Take a walk"); + verifyDoesNotDisplayText("Track time"); + } + + @Test + public void shouldArchiveAndUnarchiveHabits() throws Exception + { + launchApp(); + longClickText("Track time"); + clickMenu(ARCHIVE); + verifyDoesNotDisplayText("Track time"); + clickMenu(HIDE_ARCHIVED); + verifyDisplaysText("Track time"); + + longClickText("Track time"); + clickMenu(UNARCHIVE); + clickMenu(HIDE_ARCHIVED); + verifyDisplaysText("Track time"); + } +} diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/LinksTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/LinksTest.java new file mode 100644 index 000000000..ad788acf4 --- /dev/null +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/LinksTest.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2017 Á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.acceptance; + +import org.isoron.uhabits.*; +import org.junit.*; + +import static org.isoron.uhabits.acceptance.steps.CommonSteps.*; +import static org.isoron.uhabits.acceptance.steps.ListHabitsSteps.*; +import static org.isoron.uhabits.acceptance.steps.ListHabitsSteps.MenuItem.ABOUT; +import static org.isoron.uhabits.acceptance.steps.ListHabitsSteps.MenuItem.HELP; +import static org.isoron.uhabits.acceptance.steps.ListHabitsSteps.MenuItem.SETTINGS; + +public class LinksTest extends BaseUIAutomatorTest +{ + @Test + public void shouldLinkToSourceCode() throws Exception + { + launchApp(); + clickMenu(ABOUT); + clickText("View source code at GitHub"); + verifyOpensWebsite("https://github.com/iSoron/uhabits"); + } + + @Test + public void shouldLinkToTranslationWebsite() throws Exception + { + launchApp(); + clickMenu(ABOUT); + clickText("Help translate this app"); + verifyOpensWebsite("translate.loophabits.org"); + } + + @Test + public void shouldLinkToHelp() throws Exception + { + launchApp(); + clickMenu(HELP); + verifyOpensWebsite("loophabits.org/faq.html"); + + launchApp(); + clickMenu(SETTINGS); + clickText("Help & FAQ"); + verifyOpensWebsite("loophabits.org/faq.html"); + } +} diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java new file mode 100644 index 000000000..d41d6f5c0 --- /dev/null +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2017 Á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.acceptance.steps; + +import android.support.annotation.*; +import android.support.test.espresso.*; +import android.support.test.espresso.contrib.*; +import android.support.test.uiautomator.*; +import android.support.v7.widget.*; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.activities.habits.list.*; + +import static android.support.test.espresso.Espresso.*; +import static android.support.test.espresso.action.ViewActions.*; +import static android.support.test.espresso.assertion.ViewAssertions.*; +import static android.support.test.espresso.matcher.ViewMatchers.*; +import static junit.framework.Assert.*; +import static org.hamcrest.CoreMatchers.*; + +public class CommonSteps extends BaseUIAutomatorTest +{ + public static void clickOK() + { + clickText("OK"); + } + + public static void pressBack() + { + device.pressBack(); + } + + public static void clickText(String text) + { + scrollToText(text); + onView(withText(text)).perform(click()); + } + + public static void clickText(@StringRes int id) + { + onView(withText(id)).perform(click()); + } + + public static void launchApp() + { + startActivity(ListHabitsActivity.class); + assertTrue( + device.wait(Until.hasObject(By.pkg("org.isoron.uhabits")), 5000)); + device.waitForIdle(); + } + + public static void longClickText(String text) + { + scrollToText(text); + onView(withText(text)).perform(longClick()); + } + + public static void scrollToText(String text) + { + try + { + if (device + .findObject(new UiSelector().className(RecyclerView.class)) + .exists()) + { + onView(instanceOf(RecyclerView.class)).perform( + RecyclerViewActions.scrollTo( + hasDescendant(withText(text)))); + } + else + { + onView(withText(text)).perform(scrollTo()); + } + } + catch (PerformException e) + { + //ignored + } + } + + public static void verifyDisplayGraphs() + { + verifyDisplaysView("HistoryCard"); + verifyDisplaysView("ScoreCard"); + } + + public static void verifyDisplaysText(String text) + { + scrollToText(text); + onView(withText(text)).check(matches(isEnabled())); + } + + private static void verifyDisplaysView(String className) + { + onView(withClassName(endsWith(className))).check(matches(isEnabled())); + } + + public static void verifyDoesNotDisplayText(String text) + { + onView(withText(text)).check(doesNotExist()); + } + + public static void verifyOpensWebsite(String url) throws Exception + { + assertTrue( + device.wait(Until.hasObject(By.pkg("com.android.chrome")), 5000)); + device.waitForIdle(); + assertTrue(device.findObject(new UiSelector().text(url)).exists()); + } +} diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java new file mode 100644 index 000000000..9b4774427 --- /dev/null +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2017 Á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.acceptance.steps; + +import android.support.test.uiautomator.*; + +import org.isoron.uhabits.*; + +import static android.support.test.espresso.Espresso.*; +import static android.support.test.espresso.action.ViewActions.*; +import static android.support.test.espresso.matcher.ViewMatchers.*; +import static org.isoron.uhabits.BaseUIAutomatorTest.device; + +public class EditHabitSteps +{ + public static void clickSave() + { + onView(withId(R.id.buttonSave)).perform(click()); + } + + public static void pickFrequency(String freq) + { + onView(withId(R.id.spinner)).perform(click()); + device.findObject(By.text(freq)).click(); + } + + public static void pickColor(int color) + { + onView(withId(R.id.buttonPickColor)).perform(click()); + device.findObject(By.descStartsWith(String.format("Color %d", color))).click(); + } + + public static void typeName(String name) + { + typeTextWithId(R.id.tvName, name); + } + + public static void typeQuestion(String name) + { + typeTextWithId(R.id.tvDescription, name); + } + + private static void typeTextWithId(int id, String name) + { + onView(withId(id)).perform(clearText(), typeText(name)); + } +} diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.java new file mode 100644 index 000000000..f3328d146 --- /dev/null +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.java @@ -0,0 +1,161 @@ +/* + * Copyright (C) 2017 Á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.acceptance.steps; + +import android.support.test.espresso.*; +import android.support.test.uiautomator.*; +import android.view.*; + +import org.hamcrest.*; +import org.isoron.uhabits.R; +import org.isoron.uhabits.activities.habits.list.views.*; + +import java.util.*; + +import static android.support.test.InstrumentationRegistry.*; +import static android.support.test.espresso.Espresso.*; +import static android.support.test.espresso.action.ViewActions.*; +import static android.support.test.espresso.matcher.ViewMatchers.*; +import static org.hamcrest.CoreMatchers.*; +import static org.isoron.uhabits.BaseUIAutomatorTest.device; +import static org.isoron.uhabits.acceptance.steps.CommonSteps.clickText; + +public abstract class ListHabitsSteps +{ + public static void clickMenu(MenuItem item) + { + switch (item) + { + case ABOUT: + clickTextInsideOverflowMenu(R.string.about); + break; + + case HELP: + clickTextInsideOverflowMenu(R.string.help); + break; + + case SETTINGS: + clickTextInsideOverflowMenu(R.string.settings); + break; + + case CREATE_HABIT: + clickViewWithId(R.id.actionAdd); + break; + + case EDIT_HABIT: + clickViewWithId(R.id.action_edit_habit); + break; + + case DELETE: + clickTextInsideOverflowMenu(R.string.delete); + break; + + case ARCHIVE: + clickTextInsideOverflowMenu(R.string.archive); + break; + + case UNARCHIVE: + clickTextInsideOverflowMenu(R.string.unarchive); + break; + + case HIDE_ARCHIVED: + clickViewWithId(R.id.action_filter); + clickText(R.string.hide_archived); + break; + } + } + + private static void clickTextInsideOverflowMenu(int id) + { + UiObject toolbar = device.findObject( + new UiSelector().resourceId("org.isoron.uhabits:id/toolbar")); + if(toolbar.exists()) + { + onView(allOf(withContentDescription("More options"), withParent + (withParent(withId(R.id.toolbar))))).perform(click()); + } + else + { + openActionBarOverflowOrOptionsMenu(getTargetContext()); + } + + onView(withText(id)).perform(click()); + } + + private static void clickViewWithId(int id) + { + onView(withId(id)).perform(click()); + } + + private static ViewAction longClickEveryDescendantWithClass(Class cls) + { + return new ViewAction() + { + + @Override + public Matcher getConstraints() + { + return isEnabled(); + } + + @Override + public String getDescription() + { + return "perform on children"; + } + + @Override + public void perform(UiController uiController, View view) + { + LinkedList stack = new LinkedList<>(); + if (view instanceof ViewGroup) stack.push((ViewGroup) view); + + while (!stack.isEmpty()) + { + ViewGroup vg = stack.pop(); + for (int i = 0; i < vg.getChildCount(); i++) + { + View v = vg.getChildAt(i); + if (v instanceof ViewGroup) stack.push((ViewGroup) v); + if (cls.isInstance(v)) + { + v.performLongClick(); + uiController.loopMainThreadUntilIdle(); + } + } + } + } + }; + } + + public static void longPressCheckmarks(String habit) + { + CommonSteps.scrollToText(habit); + onView(allOf(hasDescendant(withText(habit)), + withClassName(endsWith("HabitCardView")))).perform( + longClickEveryDescendantWithClass(CheckmarkButtonView.class)); + } + + public enum MenuItem + { + ABOUT, HELP, SETTINGS, EDIT_HABIT, DELETE, ARCHIVE, HIDE_ARCHIVED, + UNARCHIVE, CREATE_HABIT + } +} diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java index 7250c62bd..8bc086e2f 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java @@ -19,6 +19,8 @@ package org.isoron.uhabits.integration; +import android.support.test.filters.*; + import org.isoron.uhabits.*; import org.isoron.uhabits.activities.about.*; import org.isoron.uhabits.activities.habits.list.*; @@ -26,6 +28,7 @@ import org.junit.*; import static java.lang.Thread.*; +@LargeTest public class SavedStateTest extends BaseUIAutomatorTest { /** diff --git a/app/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.java similarity index 100% rename from app/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.java rename to uhabits-android/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java index caaf25957..91bfbd037 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java @@ -85,8 +85,8 @@ public class HabitsApplication extends Application if (isTestMode()) { - File db = DatabaseUtils.getDatabaseFile(context); - if (db.exists()) db.delete(); +// File db = DatabaseUtils.getDatabaseFile(context); +// if (db.exists()) db.delete(); } try diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java index de7037dfc..c8c5808c4 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java @@ -23,11 +23,13 @@ import android.support.annotation.*; import android.widget.*; import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.intents.*; import org.isoron.uhabits.core.ui.screens.about.*; +import org.isoron.uhabits.intents.*; import javax.inject.*; +import static org.isoron.uhabits.core.ui.screens.about.AboutBehavior.Message.*; + public class AboutScreen extends BaseScreen implements AboutBehavior.Screen { @NonNull @@ -44,7 +46,9 @@ public class AboutScreen extends BaseScreen implements AboutBehavior.Screen @Override public void showMessage(AboutBehavior.Message message) { - Toast.makeText(activity, "OK", Toast.LENGTH_LONG).show(); + if (message == YOU_ARE_NOW_A_DEVELOPER) Toast + .makeText(activity, "You are now a developer", Toast.LENGTH_LONG) + .show(); } @Override diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java index 76aad2696..4e4641aec 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/AndroidPreferences.java @@ -80,6 +80,13 @@ public class AndroidPreferences } } + public void reset() + { + if(!HabitsApplication.isTestMode()) throw new IllegalStateException( + "this method can only be used while testing"); + prefs.edit().clear().commit(); + } + public void setDefaultOrder(HabitList.Order order) { prefs.edit().putString("pref_default_order", order.name()).apply(); diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/about/AboutBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/about/AboutBehavior.java index 996084e40..6fc091fad 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/about/AboutBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/about/AboutBehavior.java @@ -42,7 +42,7 @@ public class AboutBehavior public void onPressDeveloperCountdown() { developerCountdown--; - if (developerCountdown <= 0) + if (developerCountdown == 0) { prefs.setDeveloper(true); screen.showMessage(Message.YOU_ARE_NOW_A_DEVELOPER); diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/about/AboutBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/about/AboutBehaviorTest.java new file mode 100644 index 000000000..f39984abb --- /dev/null +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/about/AboutBehaviorTest.java @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2017 Á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.core.ui.screens.about; + +import org.isoron.uhabits.*; +import org.isoron.uhabits.core.preferences.*; +import org.junit.*; +import org.mockito.*; + +import static org.isoron.uhabits.core.ui.screens.about.AboutBehavior.Message.YOU_ARE_NOW_A_DEVELOPER; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; + +public class AboutBehaviorTest extends BaseUnitTest +{ + private AboutBehavior behavior; + + @Mock + private Preferences prefs; + + @Mock + private AboutBehavior.Screen screen; + + @Before + public void setUp() + { + behavior = new AboutBehavior(prefs, screen); + } + + @Test + public void onPressDeveloperCountdown() throws Exception + { + behavior.onPressDeveloperCountdown(); + behavior.onPressDeveloperCountdown(); + behavior.onPressDeveloperCountdown(); + behavior.onPressDeveloperCountdown(); + verifyZeroInteractions(screen); + verifyZeroInteractions(prefs); + + behavior.onPressDeveloperCountdown(); + verify(screen).showMessage(YOU_ARE_NOW_A_DEVELOPER); + verify(prefs).setDeveloper(true); + + behavior.onPressDeveloperCountdown(); + verifyZeroInteractions(screen); + verifyZeroInteractions(prefs); + } + + @Test + public void onRateApp() throws Exception + { + behavior.onRateApp(); + verify(screen).showRateAppWebsite(); + } + + @Test + public void onSendFeedback() throws Exception + { + behavior.onSendFeedback(); + verify(screen).showSendFeedbackScreen(); + } + + @Test + public void onTranslateApp() throws Exception + { + behavior.onTranslateApp(); + verify(screen).showTranslationWebsite(); + } + + @Test + public void onViewSourceCode() throws Exception + { + behavior.onViewSourceCode(); + verify(screen).showSourceCodeWebsite(); + } + +} \ No newline at end of file