From fc4b610d59abeadbf052d10d458bacf582a811a2 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Mon, 5 Jun 2017 13:33:39 -0400 Subject: [PATCH] Create android-base module --- android-base/.gitignore | 1 + android-base/build.gradle | 46 +++ android-base/proguard-rules.pro | 25 ++ android-base/src/main/AndroidManifest.xml | 2 + .../androidbase/AndroidBugReporter.java | 173 ++++------ .../isoron/androidbase/AndroidDirFinder.java | 58 ++++ .../org/isoron/androidbase/AppContext.java | 0 .../isoron/androidbase/AppContextModule.java | 4 +- .../androidbase}/BaseExceptionHandler.java | 23 +- .../androidbase/SSLContextProvider.java | 20 +- .../activities/ActivityContext.java | 0 .../activities/ActivityModule.java | 10 - .../androidbase/activities/ActivityScope.java | 0 .../androidbase/activities/BaseActivity.java | 20 +- .../androidbase/activities/BaseMenu.java | 7 +- .../androidbase/activities/BaseRootView.java | 22 +- .../androidbase/activities/BaseScreen.java | 71 ++--- .../activities/BaseSelectionMenu.java | 0 .../isoron/androidbase}/utils/ColorUtils.java | 61 +--- .../isoron/androidbase/utils/FileUtils.java | 0 .../androidbase}/utils/InterfaceUtils.java | 2 +- .../androidbase}/utils/StyledResources.java | 4 +- android-base/src/main/res/values/base.xml | 6 + .../src/main/res/values/material_colors.xml | 300 ++++++++++++++++++ settings.gradle | 2 +- uhabits-android/build.gradle | 2 + .../src/androidTest/assets/pull_failed | 5 - .../isoron/uhabits/AndroidTestComponent.java | 4 +- .../org/isoron/uhabits/BaseAndroidTest.java | 10 +- .../isoron/uhabits/BaseUserInterfaceTest.java | 2 +- .../java/org/isoron/uhabits/BaseViewTest.java | 4 +- .../org/isoron/uhabits/HabitLoggerTest.java | 3 +- .../isoron/uhabits/HabitsApplicationTest.java | 3 +- .../activities/common/views/BarChartTest.java | 2 +- .../common/views/FrequencyChartTest.java | 2 +- .../common/views/HistoryChartTest.java | 2 +- .../activities/common/views/RingViewTest.java | 4 +- .../common/views/ScoreChartTest.java | 2 +- .../common/views/StreakChartTest.java | 2 +- .../list/views/CheckmarkButtonViewTest.java | 2 +- .../list/views/CheckmarkPanelViewTest.java | 4 +- .../list/views/NumberButtonViewTest.java | 2 +- .../uhabits/tasks/ExportCSVTaskTest.java | 5 +- .../uhabits/tasks/ExportDBTaskTest.java | 15 +- .../views/CheckmarkWidgetViewTest.java | 2 +- .../org/isoron/uhabits/HabitsApplication.java | 10 +- ...t.java => HabitsApplicationComponent.java} | 9 +- .../activities/AndroidThemeSwitcher.java | 2 +- ...owHabitComponent.java => HabitModule.java} | 36 +-- .../uhabits/activities/HabitsActivity.java | 78 +++++ .../activities/HabitsActivityComponent.java | 74 +++++ .../activities/HabitsActivityModule.java} | 19 +- .../uhabits/activities/HabitsDirFinder.java | 47 +++ .../activities/about/AboutActivity.java | 7 +- .../activities/about/AboutRootView.java | 2 +- .../common/dialogs/ColorPickerDialog.java | 2 +- .../dialogs/ColorPickerDialogFactory.java | 5 +- .../common/dialogs/HistoryEditorDialog.java | 4 +- .../activities/common/views/BarChart.java | 3 +- .../common/views/FrequencyChart.java | 1 + .../activities/common/views/HistoryChart.java | 3 +- .../activities/common/views/RingView.java | 5 +- .../activities/common/views/ScoreChart.java | 3 +- .../activities/common/views/StreakChart.java | 4 +- .../habits/edit/EditHabitDialog.java | 14 +- .../habits/edit/views/ExampleEditText.java | 2 +- .../edit/views/NameDescriptionPanel.java | 2 +- .../habits/list/ListHabitsActivity.java | 39 +-- .../habits/list/ListHabitsComponent.java | 51 --- .../habits/list/ListHabitsController.java | 2 +- .../habits/list/ListHabitsMenu.java | 2 +- .../habits/list/ListHabitsModule.java | 67 ++-- .../habits/list/ListHabitsRootView.java | 4 +- .../habits/list/ListHabitsScreen.java | 3 +- .../habits/list/ListHabitsSelectionMenu.java | 2 +- .../list/views/CheckmarkButtonView.java | 7 +- .../habits/list/views/CheckmarkPanelView.java | 17 +- .../habits/list/views/HabitCardView.java | 7 +- .../habits/list/views/HeaderView.java | 4 +- .../habits/list/views/NumberButtonView.java | 6 +- .../habits/list/views/NumberPanelView.java | 18 +- .../habits/show/ShowHabitActivity.java | 50 +-- .../habits/show/ShowHabitModule.java | 43 +-- .../habits/show/ShowHabitRootView.java | 3 +- .../habits/show/ShowHabitScreen.java | 2 +- .../habits/show/ShowHabitsMenu.java | 2 +- .../activities/habits/show/views/BarCard.java | 4 +- .../habits/show/views/FrequencyCard.java | 4 +- .../habits/show/views/HistoryCard.java | 4 +- .../habits/show/views/OverviewCard.java | 5 +- .../habits/show/views/ScoreCard.java | 6 +- .../habits/show/views/StreakCard.java | 4 +- .../habits/show/views/SubtitleCard.java | 4 +- .../activities/settings/SettingsActivity.java | 4 +- .../activities/settings/SettingsFragment.java | 32 +- .../automation/EditSettingRootView.java | 2 +- .../automation/FireSettingReceiver.java | 4 +- .../org/isoron/uhabits/io/LoopDBImporter.java | 2 +- .../AndroidNotificationTray.java | 6 +- .../notifications/RingtoneManager.java | 10 +- .../preferences/SharedPreferencesStorage.java | 2 +- .../receivers/ConnectivityReceiver.java | 2 +- .../uhabits/receivers/PebbleReceiver.java | 2 +- .../uhabits/receivers/ReminderReceiver.java | 4 +- .../uhabits/receivers/WidgetReceiver.java | 4 +- .../org/isoron/uhabits/sync/SyncManager.java | 54 ++-- .../isoron/uhabits/tasks/ExportDBTask.java | 4 +- .../uhabits/utils/AndroidDateUtils.java | 2 - .../isoron/uhabits/utils/PaletteUtils.java | 67 ++++ .../isoron/uhabits/utils/package-info.java | 2 +- .../uhabits/widgets/BaseWidgetProvider.java | 2 +- .../uhabits/widgets/CheckmarkWidget.java | 2 +- .../uhabits/widgets/FrequencyWidget.java | 2 +- .../uhabits/widgets/HabitPickerDialog.java | 2 +- .../isoron/uhabits/widgets/HistoryWidget.java | 2 +- .../isoron/uhabits/widgets/ScoreWidget.java | 2 +- .../isoron/uhabits/widgets/StreakWidget.java | 2 +- .../widgets/views/CheckmarkWidgetView.java | 5 +- .../widgets/views/HabitWidgetView.java | 4 +- uhabits-android/src/main/res/values/attrs.xml | 1 - .../src/main/res/values/colors.xml | 299 ----------------- .../habits/list/ListHabitsMenuTest.java | 1 + .../habits/list/ListHabitsScreenTest.java | 2 +- .../habits/list/ListHabitsBehavior.java | 62 ++-- .../habits/list/ListHabitsBehaviorTest.java | 58 ++-- 125 files changed, 1215 insertions(+), 1060 deletions(-) create mode 100644 android-base/.gitignore create mode 100644 android-base/build.gradle create mode 100644 android-base/proguard-rules.pro create mode 100644 android-base/src/main/AndroidManifest.xml rename uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java => android-base/src/main/java/org/isoron/androidbase/AndroidBugReporter.java (69%) create mode 100644 android-base/src/main/java/org/isoron/androidbase/AndroidDirFinder.java rename {uhabits-android => android-base}/src/main/java/org/isoron/androidbase/AppContext.java (100%) rename uhabits-android/src/main/java/org/isoron/androidbase/AppModule.java => android-base/src/main/java/org/isoron/androidbase/AppContextModule.java (92%) rename {uhabits-android/src/main/java/org/isoron/androidbase/activities => android-base/src/main/java/org/isoron/androidbase}/BaseExceptionHandler.java (74%) rename uhabits-android/src/main/java/org/isoron/androidbase/CACertSSLContextProvider.java => android-base/src/main/java/org/isoron/androidbase/SSLContextProvider.java (81%) rename {uhabits-android => android-base}/src/main/java/org/isoron/androidbase/activities/ActivityContext.java (100%) rename {uhabits-android => android-base}/src/main/java/org/isoron/androidbase/activities/ActivityModule.java (85%) rename {uhabits-android => android-base}/src/main/java/org/isoron/androidbase/activities/ActivityScope.java (100%) rename {uhabits-android => android-base}/src/main/java/org/isoron/androidbase/activities/BaseActivity.java (87%) rename {uhabits-android => android-base}/src/main/java/org/isoron/androidbase/activities/BaseMenu.java (95%) rename {uhabits-android => android-base}/src/main/java/org/isoron/androidbase/activities/BaseRootView.java (79%) rename {uhabits-android => android-base}/src/main/java/org/isoron/androidbase/activities/BaseScreen.java (85%) rename {uhabits-android => android-base}/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java (100%) rename {uhabits-android/src/main/java/org/isoron/uhabits => android-base/src/main/java/org/isoron/androidbase}/utils/ColorUtils.java (52%) rename {uhabits-android => android-base}/src/main/java/org/isoron/androidbase/utils/FileUtils.java (100%) rename {uhabits-android/src/main/java/org/isoron/uhabits => android-base/src/main/java/org/isoron/androidbase}/utils/InterfaceUtils.java (98%) rename {uhabits-android/src/main/java/org/isoron/uhabits => android-base/src/main/java/org/isoron/androidbase}/utils/StyledResources.java (97%) create mode 100644 android-base/src/main/res/values/base.xml create mode 100644 android-base/src/main/res/values/material_colors.xml delete mode 100755 uhabits-android/src/androidTest/assets/pull_failed rename uhabits-android/src/main/java/org/isoron/uhabits/{HabitsComponent.java => HabitsApplicationComponent.java} (93%) rename uhabits-android/src/main/java/org/isoron/uhabits/activities/{habits/show/ShowHabitComponent.java => HabitModule.java} (61%) create mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivity.java create mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivityComponent.java rename uhabits-android/src/main/java/org/isoron/{androidbase/activities/ActivityComponent.java => uhabits/activities/HabitsActivityModule.java} (67%) create mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsDirFinder.java delete mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java create mode 100644 uhabits-android/src/main/java/org/isoron/uhabits/utils/PaletteUtils.java diff --git a/android-base/.gitignore b/android-base/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/android-base/.gitignore @@ -0,0 +1 @@ +/build diff --git a/android-base/build.gradle b/android-base/build.gradle new file mode 100644 index 000000000..ad4a4ded3 --- /dev/null +++ b/android-base/build.gradle @@ -0,0 +1,46 @@ +apply plugin: 'com.android.library' + + +android { + compileSdkVersion 25 + buildToolsVersion "25.0.2" + + + defaultConfig { + minSdkVersion 19 + targetSdkVersion 25 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + compileOptions { + targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation 'com.google.dagger:dagger:2.9' + implementation 'com.android.support:design:25.3.1' + implementation 'com.android.support:appcompat-v7:25.3.1' + + annotationProcessor 'com.google.dagger:dagger-compiler:2.9' + androidTestAnnotationProcessor 'com.google.dagger:dagger-compiler:2.9' + androidTestImplementation 'com.google.dagger:dagger:2.9' + testAnnotationProcessor 'com.google.dagger:dagger-compiler:2.9' + + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + + testImplementation 'junit:junit:4.12' +} diff --git a/android-base/proguard-rules.pro b/android-base/proguard-rules.pro new file mode 100644 index 000000000..2d5885450 --- /dev/null +++ b/android-base/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /gemini-b/opt/android-sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/android-base/src/main/AndroidManifest.xml b/android-base/src/main/AndroidManifest.xml new file mode 100644 index 000000000..dff4e0297 --- /dev/null +++ b/android-base/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java b/android-base/src/main/java/org/isoron/androidbase/AndroidBugReporter.java similarity index 69% rename from uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java rename to android-base/src/main/java/org/isoron/androidbase/AndroidBugReporter.java index 6f6df9168..e50e2b04d 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/BaseSystem.java +++ b/android-base/src/main/java/org/isoron/androidbase/AndroidBugReporter.java @@ -22,110 +22,31 @@ package org.isoron.androidbase; 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.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; +import java.text.*; import java.util.*; import javax.inject.*; -/** - * Base class for all systems class in the application. - *

- * Classes derived from BaseSystem are responsible for handling events and - * sending requests to the Android operating system. Examples include capturing - * a bug report, obtaining device information, or requesting runtime - * permissions. - */ -@AppScope -public class BaseSystem implements CACertSSLContextProvider, - ListHabitsBehavior.System, - ShowHabitMenuBehavior.System +public class AndroidBugReporter { - private Context context; - - @Override - public Context getContext() - { - return context; - } + private final Context context; @Inject - public BaseSystem(@AppContext Context context) + public AndroidBugReporter(@NonNull @AppContext Context context) { 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. - *

- * The contents of the file are generated by the method {@link - * #getBugReport()}. The file is saved in the apps's external private - * storage. - * - * @return the generated file. - * @throws IOException when I/O errors occur. - */ - @Override - @NonNull - public void dumpBugReportToFile() - { - try - { - String date = DateFormats - .getBackupDateFormat() - .format(DateUtils.getLocalTime()); - - if (context == null) throw new IllegalStateException(); - - File dir = getFilesDir("Logs"); - if (dir == null) - throw new IOException("log dir should not be null"); - - 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(); - } - } - /** - * Captures and returns a bug report. - *

- * The bug report contains some device information and the logcat. + * Captures and returns a bug report. The bug report contains some device + * information and the logcat. * * @return a String containing the bug report. * @throws IOException when any I/O error occur. */ - @Override @NonNull public String getBugReport() throws IOException { @@ -139,10 +60,30 @@ public class BaseSystem implements CACertSSLContextProvider, return log; } - @Override - public File getCSVOutputDir() + public String getDeviceInfo() { - return getFilesDir("CSV"); + if (context == null) return "null context\n"; + + WindowManager wm = + (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + + return + String.format("App Version Name: %s\n", BuildConfig.VERSION_NAME) + + String.format("App Version Code: %s\n", BuildConfig.VERSION_CODE) + + String.format("OS Version: %s (%s)\n", + System.getProperty("os.version"), Build.VERSION.INCREMENTAL) + + String.format("OS API Level: %s\n", Build.VERSION.SDK) + + String.format("Device: %s\n", Build.DEVICE) + + String.format("Model (Product): %s (%s)\n", Build.MODEL, + Build.PRODUCT) + + String.format("Manufacturer: %s\n", Build.MANUFACTURER) + + String.format("Other tags: %s\n", Build.TAGS) + + String.format("Screen Width: %s\n", + wm.getDefaultDisplay().getWidth()) + + String.format("Screen Height: %s\n", + wm.getDefaultDisplay().getHeight()) + + String.format("External storage state: %s\n\n", + Environment.getExternalStorageState()); } public String getLogcat() throws IOException @@ -151,7 +92,7 @@ public class BaseSystem implements CACertSSLContextProvider, StringBuilder builder = new StringBuilder(); String[] command = new String[]{ "logcat", "-d" }; - Process process = Runtime.getRuntime().exec(command); + java.lang.Process process = Runtime.getRuntime().exec(command); InputStreamReader in = new InputStreamReader(process.getInputStream()); BufferedReader bufferedReader = new BufferedReader(in); @@ -174,29 +115,41 @@ public class BaseSystem implements CACertSSLContextProvider, return builder.toString(); } - private String getDeviceInfo() + /** + * Captures a bug report and saves it to a file in the SD card. + *

+ * The contents of the file are generated by the method {@link + * #getBugReport()}. The file is saved in the apps's external private + * storage. + * + * @return the generated file. + * @throws IOException when I/O errors occur. + */ + @NonNull + public void dumpBugReportToFile() { - if (context == null) return "null context\n"; + try + { - WindowManager wm = - (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + String date = + new SimpleDateFormat("yyyy-MM-dd HHmmss", Locale.US).format( + new Date()); - return - String.format("App Version Name: %s\n", BuildConfig.VERSION_NAME) + - String.format("App Version Code: %s\n", BuildConfig.VERSION_CODE) + - String.format("OS Version: %s (%s)\n", - System.getProperty("os.version"), Build.VERSION.INCREMENTAL) + - String.format("OS API Level: %s\n", Build.VERSION.SDK) + - String.format("Device: %s\n", Build.DEVICE) + - String.format("Model (Product): %s (%s)\n", Build.MODEL, - Build.PRODUCT) + - String.format("Manufacturer: %s\n", Build.MANUFACTURER) + - String.format("Other tags: %s\n", Build.TAGS) + - String.format("Screen Width: %s\n", - wm.getDefaultDisplay().getWidth()) + - String.format("Screen Height: %s\n", - wm.getDefaultDisplay().getHeight()) + - String.format("External storage state: %s\n\n", - Environment.getExternalStorageState()); + if (context == null) throw new IllegalStateException(); + + File dir = new AndroidDirFinder(context).getFilesDir("Logs"); + if (dir == null) + throw new IOException("log dir should not be null"); + + 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(); + } } } diff --git a/android-base/src/main/java/org/isoron/androidbase/AndroidDirFinder.java b/android-base/src/main/java/org/isoron/androidbase/AndroidDirFinder.java new file mode 100644 index 000000000..3e40aed4d --- /dev/null +++ b/android-base/src/main/java/org/isoron/androidbase/AndroidDirFinder.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.androidbase; + +import android.content.*; +import android.support.annotation.*; +import android.support.v4.content.*; +import android.util.*; + +import org.isoron.androidbase.utils.*; + +import java.io.*; + +import javax.inject.*; + +public class AndroidDirFinder +{ + @NonNull + private Context context; + + @Inject + public AndroidDirFinder(@NonNull @AppContext Context context) + { + 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); + } +} diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/AppContext.java b/android-base/src/main/java/org/isoron/androidbase/AppContext.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/androidbase/AppContext.java rename to android-base/src/main/java/org/isoron/androidbase/AppContext.java diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/AppModule.java b/android-base/src/main/java/org/isoron/androidbase/AppContextModule.java similarity index 92% rename from uhabits-android/src/main/java/org/isoron/androidbase/AppModule.java rename to android-base/src/main/java/org/isoron/androidbase/AppContextModule.java index 6e672994b..c166a89d8 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/AppModule.java +++ b/android-base/src/main/java/org/isoron/androidbase/AppContextModule.java @@ -24,11 +24,11 @@ import android.content.*; import dagger.*; @Module -public class AppModule +public class AppContextModule { private final Context context; - public AppModule(@AppContext Context context) + public AppContextModule(@AppContext Context context) { this.context = context; } diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseExceptionHandler.java b/android-base/src/main/java/org/isoron/androidbase/BaseExceptionHandler.java similarity index 74% rename from uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseExceptionHandler.java rename to android-base/src/main/java/org/isoron/androidbase/BaseExceptionHandler.java index d2df1f594..3a04b8b4f 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseExceptionHandler.java +++ b/android-base/src/main/java/org/isoron/androidbase/BaseExceptionHandler.java @@ -17,14 +17,11 @@ * with this program. If not, see . */ -package org.isoron.androidbase.activities; +package org.isoron.androidbase; import android.support.annotation.*; -import org.isoron.androidbase.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.core.models.*; -import org.isoron.uhabits.models.sqlite.*; +import org.isoron.androidbase.activities.*; public class BaseExceptionHandler implements Thread.UncaughtExceptionHandler { @@ -49,20 +46,20 @@ public class BaseExceptionHandler implements Thread.UncaughtExceptionHandler try { ex.printStackTrace(); - new BaseSystem(activity).dumpBugReportToFile(); + new AndroidBugReporter(activity).dumpBugReportToFile(); } catch (Exception e) { e.printStackTrace(); } - if (ex.getCause() instanceof InconsistentDatabaseException) - { - HabitsApplication app = (HabitsApplication) activity.getApplication(); - HabitList habits = app.getComponent().getHabitList(); - habits.repair(); - System.exit(0); - } +// if (ex.getCause() instanceof InconsistentDatabaseException) +// { +// HabitsApplication app = (HabitsApplication) activity.getApplication(); +// HabitList habits = app.getComponent().getHabitList(); +// habits.repair(); +// System.exit(0); +// } if (originalHandler != null) originalHandler.uncaughtException(thread, ex); diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/CACertSSLContextProvider.java b/android-base/src/main/java/org/isoron/androidbase/SSLContextProvider.java similarity index 81% rename from uhabits-android/src/main/java/org/isoron/androidbase/CACertSSLContextProvider.java rename to android-base/src/main/java/org/isoron/androidbase/SSLContextProvider.java index b69a10e9a..c488bbc16 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/CACertSSLContextProvider.java +++ b/android-base/src/main/java/org/isoron/androidbase/SSLContextProvider.java @@ -20,22 +20,34 @@ package org.isoron.androidbase; import android.content.*; +import android.support.annotation.*; + +import org.isoron.androidbase.*; import java.io.*; import java.security.*; import java.security.cert.Certificate; import java.security.cert.*; +import javax.inject.*; import javax.net.ssl.*; -public interface CACertSSLContextProvider +public class SSLContextProvider { - default SSLContext getCACertSSLContext() + private Context context; + + @Inject + public SSLContextProvider(@NonNull @AppContext Context context) + { + this.context = context; + } + + public SSLContext getCACertSSLContext() { try { CertificateFactory cf = CertificateFactory.getInstance("X.509"); - InputStream caInput = getContext().getAssets().open("cacert.pem"); + InputStream caInput = context.getAssets().open("cacert.pem"); Certificate ca = cf.generateCertificate(caInput); KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); @@ -56,6 +68,4 @@ public interface CACertSSLContextProvider throw new RuntimeException(e); } } - - Context getContext(); } diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityContext.java b/android-base/src/main/java/org/isoron/androidbase/activities/ActivityContext.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityContext.java rename to android-base/src/main/java/org/isoron/androidbase/activities/ActivityContext.java diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java b/android-base/src/main/java/org/isoron/androidbase/activities/ActivityModule.java similarity index 85% rename from uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java rename to android-base/src/main/java/org/isoron/androidbase/activities/ActivityModule.java index adac8f2e5..f3910c989 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityModule.java +++ b/android-base/src/main/java/org/isoron/androidbase/activities/ActivityModule.java @@ -21,9 +21,6 @@ package org.isoron.androidbase.activities; import android.content.*; -import org.isoron.uhabits.activities.*; -import org.isoron.uhabits.core.ui.*; - import dagger.*; @Module @@ -48,11 +45,4 @@ 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/ActivityScope.java b/android-base/src/main/java/org/isoron/androidbase/activities/ActivityScope.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityScope.java rename to android-base/src/main/java/org/isoron/androidbase/activities/ActivityScope.java diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseActivity.java b/android-base/src/main/java/org/isoron/androidbase/activities/BaseActivity.java similarity index 87% rename from uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseActivity.java rename to android-base/src/main/java/org/isoron/androidbase/activities/BaseActivity.java index f7d80efe1..f58d65200 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseActivity.java +++ b/android-base/src/main/java/org/isoron/androidbase/activities/BaseActivity.java @@ -25,8 +25,7 @@ import android.support.annotation.*; import android.support.v7.app.*; import android.view.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.*; +import org.isoron.androidbase.*; import static android.R.anim.fade_in; import static android.R.anim.fade_out; @@ -53,13 +52,6 @@ abstract public class BaseActivity extends AppCompatActivity @Nullable private BaseScreen screen; - private ActivityComponent component; - - public ActivityComponent getComponent() - { - return component; - } - @Override public boolean onCreateOptionsMenu(@Nullable Menu menu) { @@ -120,16 +112,6 @@ abstract public class BaseActivity extends AppCompatActivity { super.onCreate(savedInstanceState); Thread.setDefaultUncaughtExceptionHandler(getExceptionHandler()); - - HabitsApplication app = (HabitsApplication) getApplicationContext(); - - component = DaggerActivityComponent - .builder() - .activityModule(new ActivityModule(this)) - .habitsComponent(app.getComponent()) - .build(); - - component.getThemeSwitcher().apply(); } protected Thread.UncaughtExceptionHandler getExceptionHandler() diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseMenu.java b/android-base/src/main/java/org/isoron/androidbase/activities/BaseMenu.java similarity index 95% rename from uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseMenu.java rename to android-base/src/main/java/org/isoron/androidbase/activities/BaseMenu.java index 0dbaaac92..7cba01ddc 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseMenu.java +++ b/android-base/src/main/java/org/isoron/androidbase/activities/BaseMenu.java @@ -22,8 +22,6 @@ package org.isoron.androidbase.activities; import android.support.annotation.*; import android.view.*; -import javax.annotation.*; - /** * Base class for all the menus in the application. *

@@ -76,8 +74,7 @@ public abstract class BaseMenu * @param inflater a menu inflater, for creating the menu * @param menu the menu that is being created. */ - public void onCreate(@NonNull MenuInflater inflater, - @NonNull Menu menu) + public void onCreate(@NonNull MenuInflater inflater, @NonNull Menu menu) { menu.clear(); inflater.inflate(getMenuResourceId(), menu); @@ -100,6 +97,6 @@ public abstract class BaseMenu * * @return id of the menu resource. */ - @Resource + @MenuRes protected abstract int getMenuResourceId(); } diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java b/android-base/src/main/java/org/isoron/androidbase/activities/BaseRootView.java similarity index 79% rename from uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java rename to android-base/src/main/java/org/isoron/androidbase/activities/BaseRootView.java index d86aafa00..c416d23cc 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseRootView.java +++ b/android-base/src/main/java/org/isoron/androidbase/activities/BaseRootView.java @@ -21,17 +21,15 @@ package org.isoron.androidbase.activities; import android.content.*; import android.support.annotation.*; -import android.support.v4.content.res.*; import android.support.v7.widget.Toolbar; import android.view.*; import android.widget.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.core.ui.*; -import org.isoron.uhabits.utils.*; +import org.isoron.androidbase.*; +import org.isoron.androidbase.utils.*; -import static android.os.Build.VERSION.*; -import static android.os.Build.VERSION_CODES.*; +import static android.os.Build.VERSION.SDK_INT; +import static android.os.Build.VERSION_CODES.LOLLIPOP; /** * Base class for all root views in the application. @@ -46,16 +44,12 @@ public abstract class BaseRootView extends FrameLayout @NonNull private final Context context; - private final ThemeSwitcher themeSwitcher; - - boolean shouldDisplayHomeAsUp = false; + protected boolean shouldDisplayHomeAsUp = false; public BaseRootView(@NonNull Context context) { super(context); this.context = context; - BaseActivity activity = (BaseActivity) context; - themeSwitcher = activity.getComponent().getThemeSwitcher(); } public boolean getDisplayHomeAsUp() @@ -80,12 +74,6 @@ public abstract class BaseRootView extends FrameLayout public int getToolbarColor() { - if (SDK_INT < LOLLIPOP && !themeSwitcher.isNightMode()) - { - return ResourcesCompat.getColor(context.getResources(), - R.color.grey_900, context.getTheme()); - } - StyledResources res = new StyledResources(context); return res.getColor(R.attr.colorPrimary); } diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseScreen.java b/android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java similarity index 85% rename from uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseScreen.java rename to android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java index f1583cb81..ddff40bc6 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseScreen.java +++ b/android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java @@ -24,10 +24,8 @@ 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; @@ -35,22 +33,14 @@ import android.support.v7.widget.Toolbar; import android.view.*; import android.widget.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.notifications.*; -import org.isoron.uhabits.utils.*; +import org.isoron.androidbase.*; +import org.isoron.androidbase.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.*; +import static android.os.Build.VERSION.SDK_INT; +import static android.os.Build.VERSION_CODES.LOLLIPOP; +import static android.support.v4.content.FileProvider.getUriForFile; /** * Base class for all screens in the application. @@ -61,8 +51,6 @@ import static android.support.v4.content.FileProvider.*; */ public class BaseScreen { - public static final int REQUEST_CREATE_DOCUMENT = 1; - protected BaseActivity activity; @Nullable @@ -78,6 +66,21 @@ public class BaseScreen this.activity = activity; } + @Deprecated + public static int getDefaultActionBarColor(Context context) + { + if (SDK_INT < LOLLIPOP) + { + return ResourcesCompat.getColor(context.getResources(), + R.color.grey_900, context.getTheme()); + } + else + { + StyledResources res = new StyledResources(context); + return res.getColor(R.attr.colorPrimary); + } + } + @Deprecated public static void setupActionBarColor(@NonNull AppCompatActivity activity, int color) @@ -93,7 +96,6 @@ public class BaseScreen actionBar.setDisplayHomeAsUpEnabled(true); - ColorDrawable drawable = new ColorDrawable(color); actionBar.setBackgroundDrawable(drawable); @@ -112,36 +114,6 @@ public class BaseScreen } } - @Deprecated - public static int getDefaultActionBarColor(Context context) - { - if (SDK_INT < LOLLIPOP) - { - return ResourcesCompat.getColor(context.getResources(), - R.color.grey_900, context.getTheme()); - } - else - { - StyledResources res = new StyledResources(context); - return res.getColor(R.attr.colorPrimary); - } - } - - 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. */ @@ -155,7 +127,8 @@ public class BaseScreen { if (rootView == null) return; - activity.runOnUiThread(() -> { + activity.runOnUiThread(() -> + { Toolbar toolbar = rootView.getToolbar(); activity.setSupportActionBar(toolbar); ActionBar actionBar = activity.getSupportActionBar(); diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java b/android-base/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java rename to android-base/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ColorUtils.java b/android-base/src/main/java/org/isoron/androidbase/utils/ColorUtils.java similarity index 52% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/ColorUtils.java rename to android-base/src/main/java/org/isoron/androidbase/utils/ColorUtils.java index d75e3f1a8..58199d2dd 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ColorUtils.java +++ b/android-base/src/main/java/org/isoron/androidbase/utils/ColorUtils.java @@ -17,71 +17,12 @@ * with this program. If not, see . */ -package org.isoron.uhabits.utils; +package org.isoron.androidbase.utils; -import android.content.*; import android.graphics.*; -import android.util.*; public abstract class ColorUtils { - public static int colorToPaletteIndex(Context context, int color) - { - StyledResources res = new StyledResources(context); - int[] palette = res.getPalette(); - - for (int k = 0; k < palette.length; k++) - if (palette[k] == color) return k; - - return -1; - } - - public static int getAndroidTestColor(int index) - { - int palette[] = { - Color.parseColor("#D32F2F"), // 0 red - Color.parseColor("#E64A19"), // 1 deep orange - Color.parseColor("#F57C00"), // 2 orange - Color.parseColor("#FF8F00"), // 3 amber - Color.parseColor("#F9A825"), // 4 yellow - Color.parseColor("#AFB42B"), // 5 lime - Color.parseColor("#7CB342"), // 6 light green - Color.parseColor("#388E3C"), // 7 green - Color.parseColor("#00897B"), // 8 teal - Color.parseColor("#00ACC1"), // 9 cyan - Color.parseColor("#039BE5"), // 10 light blue - Color.parseColor("#1976D2"), // 11 blue - Color.parseColor("#303F9F"), // 12 indigo - Color.parseColor("#5E35B1"), // 13 deep purple - Color.parseColor("#8E24AA"), // 14 purple - Color.parseColor("#D81B60"), // 15 pink - Color.parseColor("#5D4037"), // 16 brown - Color.parseColor("#303030"), // 17 dark grey - Color.parseColor("#757575"), // 18 grey - Color.parseColor("#aaaaaa") // 19 light grey - }; - - return palette[index]; - } - - public static int getColor(Context context, int paletteColor) - { - if (context == null) - throw new IllegalArgumentException("Context is null"); - - StyledResources res = new StyledResources(context); - int palette[] = res.getPalette(); - if (paletteColor < 0 || paletteColor >= palette.length) - { - Log.w("ColorHelper", - String.format("Invalid color: %d. Returning default.", - paletteColor)); - paletteColor = 0; - } - - return palette[paletteColor]; - } - public static int mixColors(int color1, int color2, float amount) { final byte ALPHA_CHANNEL = 24; diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/utils/FileUtils.java b/android-base/src/main/java/org/isoron/androidbase/utils/FileUtils.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/androidbase/utils/FileUtils.java rename to android-base/src/main/java/org/isoron/androidbase/utils/FileUtils.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/InterfaceUtils.java b/android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.java similarity index 98% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/InterfaceUtils.java rename to android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.java index 2026dcf6f..e1fea418b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/InterfaceUtils.java +++ b/android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.java @@ -17,7 +17,7 @@ * with this program. If not, see . */ -package org.isoron.uhabits.utils; +package org.isoron.androidbase.utils; import android.content.*; import android.content.res.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/StyledResources.java b/android-base/src/main/java/org/isoron/androidbase/utils/StyledResources.java similarity index 97% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/StyledResources.java rename to android-base/src/main/java/org/isoron/androidbase/utils/StyledResources.java index 1297f8962..c72686936 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/StyledResources.java +++ b/android-base/src/main/java/org/isoron/androidbase/utils/StyledResources.java @@ -17,14 +17,14 @@ * with this program. If not, see . */ -package org.isoron.uhabits.utils; +package org.isoron.androidbase.utils; import android.content.*; import android.content.res.*; import android.graphics.drawable.*; import android.support.annotation.*; -import org.isoron.uhabits.*; +import org.isoron.androidbase.*; public class StyledResources { diff --git a/android-base/src/main/res/values/base.xml b/android-base/src/main/res/values/base.xml new file mode 100644 index 000000000..c22a13fad --- /dev/null +++ b/android-base/src/main/res/values/base.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/android-base/src/main/res/values/material_colors.xml b/android-base/src/main/res/values/material_colors.xml new file mode 100644 index 000000000..ab9f783d7 --- /dev/null +++ b/android-base/src/main/res/values/material_colors.xml @@ -0,0 +1,300 @@ + + + #FFEBEE + #FFCDD2 + #EF9A9A + #E57373 + #EF5350 + #F44336 + #E53935 + #D32F2F + #C62828 + #B71C1C + #FF8A80 + #FF5252 + #FF1744 + #D50000 + + #EDE7F6 + #D1C4E9 + #B39DDB + #9575CD + #7E57C2 + #673AB7 + #5E35B1 + #512DA8 + #4527A0 + #311B92 + #B388FF + #7C4DFF + #651FFF + #6200EA + + #E1F5FE + #B3E5FC + #81D4FA + #4FC3F7 + #29B6F6 + #03A9F4 + #039BE5 + #0288D1 + #0277BD + #01579B + #80D8FF + #40C4FF + #00B0FF + #0091EA + + #E8F5E9 + #C8E6C9 + #A5D6A7 + #81C784 + #66BB6A + #4CAF50 + #43A047 + #388E3C + #2E7D32 + #1B5E20 + #B9F6CA + #69F0AE + #00E676 + #00C853 + + #FFFDE7 + #FFF9C4 + #FFF59D + #FFF176 + #FFEE58 + #FFEB3B + #FDD835 + #FBC02D + #F9A825 + #F57F17 + #FFFF8D + #FFFF00 + #FFEA00 + #FFD600 + + #FBE9E7 + #FFCCBC + #FFAB91 + #FF8A65 + #FF7043 + #FF5722 + #F4511E + #E64A19 + #D84315 + #BF360C + #FF9E80 + #FF6E40 + #FF3D00 + #DD2C00 + + #ECEFF1 + #CFD8DC + #B0BEC5 + #90A4AE + #78909C + #607D8B + #546E7A + #455A64 + #37474F + #263238 + + #FCE4EC + #F8BBD0 + #F48FB1 + #F06292 + #EC407A + #E91E63 + #D81B60 + #C2185B + #AD1457 + #880E4F + #FF80AB + #FF4081 + #F50057 + #C51162 + + #E8EAF6 + #C5CAE9 + #9FA8DA + #7986CB + #5C6BC0 + #3F51B5 + #3949AB + #303F9F + #283593 + #1A237E + #8C9EFF + #536DFE + #3D5AFE + #304FFE + + #E0F7FA + #B2EBF2 + #80DEEA + #4DD0E1 + #26C6DA + #00BCD4 + #00ACC1 + #0097A7 + #00838F + #006064 + #84FFFF + #18FFFF + #00E5FF + #00B8D4 + + #F1F8E9 + #DCEDC8 + #C5E1A5 + #AED581 + #9CCC65 + #8BC34A + #7CB342 + #689F38 + #558B2F + #33691E + #CCFF90 + #B2FF59 + #76FF03 + #64DD17 + + #FFF8E1 + #FFECB3 + #FFE082 + #FFD54F + #FFCA28 + #FFC107 + #FFB300 + #FFA000 + #FF8F00 + #FF6F00 + #FFE57F + #FFD740 + #FFC400 + #FFAB00 + + #EFEBE9 + #D7CCC8 + #BCAAA4 + #A1887F + #8D6E63 + #795548 + #6D4C41 + #5D4037 + #4E342E + #3E2723 + + #F3E5F5 + #E1BEE7 + #CE93D8 + #BA68C8 + #AB47BC + #9C27B0 + #8E24AA + #7B1FA2 + #6A1B9A + #4A148C + #EA80FC + #E040FB + #D500F9 + #AA00FF + + #E3F2FD + #BBDEFB + #90CAF9 + #64B5F6 + #42A5F5 + #2196F3 + #1E88E5 + #1976D2 + #1565C0 + #0D47A1 + #82B1FF + #448AFF + #2979FF + #2962FF + + #E0F2F1 + #B2DFDB + #80CBC4 + #4DB6AC + #26A69A + #009688 + #00897B + #00796B + #00695C + #004D40 + #A7FFEB + #64FFDA + #1DE9B6 + #00BFA5 + + #F9FBE7 + #F0F4C3 + #E6EE9C + #DCE775 + #D4E157 + #CDDC39 + #C0CA33 + #AFB42B + #9E9D24 + #827717 + #F4FF81 + #EEFF41 + #C6FF00 + #AEEA00 + + #FFF3E0 + #FFE0B2 + #FFCC80 + #FFB74D + #FFA726 + #FF9800 + #FB8C00 + #F57C00 + #EF6C00 + #E65100 + #FFD180 + #FFAB40 + #FF9100 + #FF6D00 + + #FAFAFA + #F5F5F5 + #EEEEEE + #E0E0E0 + #BDBDBD + #9E9E9E + #757575 + #616161 + #525252 + #424242 + #303030 + #282828 + #212121 + #101010 + + #ffffff + #000000 + + #ef000000 + #cf000000 + #af000000 + #8f000000 + #6f000000 + #4f000000 + #2f000000 + #0f000000 + + #efffffff + #cfffffff + #afffffff + #8fffffff + #6fffffff + #4fffffff + #2fffffff + #0fffffff + \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 10106d3ee..7180450d1 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':uhabits-android', ':uhabits-core' +include ':uhabits-android', ':uhabits-core', ':android-base' diff --git a/uhabits-android/build.gradle b/uhabits-android/build.gradle index 7ce317fbc..79fcfe202 100644 --- a/uhabits-android/build.gradle +++ b/uhabits-android/build.gradle @@ -53,6 +53,8 @@ android { dependencies { implementation project(":uhabits-core") + implementation project(":android-base") + 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-android/src/androidTest/assets/pull_failed b/uhabits-android/src/androidTest/assets/pull_failed deleted file mode 100755 index 8a3238df7..000000000 --- a/uhabits-android/src/androidTest/assets/pull_failed +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -P=/sdcard/Android/data/org.isoron.uhabits/cache/Failed/ - -adb pull $P Failed/ -adb shell rm -r $P 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 a25bd202b..6f1a01489 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/AndroidTestComponent.java @@ -29,12 +29,12 @@ import dagger.*; @AppScope @Component(modules = { - AppModule.class, + AppContextModule.class, HabitsModule.class, SingleThreadModule.class, SQLModelFactory.class }) -public interface AndroidTestComponent extends HabitsComponent +public interface AndroidTestComponent extends HabitsApplicationComponent { } 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 a243ca870..b874a3915 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java @@ -31,11 +31,11 @@ import android.util.*; import junit.framework.*; import org.isoron.androidbase.*; +import org.isoron.androidbase.utils.*; 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 org.isoron.uhabits.utils.*; import org.junit.*; import java.io.*; @@ -71,8 +71,6 @@ public class BaseAndroidTest extends TestCase protected ModelFactory modelFactory; - protected BaseSystem baseSystem; - @Override @Before public void setUp() @@ -89,11 +87,9 @@ public class BaseAndroidTest extends TestCase component = DaggerAndroidTestComponent .builder() - .appModule(new AppModule(targetContext.getApplicationContext())) + .appContextModule(new AppContextModule(targetContext.getApplicationContext())) .build(); - baseSystem = new BaseSystem(targetContext); - HabitsApplication.setComponent(component); prefs = component.getPreferences(); habitList = component.getHabitList(); @@ -168,7 +164,7 @@ public class BaseAndroidTest extends TestCase protected void startTracing() { - File dir = baseSystem.getFilesDir("Profile"); + File dir = new AndroidDirFinder(targetContext).getFilesDir("Profile"); assertNotNull(dir); String tracePath = dir.getAbsolutePath() + "/performance.trace"; Log.d("PerformanceTest", String.format("Saving trace file to %s", tracePath)); diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java index 05704bfca..d418c0f10 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java @@ -40,7 +40,7 @@ public class BaseUserInterfaceTest public static UiDevice device; - private HabitsComponent component; + private HabitsApplicationComponent component; private HabitList habitList; 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 b63e3ed65..79a09fe45 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java @@ -24,8 +24,8 @@ import android.support.annotation.*; import android.view.*; import android.widget.*; +import org.isoron.androidbase.*; import org.isoron.androidbase.utils.*; -import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.*; import java.io.*; @@ -170,7 +170,7 @@ public class BaseViewTest extends BaseAndroidTest { File dir = FileUtils.getSDCardDir("test-screenshots"); if (dir == null) - dir = baseSystem.getFilesDir("test-screenshots"); + dir = new AndroidDirFinder(targetContext).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/HabitLoggerTest.java b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java index 78ae34631..ddf71ab1e 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java @@ -54,8 +54,7 @@ public class HabitLoggerTest extends BaseAndroidTest protected void assertLogcatContains(String expectedMsg) throws IOException { - BaseSystem system = new BaseSystem(targetContext); - String logcat = system.getLogcat(); + String logcat = new AndroidBugReporter(targetContext).getLogcat(); assertThat(logcat, containsString(expectedMsg)); } 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 fae3ff95e..cb6a83b6c 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java @@ -41,8 +41,7 @@ public class HabitsApplicationTest extends BaseAndroidTest String msg = "LOGCAT TEST"; new RuntimeException(msg).printStackTrace(); - BaseSystem system = new BaseSystem(targetContext); - String log = system.getLogcat(); + String log = new AndroidBugReporter(targetContext).getLogcat(); assertThat(log, containsString(msg)); } } 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 579cd08bb..fdb7575a8 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 @@ -48,7 +48,7 @@ public class BarChartTest extends BaseViewTest long day = DateUtils.millisecondsInOneDay; CheckmarkList checkmarks = habit.getCheckmarks(); view.setCheckmarks(checkmarks.getByInterval(today - 20 * day, today)); - view.setColor(ColorUtils.getColor(targetContext, habit.getColor())); + view.setColor(PaletteUtils.getColor(targetContext, habit.getColor())); view.setTarget(200.0); measureView(view, dpToPixels(300), dpToPixels(200)); } 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 69560a38c..eaf1c2568 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 @@ -47,7 +47,7 @@ public class FrequencyChartTest extends BaseViewTest view = new FrequencyChart(targetContext); view.setFrequency(habit.getRepetitions().getWeekdayFrequency()); - view.setColor(ColorUtils.getAndroidTestColor(habit.getColor())); + view.setColor(PaletteUtils.getAndroidTestColor(habit.getColor())); measureView(view, dpToPixels(300), dpToPixels(100)); } 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 cbcfa350f..e4d1ba763 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 @@ -47,7 +47,7 @@ public class HistoryChartTest extends BaseViewTest chart = new HistoryChart(targetContext); chart.setCheckmarks(habit.getCheckmarks().getAllValues()); - chart.setColor(ColorUtils.getAndroidTestColor(habit.getColor())); + chart.setColor(PaletteUtils.getAndroidTestColor(habit.getColor())); measureView(chart, dpToPixels(400), dpToPixels(200)); } diff --git a/uhabits-android/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 index 6dcf84081..523d2cc9c 100644 --- a/uhabits-android/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 @@ -47,7 +47,7 @@ public class RingViewTest extends BaseViewTest view = new RingView(targetContext); view.setPercentage(0.6f); view.setText("60%"); - view.setColor(ColorUtils.getAndroidTestColor(0)); + view.setColor(PaletteUtils.getAndroidTestColor(0)); view.setBackgroundColor(Color.WHITE); view.setThickness(dpToPixels(3)); } @@ -63,7 +63,7 @@ public class RingViewTest extends BaseViewTest public void testRender_withDifferentParams() throws IOException { view.setPercentage(0.25f); - view.setColor(ColorUtils.getAndroidTestColor(5)); + view.setColor(PaletteUtils.getAndroidTestColor(5)); measureView(view, dpToPixels(200), dpToPixels(200)); assertRenders(view, BASE_PATH + "renderDifferentParams.png"); 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 43eb981db..c9c072c2b 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 @@ -50,7 +50,7 @@ public class ScoreChartTest extends BaseViewTest view = new ScoreChart(targetContext); view.setScores(habit.getScores().toList()); - view.setColor(ColorUtils.getColor(targetContext, habit.getColor())); + view.setColor(PaletteUtils.getColor(targetContext, habit.getColor())); view.setBucketSize(7); measureView(view, dpToPixels(300), dpToPixels(200)); } 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 da2df3138..cb4761a45 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 @@ -46,7 +46,7 @@ public class StreakChartTest extends BaseViewTest Habit habit = fixtures.createLongHabit(); view = new StreakChart(targetContext); - view.setColor(ColorUtils.getAndroidTestColor(habit.getColor())); + view.setColor(PaletteUtils.getAndroidTestColor(habit.getColor())); view.setStreaks(habit.getStreaks().getBest(5)); measureView(view, dpToPixels(300), dpToPixels(100)); } 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 e096922a0..53b2f1cc8 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 @@ -45,7 +45,7 @@ public class CheckmarkButtonViewTest extends BaseViewTest super.setUp(); view = new CheckmarkButtonView(targetContext); view.setValue(Checkmark.UNCHECKED); - view.setColor(ColorUtils.getAndroidTestColor(5)); + view.setColor(PaletteUtils.getAndroidTestColor(5)); measureView(view, dpToPixels(48), dpToPixels(48)); } 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 eb7439847..7f0eba13c 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 @@ -25,7 +25,7 @@ import android.test.suitebuilder.annotation.*; 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.isoron.uhabits.utils.*; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -60,7 +60,7 @@ public class CheckmarkPanelViewTest extends BaseViewTest view.setHabit(habit); view.setValues(checkmarks); view.setButtonCount(4); - view.setColor(ColorUtils.getAndroidTestColor(7)); + view.setColor(PaletteUtils.getAndroidTestColor(7)); measureView(view, dpToPixels(200), dpToPixels(200)); } diff --git a/uhabits-android/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 index 890337e59..b51829100 100644 --- a/uhabits-android/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 @@ -51,7 +51,7 @@ public class NumberButtonViewTest extends BaseViewTest view = new NumberButtonView(targetContext); view.setUnit("steps"); view.setThreshold(100.0); - view.setColor(ColorUtils.getAndroidTestColor(8)); + view.setColor(PaletteUtils.getAndroidTestColor(8)); measureView(view, dpToPixels(48), dpToPixels(48)); 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 2c268b4f8..1dcd0da6e 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 @@ -22,6 +22,7 @@ package org.isoron.uhabits.tasks; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.*; import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.tasks.*; @@ -31,8 +32,8 @@ import org.junit.runner.*; import java.io.*; 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; @RunWith(AndroidJUnit4.class) @@ -54,7 +55,7 @@ public class ExportCSVTaskTest extends BaseAndroidTest List selected = new LinkedList<>(); for (Habit h : habitList) selected.add(h); - File outputDir = baseSystem.getFilesDir("CSV"); + File outputDir = new AndroidDirFinder(targetContext).getFilesDir("CSV"); assertNotNull(outputDir); taskRunner.execute( 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 71ac1ffb4..25d0d743a 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 @@ -22,6 +22,7 @@ package org.isoron.uhabits.tasks; import android.support.test.runner.*; import android.test.suitebuilder.annotation.*; +import org.isoron.androidbase.*; import org.isoron.uhabits.*; import org.junit.*; import org.junit.runner.*; @@ -43,12 +44,14 @@ public class ExportDBTaskTest extends BaseAndroidTest public void testExportCSV() throws Throwable { ExportDBTask task = - new ExportDBTask(targetContext, baseSystem, filename -> { - assertNotNull(filename); - File f = new File(filename); - assertTrue(f.exists()); - assertTrue(f.canRead()); - }); + new ExportDBTask(targetContext, new AndroidDirFinder(targetContext), + filename -> + { + assertNotNull(filename); + File f = new File(filename); + assertTrue(f.exists()); + assertTrue(f.canRead()); + }); taskRunner.execute(task); } 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 7ff714856..da8753ba8 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 @@ -50,7 +50,7 @@ public class CheckmarkWidgetViewTest extends BaseViewTest double score = habit.getScores().getTodayValue(); float percentage = (float) score; - view.setActiveColor(ColorUtils.getAndroidTestColor(0)); + view.setActiveColor(PaletteUtils.getAndroidTestColor(0)); view.setCheckmarkValue(habit.getCheckmarks().getTodayValue()); view.setPercentage(percentage); view.setName(habit.getName()); 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 066fae376..7e555c77e 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.java @@ -42,7 +42,7 @@ public class HabitsApplication extends Application { private Context context; - private static HabitsComponent component; + private static HabitsApplicationComponent component; private WidgetUpdater widgetUpdater; @@ -50,12 +50,12 @@ public class HabitsApplication extends Application private NotificationTray notificationTray; - public HabitsComponent getComponent() + public HabitsApplicationComponent getComponent() { return component; } - public static void setComponent(HabitsComponent component) + public static void setComponent(HabitsApplicationComponent component) { HabitsApplication.component = component; } @@ -79,9 +79,9 @@ public class HabitsApplication extends Application super.onCreate(); context = this; - component = DaggerHabitsComponent + component = DaggerHabitsApplicationComponent .builder() - .appModule(new AppModule(context)) + .appContextModule(new AppContextModule(context)) .build(); if (isTestMode()) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplicationComponent.java similarity index 93% rename from uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java rename to uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplicationComponent.java index ae7b9eb4c..dfc35281a 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplicationComponent.java @@ -43,15 +43,10 @@ import dagger.*; @AppScope @Component(modules = { - AppModule.class, - HabitsModule.class, - AndroidTaskRunner.class, - SQLModelFactory.class + AppContextModule.class, HabitsModule.class, AndroidTaskRunner.class, SQLModelFactory.class }) -public interface HabitsComponent +public interface HabitsApplicationComponent { - BaseSystem getBaseSystem(); - CommandRunner getCommandRunner(); @AppContext 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 295182d02..62b04c9bd 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 @@ -22,7 +22,7 @@ package org.isoron.uhabits.activities; import android.support.annotation.*; import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.*; +import org.isoron.uhabits.R; import org.isoron.uhabits.core.preferences.*; import org.isoron.uhabits.core.ui.*; 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/HabitModule.java similarity index 61% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitComponent.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitModule.java index f298f715b..105b9a6b5 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/HabitModule.java @@ -17,29 +17,25 @@ * with this program. If not, see . */ -package org.isoron.uhabits.activities.habits.show; +package org.isoron.uhabits.activities; -import android.support.annotation.*; - -import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.*; +import org.isoron.uhabits.core.models.*; import dagger.*; -@ActivityScope -@Component(modules = { ShowHabitModule.class }, - dependencies = { HabitsComponent.class }) -public interface ShowHabitComponent +@Module +public class HabitModule { - @NonNull - ShowHabitController getController(); - - @NonNull - ShowHabitsMenu getMenu(); - - @NonNull - ShowHabitRootView getRootView(); - - @NonNull - ShowHabitScreen getScreen(); + private final Habit habit; + + public HabitModule(Habit habit) + { + this.habit = habit; + } + + @Provides + public Habit getHabit() + { + return habit; + } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivity.java new file mode 100644 index 000000000..3cb8a2e31 --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivity.java @@ -0,0 +1,78 @@ +/* + * 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; + +import android.content.*; +import android.net.*; +import android.os.*; +import android.support.annotation.*; + +import org.isoron.androidbase.activities.*; +import org.isoron.uhabits.*; +import org.isoron.uhabits.core.models.*; + +public abstract class HabitsActivity extends BaseActivity +{ + private HabitsActivityComponent component; + + private HabitsApplicationComponent appComponent; + + public HabitsActivityComponent getActivityComponent() + { + return component; + } + + public HabitsApplicationComponent getAppComponent() + { + return appComponent; + } + + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + appComponent = + ((HabitsApplication) getApplicationContext()).getComponent(); + + Habit habit = getHabitFromIntent(appComponent.getHabitList()); + + component = DaggerHabitsActivityComponent + .builder() + .activityModule(new ActivityModule(this)) + .habitModule(new HabitModule(habit)) + .habitsApplicationComponent(appComponent) + .build(); + + component.getThemeSwitcher().apply(); + } + + @Nullable + private Habit getHabitFromIntent(@NonNull HabitList habitList) + { + Uri data = getIntent().getData(); + if(data == null) return null; + + 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/HabitsActivityComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivityComponent.java new file mode 100644 index 000000000..8d26af69d --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivityComponent.java @@ -0,0 +1,74 @@ +/* + * 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; + +import org.isoron.androidbase.activities.*; +import org.isoron.uhabits.*; +import org.isoron.uhabits.activities.common.dialogs.*; +import org.isoron.uhabits.activities.habits.list.*; +import org.isoron.uhabits.activities.habits.list.controllers.*; +import org.isoron.uhabits.activities.habits.list.model.*; +import org.isoron.uhabits.activities.habits.show.*; +import org.isoron.uhabits.core.ui.*; + +import dagger.*; + +@ActivityScope +@Component(modules = { + ActivityModule.class, + HabitsActivityModule.class, + ListHabitsModule.class, + ShowHabitModule.class, + HabitModule.class +}, dependencies = { HabitsApplicationComponent.class }) +public interface HabitsActivityComponent +{ + BaseActivity getActivity(); + + CheckmarkButtonControllerFactory getCheckmarkButtonControllerFactory(); + + ColorPickerDialogFactory getColorPickerDialogFactory(); + + HabitCardListAdapter getHabitCardListAdapter(); + + HabitCardListController getHabitCardListController(); + + ListHabitsController getListHabitsController(); + + ListHabitsMenu getListHabitsMenu(); + + ListHabitsRootView getListHabitsRootView(); + + ListHabitsScreen getListHabitsScreen(); + + ListHabitsSelectionMenu getListHabitsSelectionMenu(); + + NumberButtonControllerFactory getNumberButtonControllerFactory(); + + ShowHabitController getShowHabitController(); + + ShowHabitsMenu getShowHabitMenu(); + + ShowHabitRootView getShowHabitRootView(); + + ShowHabitScreen getShowHabitScreen(); + + ThemeSwitcher getThemeSwitcher(); +} diff --git a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivityModule.java similarity index 67% rename from uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java rename to uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivityModule.java index 761d96926..8263190e2 100644 --- a/uhabits-android/src/main/java/org/isoron/androidbase/activities/ActivityComponent.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivityModule.java @@ -17,22 +17,17 @@ * with this program. If not, see . */ -package org.isoron.androidbase.activities; +package org.isoron.uhabits.activities; -import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.common.dialogs.*; +import org.isoron.androidbase.activities.*; import org.isoron.uhabits.core.ui.*; import dagger.*; -@ActivityScope -@Component(modules = { ActivityModule.class }, - dependencies = { HabitsComponent.class }) -public interface ActivityComponent +@Module +public abstract class HabitsActivityModule { - BaseActivity getActivity(); - - ColorPickerDialogFactory getColorPickerDialogFactory(); - - ThemeSwitcher getThemeSwitcher(); + @Binds + @ActivityScope + abstract ThemeSwitcher getThemeSwitcher(AndroidThemeSwitcher t); } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsDirFinder.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsDirFinder.java new file mode 100644 index 000000000..8940bda7d --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsDirFinder.java @@ -0,0 +1,47 @@ +/* + * 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; + +import android.support.annotation.*; + +import org.isoron.androidbase.*; +import org.isoron.uhabits.core.ui.screens.habits.list.*; +import org.isoron.uhabits.core.ui.screens.habits.show.*; + +import java.io.*; + +import javax.inject.*; + +public class HabitsDirFinder + implements ShowHabitMenuBehavior.System, ListHabitsBehavior.DirFinder +{ + private AndroidDirFinder androidDirFinder; + + @Inject + public HabitsDirFinder(@NonNull AndroidDirFinder androidDirFinder) + { + this.androidDirFinder = androidDirFinder; + } + + @Override + public File getCSVOutputDir() + { + return androidDirFinder.getFilesDir("CSV"); + } +} 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 b99bd15ed..f413d55dd 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,22 +21,21 @@ package org.isoron.uhabits.activities.about; import android.os.*; -import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.activities.*; import org.isoron.uhabits.core.ui.screens.about.*; /** * Activity that allows the user to see information about the app itself. * Display current version, link to Google Play and list of contributors. */ -public class AboutActivity extends BaseActivity +public class AboutActivity extends HabitsActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - HabitsApplication app = (HabitsApplication) getApplication(); - HabitsComponent cmp = app.getComponent(); + HabitsApplicationComponent cmp = getAppComponent(); 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/about/AboutRootView.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java index db7583b2e..116c414d5 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.widget.*; import org.isoron.androidbase.activities.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.BuildConfig; import org.isoron.uhabits.R; 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/common/dialogs/ColorPickerDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java index 8e58acded..6bafd7f00 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 @@ -31,7 +31,7 @@ public class ColorPickerDialog extends com.android.colorpicker.ColorPickerDialog { super.setOnColorSelectedListener(c -> { - c = ColorUtils.colorToPaletteIndex(getContext(), c); + c = PaletteUtils.colorToPaletteIndex(getContext(), c); callback.onColorPicked(c); }); } 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 f959bee62..f9877f5d8 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 @@ -22,7 +22,8 @@ package org.isoron.uhabits.activities.common.dialogs; import android.content.*; import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.*; +import org.isoron.androidbase.utils.*; +import org.isoron.uhabits.R; import org.isoron.uhabits.utils.*; import javax.inject.*; @@ -42,7 +43,7 @@ public class ColorPickerDialogFactory { ColorPickerDialog dialog = new ColorPickerDialog(); StyledResources res = new StyledResources(context); - int color = ColorUtils.getColor(context, paletteColor); + int color = PaletteUtils.getColor(context, paletteColor); dialog.initialize(R.string.color_picker_default_title, res.getPalette(), color, 4, com.android.colorpicker.ColorPickerDialog.SIZE_SMALL); 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 19d4afb86..0a76b52fc 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 @@ -33,7 +33,7 @@ import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.tasks.*; import org.isoron.uhabits.utils.*; -import static org.isoron.uhabits.utils.InterfaceUtils.*; +import static org.isoron.androidbase.utils.InterfaceUtils.*; public class HistoryEditorDialog extends AppCompatDialogFragment implements DialogInterface.OnClickListener, ModelObservable.Listener @@ -171,7 +171,7 @@ public class HistoryEditorDialog extends AppCompatDialogFragment if (getContext() == null || habit == null || historyChart == null) return; - int color = ColorUtils.getColor(getContext(), habit.getColor()); + int color = PaletteUtils.getColor(getContext(), habit.getColor()); historyChart.setColor(color); historyChart.setCheckmarks(checkmarks); } 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 fe5bbae42..3d053ef5a 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 @@ -24,6 +24,7 @@ import android.graphics.*; import android.support.annotation.*; import android.util.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.views.*; import org.isoron.uhabits.core.models.*; @@ -33,7 +34,7 @@ import org.isoron.uhabits.utils.*; import java.text.*; import java.util.*; -import static org.isoron.uhabits.utils.InterfaceUtils.*; +import static org.isoron.androidbase.utils.InterfaceUtils.*; public class BarChart extends ScrollableChart { 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 9f6400eeb..42d664437 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 @@ -24,6 +24,7 @@ import android.graphics.*; import android.support.annotation.*; import android.util.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.utils.*; 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 a76c8d208..53d8daa28 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 @@ -26,6 +26,7 @@ import android.support.annotation.*; import android.util.*; import android.view.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.utils.*; @@ -34,7 +35,7 @@ import java.text.*; import java.util.*; import static org.isoron.uhabits.core.models.Checkmark.*; -import static org.isoron.uhabits.utils.InterfaceUtils.*; +import static org.isoron.androidbase.utils.InterfaceUtils.*; public class HistoryChart extends ScrollableChart { diff --git a/uhabits-android/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 index 99764b61a..ac3d72890 100644 --- a/uhabits-android/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 @@ -26,11 +26,12 @@ import android.text.*; import android.util.*; import android.view.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.utils.*; import static org.isoron.uhabits.utils.AttributeSetUtils.*; -import static org.isoron.uhabits.utils.InterfaceUtils.*; +import static org.isoron.androidbase.utils.InterfaceUtils.*; public class RingView extends View { @@ -76,7 +77,7 @@ public class RingView extends View percentage = 0.0f; precision = 0.01f; - color = ColorUtils.getAndroidTestColor(0); + color = PaletteUtils.getAndroidTestColor(0); thickness = dpToPixels(getContext(), 2); text = ""; textSize = getDimension(context, R.dimen.smallTextSize); 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 f2d540517..6cbc2293c 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 @@ -24,6 +24,7 @@ import android.graphics.*; import android.support.annotation.*; import android.util.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.utils.*; @@ -32,7 +33,7 @@ import org.isoron.uhabits.utils.*; import java.text.*; import java.util.*; -import static org.isoron.uhabits.utils.InterfaceUtils.*; +import static org.isoron.androidbase.utils.InterfaceUtils.*; public class ScoreChart extends ScrollableChart { 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 361828c05..d7c0267ae 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 @@ -25,16 +25,16 @@ import android.util.*; import android.view.*; import android.view.ViewGroup.*; +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.utils.*; import java.text.*; import java.util.*; import static android.view.View.MeasureSpec.*; -import static org.isoron.uhabits.utils.InterfaceUtils.getDimension; +import static org.isoron.androidbase.utils.InterfaceUtils.getDimension; public class StreakChart extends View { 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 b80c78c9c..5553ad816 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.core.commands.*; @@ -39,8 +39,8 @@ import org.isoron.uhabits.core.preferences.*; import butterknife.*; -import static android.view.View.*; -import static org.isoron.uhabits.core.ui.ThemeSwitcher.*; +import static android.view.View.GONE; +import static org.isoron.uhabits.core.ui.ThemeSwitcher.THEME_LIGHT; public class EditHabitDialog extends AppCompatDialogFragment { @@ -56,7 +56,7 @@ public class EditHabitDialog extends AppCompatDialogFragment protected HabitList habitList; - protected HabitsComponent component; + protected HabitsApplicationComponent component; protected ModelFactory modelFactory; @@ -77,7 +77,7 @@ public class EditHabitDialog extends AppCompatDialogFragment @Override public int getTheme() { - HabitsComponent component = + HabitsApplicationComponent component = ((HabitsApplication) getContext().getApplicationContext()).getComponent(); if(component.getPreferences().getTheme() == THEME_LIGHT) @@ -91,9 +91,9 @@ public class EditHabitDialog extends AppCompatDialogFragment { super.onActivityCreated(savedInstanceState); - BaseActivity activity = (BaseActivity) getActivity(); + HabitsActivity activity = (HabitsActivity) getActivity(); colorPickerDialogFactory = - activity.getComponent().getColorPickerDialogFactory(); + activity.getActivityComponent().getColorPickerDialogFactory(); } @Override diff --git a/uhabits-android/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 index 977d746ab..1403a0b13 100644 --- a/uhabits-android/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 @@ -26,8 +26,8 @@ import android.util.*; import android.view.*; import android.widget.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.utils.*; import static org.isoron.uhabits.utils.AttributeSetUtils.*; 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 6d2ac6848..ca7f45715 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 @@ -68,7 +68,7 @@ public class NameDescriptionPanel extends FrameLayout public void setColor(int color) { this.color = color; - tvName.setTextColor(ColorUtils.getColor(getContext(), color)); + tvName.setTextColor(PaletteUtils.getColor(getContext(), color)); } @NonNull 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 93dba195e..78d154280 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 @@ -21,8 +21,7 @@ package org.isoron.uhabits.activities.habits.list; 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.core.preferences.*; import org.isoron.uhabits.core.ui.*; @@ -31,7 +30,7 @@ import org.isoron.uhabits.core.utils.*; /** * Activity that allows the user to see and modify the list of habits. */ -public class ListHabitsActivity extends BaseActivity +public class ListHabitsActivity extends HabitsActivity { private HabitCardListAdapter adapter; @@ -39,47 +38,33 @@ public class ListHabitsActivity extends BaseActivity private ListHabitsScreen screen; - private ListHabitsComponent component; - private boolean pureBlack; private Preferences prefs; private MidnightTimer midnightTimer; - public ListHabitsComponent getListHabitsComponent() - { - return component; - } - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + midnightTimer = getAppComponent().getMidnightTimer(); + HabitsActivityComponent component = getActivityComponent(); - HabitsApplication app = (HabitsApplication) getApplicationContext(); - midnightTimer = app.getComponent().getMidnightTimer(); - - component = DaggerListHabitsComponent - .builder() - .habitsComponent(app.getComponent()) - .listHabitsModule(new ListHabitsModule(this)) - .build(); - - ListHabitsMenu menu = component.getMenu(); - ListHabitsSelectionMenu selectionMenu = component.getSelectionMenu(); - ListHabitsController controller = component.getController(); + ListHabitsMenu menu = component.getListHabitsMenu(); + ListHabitsSelectionMenu selectionMenu = component.getListHabitsSelectionMenu(); + ListHabitsController controller = component.getListHabitsController(); - adapter = component.getAdapter(); - rootView = component.getRootView(); - screen = component.getScreen(); + adapter = component.getHabitCardListAdapter(); + rootView = component.getListHabitsRootView(); + screen = component.getListHabitsScreen(); - prefs = app.getComponent().getPreferences(); + prefs = getAppComponent().getPreferences(); pureBlack = prefs.isPureBlackEnabled(); screen.setMenu(menu); screen.setController(controller); - screen.setListController(component.getListController()); + screen.setListController(component.getHabitCardListController()); 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 deleted file mode 100644 index 39dd1f60a..000000000 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsComponent.java +++ /dev/null @@ -1,51 +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.activities.habits.list; - -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 dagger.*; - -@ActivityScope -@Component(modules = { ListHabitsModule.class }, - dependencies = { HabitsComponent.class }) -public interface ListHabitsComponent -{ - HabitCardListAdapter getAdapter(); - - CheckmarkButtonControllerFactory getCheckmarkButtonControllerFactory(); - - ListHabitsController getController(); - - HabitCardListController getListController(); - - ListHabitsMenu getMenu(); - - NumberButtonControllerFactory getNumberButtonControllerFactory(); - - ListHabitsRootView getRootView(); - - ListHabitsScreen getScreen(); - - ListHabitsSelectionMenu getSelectionMenu(); -} 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 a9e49208f..707f741ae 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 @@ -22,7 +22,7 @@ package org.isoron.uhabits.activities.habits.list; import android.support.annotation.*; import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.*; +import org.isoron.uhabits.R; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.core.models.*; 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 8eabf2192..0c8335284 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 @@ -23,7 +23,7 @@ import android.support.annotation.*; import android.view.*; import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.*; +import org.isoron.uhabits.R; import org.isoron.uhabits.core.preferences.*; import org.isoron.uhabits.core.ui.*; import org.isoron.uhabits.core.ui.screens.habits.list.*; 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 275e4850e..4b48a8d2a 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 @@ -19,56 +19,51 @@ package org.isoron.uhabits.activities.habits.list; +import android.content.*; +import android.support.annotation.*; import org.isoron.androidbase.*; -import org.isoron.androidbase.activities.*; +import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.core.ui.screens.habits.list.*; +import javax.inject.*; + import dagger.*; -@Module -public class ListHabitsModule extends ActivityModule +class BugReporterProxy extends AndroidBugReporter + implements ListHabitsBehavior.BugReporter { - public ListHabitsModule(BaseActivity activity) + @Inject + public BugReporterProxy(@AppContext @NonNull Context context) { - super(activity); + super(context); } +} - @Provides - ListHabitsMenuBehavior.Adapter getAdapter(HabitCardListAdapter adapter) - { - return adapter; - } +@Module +public abstract class ListHabitsModule +{ + @Binds + abstract ListHabitsMenuBehavior.Adapter getAdapter(HabitCardListAdapter adapter); - @Provides - ListHabitsMenuBehavior.Screen getMenuScreen(ListHabitsScreen screen) - { - return screen; - } + @Binds + abstract ListHabitsBehavior.BugReporter getBugReporter(BugReporterProxy proxy); - @Provides - ListHabitsBehavior.Screen getScreen(ListHabitsScreen screen) - { - return screen; - } + @Binds + abstract ListHabitsMenuBehavior.Screen getMenuScreen(ListHabitsScreen screen); - @Provides - ListHabitsSelectionMenuBehavior.Adapter getSelMenuAdapter( - HabitCardListAdapter adapter) - { - return adapter; - } + @Binds + abstract ListHabitsBehavior.Screen getScreen(ListHabitsScreen screen); - @Provides - ListHabitsSelectionMenuBehavior.Screen getSelMenuScreen(ListHabitsScreen screen) - { - return screen; - } + @Binds + abstract ListHabitsSelectionMenuBehavior.Adapter getSelMenuAdapter( + HabitCardListAdapter adapter); - @Provides - ListHabitsBehavior.System getSystem(BaseSystem system) - { - return system; - } + @Binds + abstract ListHabitsSelectionMenuBehavior.Screen getSelMenuScreen( + ListHabitsScreen screen); + + @Binds + abstract ListHabitsBehavior.DirFinder getSystem(HabitsDirFinder 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 92656a404..58c681d43 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 @@ -26,6 +26,7 @@ import android.view.*; import android.widget.*; import org.isoron.androidbase.activities.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.activities.habits.list.controllers.*; @@ -34,13 +35,12 @@ import org.isoron.uhabits.activities.habits.list.views.*; 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.*; import butterknife.*; -import static org.isoron.uhabits.utils.InterfaceUtils.*; +import static org.isoron.androidbase.utils.InterfaceUtils.*; @ActivityScope public class ListHabitsRootView extends BaseRootView 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 7b294b81d..b84597aca 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 @@ -30,7 +30,7 @@ import android.widget.*; import org.isoron.androidbase.activities.*; import org.isoron.androidbase.utils.*; -import org.isoron.uhabits.*; +import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.*; import org.isoron.uhabits.activities.habits.list.controllers.*; @@ -41,7 +41,6 @@ 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.intents.*; -import org.isoron.uhabits.utils.*; import java.io.*; import java.lang.reflect.*; 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 6a1334b04..64e4a7eef 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 @@ -23,7 +23,7 @@ import android.support.annotation.*; import android.view.*; import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.*; +import org.isoron.uhabits.R; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.activities.habits.list.model.*; import org.isoron.uhabits.core.commands.*; 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 478ef3597..ab5434186 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 @@ -27,6 +27,7 @@ import android.text.*; import android.util.*; import android.view.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.utils.*; @@ -34,8 +35,8 @@ import org.isoron.uhabits.utils.*; import static android.view.View.MeasureSpec.*; 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; +import static org.isoron.androidbase.utils.InterfaceUtils.getDimension; +import static org.isoron.androidbase.utils.InterfaceUtils.getFontAwesome; public class CheckmarkButtonView extends View { @@ -66,7 +67,7 @@ public class CheckmarkButtonView extends View if(attrs == null) throw new IllegalStateException(); int paletteColor = getIntAttribute(ctx, attrs, "color", 0); - setColor(ColorUtils.getAndroidTestColor(paletteColor)); + setColor(PaletteUtils.getAndroidTestColor(paletteColor)); int value = getIntAttribute(ctx, attrs, "value", 0); setValue(value); 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 2eafb0536..8deb39756 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 @@ -25,7 +25,7 @@ import android.util.*; import android.widget.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.habits.list.*; +import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.preferences.*; @@ -33,10 +33,11 @@ import org.isoron.uhabits.core.utils.*; import java.util.*; -import static android.view.View.MeasureSpec.*; -import static org.isoron.uhabits.utils.AttributeSetUtils.*; -import static org.isoron.uhabits.utils.ColorUtils.*; -import static org.isoron.uhabits.utils.InterfaceUtils.*; +import static android.view.View.MeasureSpec.EXACTLY; +import static android.view.View.MeasureSpec.makeMeasureSpec; +import static org.isoron.uhabits.utils.AttributeSetUtils.getIntAttribute; +import static org.isoron.uhabits.utils.PaletteUtils.getAndroidTestColor; +import static org.isoron.androidbase.utils.InterfaceUtils.getDimension; public class CheckmarkPanelView extends LinearLayout implements Preferences.Listener @@ -207,11 +208,11 @@ public class CheckmarkPanelView extends LinearLayout CheckmarkButtonView buttonView) { if (controller == null) return; - if (!(getContext() instanceof ListHabitsActivity)) return; + if (!(getContext() instanceof HabitsActivity)) return; - ListHabitsActivity activity = (ListHabitsActivity) getContext(); + HabitsActivity activity = (HabitsActivity) getContext(); CheckmarkButtonControllerFactory buttonControllerFactory = activity - .getListHabitsComponent() + .getActivityComponent() .getCheckmarkButtonControllerFactory(); CheckmarkButtonController buttonController = 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 5aeeae9c7..eefd5ca25 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 @@ -29,6 +29,7 @@ import android.util.*; import android.view.*; import android.widget.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.core.models.*; @@ -40,7 +41,7 @@ import java.util.*; import static android.os.Build.VERSION.*; import static android.os.Build.VERSION_CODES.*; import static android.view.ViewGroup.LayoutParams.*; -import static org.isoron.uhabits.utils.InterfaceUtils.*; +import static org.isoron.androidbase.utils.InterfaceUtils.*; public class HabitCardView extends FrameLayout implements ModelObservable.Listener @@ -194,7 +195,7 @@ public class HabitCardView extends FrameLayout private int getActiveColor(Habit habit) { int mediumContrastColor = res.getColor(R.attr.mediumContrastTextColor); - int activeColor = ColorUtils.getColor(context, habit.getColor()); + int activeColor = PaletteUtils.getColor(context, habit.getColor()); if (habit.isArchived()) activeColor = mediumContrastColor; return activeColor; @@ -237,7 +238,7 @@ public class HabitCardView extends FrameLayout private void initEditMode() { Random rand = new Random(); - int color = ColorUtils.getAndroidTestColor(rand.nextInt(10)); + int color = PaletteUtils.getAndroidTestColor(rand.nextInt(10)); label.setText(EDIT_MODE_HABITS[rand.nextInt(EDIT_MODE_HABITS.length)]); label.setTextColor(color); scoreRing.setColor(color); 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 cd8c435ac..90bdebf39 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 @@ -25,15 +25,15 @@ import android.support.annotation.*; import android.text.*; import android.util.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.core.preferences.*; import org.isoron.uhabits.core.utils.*; -import org.isoron.uhabits.utils.*; import java.util.*; -import static org.isoron.uhabits.utils.InterfaceUtils.*; +import static org.isoron.androidbase.utils.InterfaceUtils.*; public class HeaderView extends ScrollableChart implements Preferences.Listener, MidnightTimer.MidnightListener diff --git a/uhabits-android/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 index 4cd160773..beed5b034 100644 --- a/uhabits-android/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 @@ -26,6 +26,7 @@ import android.text.*; import android.util.*; import android.view.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.utils.*; @@ -33,8 +34,7 @@ import org.isoron.uhabits.utils.*; import java.text.*; import static org.isoron.uhabits.utils.AttributeSetUtils.*; -import static org.isoron.uhabits.utils.ColorUtils.*; -import static org.isoron.uhabits.utils.InterfaceUtils.*; +import static org.isoron.androidbase.utils.InterfaceUtils.*; public class NumberButtonView extends View { @@ -81,7 +81,7 @@ public class NumberButtonView extends View int value = getIntAttribute(ctx, attrs, "value", 0); int threshold = getIntAttribute(ctx, attrs, "threshold", 1); String unit = getAttribute(ctx, attrs, "unit", "min"); - setColor(getAndroidTestColor(color)); + setColor(PaletteUtils.getAndroidTestColor(color)); setThreshold(threshold); setValue(value); setUnit(unit); 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 25547e7de..19479bd5a 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 @@ -25,7 +25,7 @@ import android.util.*; import android.widget.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.activities.habits.list.*; +import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.habits.list.controllers.*; import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.preferences.*; @@ -33,10 +33,12 @@ import org.isoron.uhabits.core.utils.*; import java.util.*; -import static android.view.View.MeasureSpec.*; -import static org.isoron.uhabits.utils.AttributeSetUtils.*; -import static org.isoron.uhabits.utils.ColorUtils.*; -import static org.isoron.uhabits.utils.InterfaceUtils.*; +import static android.view.View.MeasureSpec.EXACTLY; +import static android.view.View.MeasureSpec.makeMeasureSpec; +import static org.isoron.uhabits.utils.AttributeSetUtils.getAttribute; +import static org.isoron.uhabits.utils.AttributeSetUtils.getIntAttribute; +import static org.isoron.uhabits.utils.PaletteUtils.getAndroidTestColor; +import static org.isoron.androidbase.utils.InterfaceUtils.getDimension; public class NumberPanelView extends LinearLayout implements Preferences.Listener @@ -222,11 +224,11 @@ public class NumberPanelView extends LinearLayout NumberButtonView buttonView) { if (controller == null) return; - if (!(getContext() instanceof ListHabitsActivity)) return; + if (!(getContext() instanceof HabitsActivity)) return; - ListHabitsActivity activity = (ListHabitsActivity) getContext(); + HabitsActivity activity = (HabitsActivity) getContext(); NumberButtonControllerFactory buttonControllerFactory = activity - .getListHabitsComponent() + .getActivityComponent() .getNumberButtonControllerFactory(); NumberButtonController buttonController = 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 72287711c..a32499b80 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 @@ -19,27 +19,18 @@ package org.isoron.uhabits.activities.habits.show; -import android.content.*; -import android.net.*; import android.os.*; import android.support.annotation.*; -import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.activities.*; /** * Activity that allows the user to see more information about a single habit. *

* Shows all the metadata for the habit, in addition to several charts. */ -public class ShowHabitActivity extends BaseActivity +public class ShowHabitActivity extends HabitsActivity { - @Nullable - private HabitList habitList; - - @Nullable - private HabitsComponent appComponent; @Nullable private ShowHabitScreen screen; @@ -49,42 +40,21 @@ public class ShowHabitActivity extends BaseActivity { super.onCreate(savedInstanceState); - HabitsApplication app = (HabitsApplication) getApplicationContext(); - appComponent = app.getComponent(); - habitList = appComponent.getHabitList(); - Habit habit = getHabitFromIntent(); - - ShowHabitComponent component = DaggerShowHabitComponent - .builder() - .habitsComponent(app.getComponent()) - .showHabitModule(new ShowHabitModule(this, habit)) - .build(); - - screen = component.getScreen(); - screen.setMenu(component.getMenu()); - screen.setController(component.getController()); - - component.getRootView().setController(component.getController()); + HabitsActivityComponent component = getActivityComponent(); + screen = component.getShowHabitScreen(); + screen.setMenu(component.getShowHabitMenu()); + screen.setController(component.getShowHabitController()); + component + .getShowHabitRootView() + .setController(component.getShowHabitController()); setScreen(screen); } @Override protected void onResume() { - if(screen == null) throw new IllegalStateException(); - + 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 = 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/ShowHabitModule.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java index cca8d7a0e..7dc325daf 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,47 +19,20 @@ package org.isoron.uhabits.activities.habits.show; -import android.support.annotation.*; - -import org.isoron.androidbase.*; -import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.activities.*; import org.isoron.uhabits.core.ui.screens.habits.show.*; import dagger.*; @Module -public class ShowHabitModule extends ActivityModule +public abstract class ShowHabitModule { - private Habit habit; - - public ShowHabitModule(@NonNull BaseActivity activity, @NonNull Habit habit) - { - super(activity); - this.habit = habit; - } - - @Provides - public Habit getHabit() - { - return habit; - } - - @Provides - public ShowHabitBehavior.Screen getScreen(ShowHabitScreen screen) - { - return screen; - } + @Binds + abstract ShowHabitBehavior.Screen getScreen(ShowHabitScreen screen); - @Provides - public ShowHabitMenuBehavior.Screen getMenuScreen(ShowHabitScreen screen) - { - return screen; - } + @Binds + abstract ShowHabitMenuBehavior.Screen getMenuScreen(ShowHabitScreen screen); - @Provides - public ShowHabitMenuBehavior.System getSystem(BaseSystem system) - { - return system; - } + @Binds + abstract ShowHabitMenuBehavior.System getSystem(HabitsDirFinder system); } 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 28e899118..ef440cdf3 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 @@ -25,6 +25,7 @@ import android.support.annotation.*; import android.support.v7.widget.*; import org.isoron.androidbase.activities.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.R; import org.isoron.uhabits.activities.habits.show.views.*; import org.isoron.uhabits.core.models.*; @@ -90,7 +91,7 @@ public class ShowHabitRootView extends BaseRootView if (!res.getBoolean(R.attr.useHabitColorAsPrimary)) return super.getToolbarColor(); - return ColorUtils.getColor(getContext(), habit.getColor()); + return PaletteUtils.getColor(getContext(), habit.getColor()); } @Override 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 f5b3bf622..d4dda9c16 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,7 +22,7 @@ package org.isoron.uhabits.activities.habits.show; import android.support.annotation.*; import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.*; +import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.*; import org.isoron.uhabits.core.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 506e381ff..318e597c6 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 @@ -23,7 +23,7 @@ import android.support.annotation.*; import android.view.*; import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.*; +import org.isoron.uhabits.R; 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 a2a2ae5e4..67d5d1855 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 @@ -83,7 +83,7 @@ public class BarCard extends HabitCard private void initEditMode() { - int color = ColorUtils.getAndroidTestColor(1); + int color = PaletteUtils.getAndroidTestColor(1); title.setTextColor(color); chart.setColor(color); chart.populateWithRandomData(); @@ -107,7 +107,7 @@ public class BarCard extends HabitCard @Override public void onPreExecute() { - int color = ColorUtils.getColor(getContext(), habit.getColor()); + int color = PaletteUtils.getColor(getContext(), habit.getColor()); title.setTextColor(color); chart.setColor(color); chart.setTarget(habit.getTargetValue()); 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 629aa340e..a890349fa 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 @@ -82,7 +82,7 @@ public class FrequencyCard extends HabitCard private void initEditMode() { - int color = ColorUtils.getAndroidTestColor(1); + int color = PaletteUtils.getAndroidTestColor(1); title.setTextColor(color); chart.setColor(color); chart.populateWithRandomData(); @@ -102,7 +102,7 @@ public class FrequencyCard extends HabitCard public void onPreExecute() { int paletteColor = getHabit().getColor(); - int color = ColorUtils.getColor(getContext(), paletteColor); + int color = PaletteUtils.getColor(getContext(), paletteColor); title.setTextColor(color); chart.setColor(color); } 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 4ac90b5af..a176e698d 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 @@ -96,7 +96,7 @@ public class HistoryCard extends HabitCard private void initEditMode() { - int color = ColorUtils.getAndroidTestColor(1); + int color = PaletteUtils.getAndroidTestColor(1); title.setTextColor(color); chart.setColor(color); chart.populateWithRandomData(); @@ -123,7 +123,7 @@ public class HistoryCard extends HabitCard @Override public void onPreExecute() { - int color = ColorUtils.getColor(getContext(), habit.getColor()); + int color = PaletteUtils.getColor(getContext(), habit.getColor()); title.setTextColor(color); chart.setColor(color); if(habit.isNumerical()) 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 f98d738e4..76d65f701 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 @@ -24,6 +24,7 @@ import android.support.annotation.*; import android.util.*; import android.widget.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.views.*; @@ -105,7 +106,7 @@ public class OverviewCard extends HabitCard private void initEditMode() { - color = ColorUtils.getAndroidTestColor(1); + color = PaletteUtils.getAndroidTestColor(1); cache.todayScore = 0.6f; cache.lastMonthScore = 0.42f; cache.lastYearScore = 0.75f; @@ -182,7 +183,7 @@ public class OverviewCard extends HabitCard @Override public void onPreExecute() { - color = ColorUtils.getColor(getContext(), getHabit().getColor()); + color = PaletteUtils.getColor(getContext(), getHabit().getColor()); refreshColors(); } } 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 f6e59460b..eb81a954e 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 @@ -127,8 +127,8 @@ public class ScoreCard extends HabitCard if (isInEditMode()) { spinner.setVisibility(GONE); - title.setTextColor(ColorUtils.getAndroidTestColor(1)); - chart.setColor(ColorUtils.getAndroidTestColor(1)); + title.setTextColor(PaletteUtils.getAndroidTestColor(1)); + chart.setColor(PaletteUtils.getAndroidTestColor(1)); chart.populateWithRandomData(); } } @@ -159,7 +159,7 @@ public class ScoreCard extends HabitCard public void onPreExecute() { int color = - ColorUtils.getColor(getContext(), getHabit().getColor()); + PaletteUtils.getColor(getContext(), getHabit().getColor()); title.setTextColor(color); chart.setColor(color); } 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 bf5c24ff1..e4f07e6d5 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 @@ -84,7 +84,7 @@ public class StreakCard extends HabitCard private void initEditMode() { - int color = ColorUtils.getAndroidTestColor(1); + int color = PaletteUtils.getAndroidTestColor(1); title.setTextColor(color); streakChart.setColor(color); streakChart.populateWithRandomData(); @@ -111,7 +111,7 @@ public class StreakCard extends HabitCard public void onPreExecute() { int color = - ColorUtils.getColor(getContext(), getHabit().getColor()); + PaletteUtils.getColor(getContext(), getHabit().getColor()); title.setTextColor(color); streakChart.setColor(color); } 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 07b712f73..74e6b131d 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 @@ -52,7 +52,7 @@ public class SubtitleCard extends HabitCard protected void refreshData() { Habit habit = getHabit(); - int color = ColorUtils.getColor(getContext(), habit.getColor()); + int color = PaletteUtils.getColor(getContext(), habit.getColor()); reminderLabel.setText(getResources().getString(R.string.reminder_off)); questionLabel.setVisibility(VISIBLE); @@ -79,7 +79,7 @@ public class SubtitleCard extends HabitCard @SuppressLint("SetTextI18n") private void initEditMode() { - questionLabel.setTextColor(ColorUtils.getAndroidTestColor(1)); + questionLabel.setTextColor(PaletteUtils.getAndroidTestColor(1)); questionLabel.setText("Have you meditated today?"); reminderLabel.setText("08:00"); } 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 15bfce36f..72c519833 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 @@ -22,8 +22,8 @@ package org.isoron.uhabits.activities.settings; import android.os.*; import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.*; -import org.isoron.uhabits.utils.*; +import org.isoron.androidbase.utils.*; +import org.isoron.uhabits.R; /** * Activity that allows the user to view and modify the app settings. 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 a5d4ed0f5..07f4e062c 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 @@ -21,17 +21,29 @@ package org.isoron.uhabits.activities.settings; import android.app.backup.*; import android.content.*; +import android.net.*; import android.os.*; +import android.provider.*; 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.core.preferences.*; import org.isoron.uhabits.notifications.*; -import static org.isoron.uhabits.activities.habits.list.ListHabitsScreen.*; +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 org.isoron.uhabits.activities.habits.list.ListHabitsScreen.RESULT_BUG_REPORT; +import static org.isoron.uhabits.activities.habits.list.ListHabitsScreen.RESULT_EXPORT_CSV; +import static org.isoron.uhabits.activities.habits.list.ListHabitsScreen.RESULT_EXPORT_DB; +import static org.isoron.uhabits.activities.habits.list.ListHabitsScreen.RESULT_IMPORT_DATA; +import static org.isoron.uhabits.activities.habits.list.ListHabitsScreen.RESULT_REPAIR_DB; public class SettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener @@ -100,7 +112,7 @@ public class SettingsFragment extends PreferenceFragmentCompat if (key.equals("reminderSound")) { - BaseScreen.showRingtonePicker(this, RINGTONE_REQUEST_CODE); + showRingtonePicker(); return true; } @@ -142,6 +154,20 @@ public class SettingsFragment extends PreferenceFragmentCompat }); } + private void showRingtonePicker() + { + Uri existingRingtoneUri = RingtoneManager.getRingtoneUri(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); + startActivityForResult(intent, RINGTONE_REQUEST_CODE); + } + private void updateRingtoneDescription() { String ringtoneName = RingtoneManager.getRingtoneName(getContext()); 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 80ab1632a..46eacc94d 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 @@ -26,9 +26,9 @@ import android.support.v7.widget.Toolbar; import android.widget.*; import org.isoron.androidbase.activities.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.R; 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 d16ce1d9c..dd0bd3d1b 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 @@ -55,7 +55,7 @@ public class FireSettingReceiver extends BroadcastReceiver ReceiverComponent component = DaggerFireSettingReceiver_ReceiverComponent .builder() - .habitsComponent(app.getComponent()) + .habitsApplicationComponent(app.getComponent()) .build(); allHabits = app.getComponent().getHabitList(); @@ -100,7 +100,7 @@ public class FireSettingReceiver extends BroadcastReceiver } @ReceiverScope - @Component(dependencies = HabitsComponent.class) + @Component(dependencies = HabitsApplicationComponent.class) interface ReceiverComponent { WidgetBehavior getWidgetController(); 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 3cd4b7cb0..e08b10c9f 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 @@ -29,7 +29,7 @@ import com.activeandroid.*; import org.isoron.androidbase.*; import org.isoron.androidbase.utils.*; -import org.isoron.uhabits.*; +import org.isoron.uhabits.BuildConfig; import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.utils.DatabaseUtils; 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 868137cc0..72ca25293 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 @@ -27,7 +27,7 @@ import android.support.v4.app.*; import android.support.v4.app.NotificationCompat.*; import org.isoron.androidbase.*; -import org.isoron.uhabits.*; +import org.isoron.uhabits.R; import org.isoron.uhabits.core.*; import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.preferences.*; @@ -36,8 +36,8 @@ import org.isoron.uhabits.intents.*; import javax.inject.*; -import static android.graphics.BitmapFactory.*; -import static org.isoron.uhabits.notifications.RingtoneManager.*; +import static android.graphics.BitmapFactory.decodeResource; +import static org.isoron.uhabits.notifications.RingtoneManager.getRingtoneUri; @AppScope public class AndroidNotificationTray implements NotificationTray.SystemTray 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 ea4f4ff85..60715b663 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 @@ -26,23 +26,20 @@ import android.preference.*; import android.provider.*; import android.support.annotation.*; -import org.isoron.androidbase.*; import org.isoron.uhabits.*; import org.isoron.uhabits.core.*; import javax.inject.*; -import static android.media.RingtoneManager.*; +import static android.media.RingtoneManager.EXTRA_RINGTONE_PICKED_URI; +import static android.media.RingtoneManager.getRingtone; @AppScope public class RingtoneManager { - private Context context; - @Inject - public RingtoneManager(@AppContext @NonNull Context context) + public RingtoneManager() { - this.context = context; } @Nullable @@ -106,7 +103,6 @@ public class RingtoneManager } else { - String off = context.getResources().getString(R.string.none); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); prefs.edit().putString("pref_ringtone_uri", "").apply(); diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.java b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.java index 22e6f517a..76b2a4c3b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.java @@ -24,7 +24,7 @@ import android.preference.*; import android.support.annotation.*; import org.isoron.androidbase.*; -import org.isoron.uhabits.*; +import org.isoron.uhabits.R; import org.isoron.uhabits.core.*; import org.isoron.uhabits.core.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 39e9b2fd3..7b6468e06 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; - HabitsComponent component = + HabitsApplicationComponent 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 301565881..60c67631b 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(); - HabitsComponent component = app.getComponent(); + HabitsApplicationComponent 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 e6187feaf..4831127e3 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() - .habitsComponent(app.getComponent()) + .habitsApplicationComponent(app.getComponent()) .build(); HabitList habits = app.getComponent().getHabitList(); @@ -105,7 +105,7 @@ public class ReminderReceiver extends BroadcastReceiver } @ReceiverScope - @Component(dependencies = HabitsComponent.class) + @Component(dependencies = HabitsApplicationComponent.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 7d502316a..97bd1f2b1 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 @@ -57,7 +57,7 @@ public class WidgetReceiver extends BroadcastReceiver WidgetComponent component = DaggerWidgetReceiver_WidgetComponent .builder() - .habitsComponent(app.getComponent()) + .habitsApplicationComponent(app.getComponent()) .build(); IntentParser parser = app.getComponent().getIntentParser(); @@ -94,7 +94,7 @@ public class WidgetReceiver extends BroadcastReceiver } @ReceiverScope - @Component(dependencies = HabitsComponent.class) + @Component(dependencies = HabitsApplicationComponent.class) interface WidgetComponent { WidgetBehavior getWidgetController(); 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 a4797c823..e3dbf3a8d 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,7 +23,7 @@ import android.support.annotation.*; import android.util.*; import org.isoron.androidbase.*; -import org.isoron.uhabits.*; +import org.isoron.uhabits.BuildConfig; import org.isoron.uhabits.core.*; import org.isoron.uhabits.core.commands.*; import org.isoron.uhabits.core.preferences.*; @@ -38,7 +38,17 @@ import io.socket.client.*; import io.socket.client.Socket; import io.socket.emitter.*; -import static io.socket.client.Socket.*; +import static io.socket.client.Socket.EVENT_CONNECT; +import static io.socket.client.Socket.EVENT_CONNECTING; +import static io.socket.client.Socket.EVENT_CONNECT_ERROR; +import static io.socket.client.Socket.EVENT_CONNECT_TIMEOUT; +import static io.socket.client.Socket.EVENT_DISCONNECT; +import static io.socket.client.Socket.EVENT_PING; +import static io.socket.client.Socket.EVENT_PONG; +import static io.socket.client.Socket.EVENT_RECONNECT; +import static io.socket.client.Socket.EVENT_RECONNECT_ATTEMPT; +import static io.socket.client.Socket.EVENT_RECONNECT_ERROR; +import static io.socket.client.Socket.EVENT_RECONNECT_FAILED; @AppScope public class SyncManager implements CommandRunner.Listener @@ -83,17 +93,17 @@ public class SyncManager implements CommandRunner.Listener private boolean isListening; - private BaseSystem system; + private SSLContextProvider sslProvider; @Inject - public SyncManager(@NonNull BaseSystem system, + public SyncManager(@NonNull SSLContextProvider sslProvider, @NonNull Preferences prefs, @NonNull CommandRunner commandRunner, @NonNull CommandParser commandParser) { - this.system = system; Log.i("SyncManager", this.toString()); + this.sslProvider = sslProvider; this.prefs = prefs; this.commandRunner = commandRunner; this.commandParser = commandParser; @@ -110,18 +120,6 @@ public class SyncManager implements CommandRunner.Listener connect(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) @@ -141,8 +139,8 @@ public class SyncManager implements CommandRunner.Listener public void onNetworkStatusChanged(boolean isConnected) { - if(!isListening) return; - if(isConnected) socket.connect(); + if (!isListening) return; + if (isConnected) socket.connect(); else socket.disconnect(); } @@ -159,7 +157,7 @@ public class SyncManager implements CommandRunner.Listener public void stopListening() { - if(!isListening) return; + if (!isListening) return; commandRunner.removeListener(this); socket.close(); @@ -170,7 +168,7 @@ public class SyncManager implements CommandRunner.Listener { try { - IO.setDefaultSSLContext(system.getCACertSSLContext()); + IO.setDefaultSSLContext(sslProvider.getCACertSSLContext()); socket = IO.socket(serverURL); logSocketEvent(socket, EVENT_CONNECT, "Connected"); @@ -228,6 +226,18 @@ public class SyncManager implements CommandRunner.Listener }); } + private JSONObject toJSONObject(String json) + { + try + { + return new JSONObject(json); + } + catch (JSONException e) + { + throw new RuntimeException(e); + } + } + private void updateLastSync(Long timestamp) { prefs.setLastSync(timestamp + 1); @@ -292,7 +302,7 @@ public class SyncManager implements CommandRunner.Listener public void call(Object... args) { readyToEmit = false; - for(Event e : pendingConfirmation) pendingEmit.add(e); + for (Event e : pendingConfirmation) pendingEmit.add(e); pendingConfirmation.clear(); } } 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 013027925..b74c33915 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 @@ -38,13 +38,13 @@ public class ExportDBTask implements Task @NonNull private Context context; - private BaseSystem system; + private AndroidDirFinder system; @NonNull private final Listener listener; public ExportDBTask(@Provided @AppContext @NonNull Context context, - @Provided @NonNull BaseSystem system, + @Provided @NonNull AndroidDirFinder system, @NonNull Listener listener) { this.system = system; 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 2300d2249..e07f7b708 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,10 +21,8 @@ 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.*; diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/PaletteUtils.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/PaletteUtils.java new file mode 100644 index 000000000..a3b262ef4 --- /dev/null +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/PaletteUtils.java @@ -0,0 +1,67 @@ +package org.isoron.uhabits.utils; + +import android.content.*; +import android.graphics.*; +import android.util.*; + +import org.isoron.androidbase.utils.*; + +public class PaletteUtils +{ + public static int colorToPaletteIndex(Context context, int color) + { + StyledResources res = new StyledResources(context); + int[] palette = res.getPalette(); + + for (int k = 0; k < palette.length; k++) + if (palette[k] == color) return k; + + return -1; + } + + public static int getAndroidTestColor(int index) + { + int palette[] = { + Color.parseColor("#D32F2F"), // 0 red + Color.parseColor("#E64A19"), // 1 deep orange + Color.parseColor("#F57C00"), // 2 orange + Color.parseColor("#FF8F00"), // 3 amber + Color.parseColor("#F9A825"), // 4 yellow + Color.parseColor("#AFB42B"), // 5 lime + Color.parseColor("#7CB342"), // 6 light green + Color.parseColor("#388E3C"), // 7 green + Color.parseColor("#00897B"), // 8 teal + Color.parseColor("#00ACC1"), // 9 cyan + Color.parseColor("#039BE5"), // 10 light blue + Color.parseColor("#1976D2"), // 11 blue + Color.parseColor("#303F9F"), // 12 indigo + Color.parseColor("#5E35B1"), // 13 deep purple + Color.parseColor("#8E24AA"), // 14 purple + Color.parseColor("#D81B60"), // 15 pink + Color.parseColor("#5D4037"), // 16 brown + Color.parseColor("#303030"), // 17 dark grey + Color.parseColor("#757575"), // 18 grey + Color.parseColor("#aaaaaa") // 19 light grey + }; + + return palette[index]; + } + + public static int getColor(Context context, int paletteColor) + { + if (context == null) + throw new IllegalArgumentException("Context is null"); + + StyledResources res = new StyledResources(context); + int palette[] = res.getPalette(); + if (paletteColor < 0 || paletteColor >= palette.length) + { + Log.w("ColorHelper", + String.format("Invalid color: %d. Returning default.", + paletteColor)); + paletteColor = 0; + } + + return palette[paletteColor]; + } +} diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/package-info.java b/uhabits-android/src/main/java/org/isoron/uhabits/utils/package-info.java index 51db3c7a3..614727d39 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/package-info.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/package-info.java @@ -18,6 +18,6 @@ */ /** - * Provides various utilities classes, such as {@link org.isoron.uhabits.utils.ColorUtils}. + * Provides various utilities classes, such as {@link org.isoron.androidbase.utils.ColorUtils}. */ package org.isoron.uhabits.utils; \ No newline at end of file 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 ccc743c98..6c3f5042a 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 @@ -32,7 +32,7 @@ import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.preferences.*; import static android.appwidget.AppWidgetManager.*; -import static org.isoron.uhabits.utils.InterfaceUtils.*; +import static org.isoron.androidbase.utils.InterfaceUtils.*; public abstract class BaseWidgetProvider extends AppWidgetProvider { 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 4eb6fd69a..4ca00133b 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 @@ -51,7 +51,7 @@ public class CheckmarkWidget extends BaseWidget public void refreshData(View v) { CheckmarkWidgetView view = (CheckmarkWidgetView) v; - int color = ColorUtils.getColor(getContext(), habit.getColor()); + int color = PaletteUtils.getColor(getContext(), habit.getColor()); double score = habit.getScores().getTodayValue(); float percentage = (float) score; int checkmark = habit.getCheckmarks().getTodayValue(); 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 ea4e3d889..779980ae7 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 @@ -56,7 +56,7 @@ public class FrequencyWidget extends BaseWidget widgetView.setTitle(habit.getName()); - int color = ColorUtils.getColor(getContext(), habit.getColor()); + int color = PaletteUtils.getColor(getContext(), habit.getColor()); chart.setColor(color); chart.setFrequency(habit.getRepetitions().getWeekdayFrequency()); 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 0b056b9bb..89d92610b 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(); - HabitsComponent component = app.getComponent(); + HabitsApplicationComponent component = app.getComponent(); habitList = component.getHabitList(); preferences = component.getWidgetPreferences(); 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 3035aec77..17b326adc 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 @@ -52,7 +52,7 @@ public class HistoryWidget extends BaseWidget GraphWidgetView widgetView = (GraphWidgetView) view; HistoryChart chart = (HistoryChart) widgetView.getDataView(); - int color = ColorUtils.getColor(getContext(), habit.getColor()); + int color = PaletteUtils.getColor(getContext(), habit.getColor()); int[] values = habit.getCheckmarks().getAllValues(); chart.setColor(color); 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 dfa6022c5..fb19a2dce 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 @@ -72,7 +72,7 @@ public class ScoreWidget extends BaseWidget if (size == 1) scores = scoreList.toList(); else scores = scoreList.groupBy(ScoreCard.getTruncateField(size)); - int color = ColorUtils.getColor(getContext(), habit.getColor()); + int color = PaletteUtils.getColor(getContext(), habit.getColor()); chart.setIsTransparencyEnabled(true); chart.setBucketSize(size); 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 781ee71f4..75251a09c 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 @@ -57,7 +57,7 @@ public class StreakWidget extends BaseWidget GraphWidgetView widgetView = (GraphWidgetView) view; StreakChart chart = (StreakChart) widgetView.getDataView(); - int color = ColorUtils.getColor(getContext(), habit.getColor()); + int color = PaletteUtils.getColor(getContext(), habit.getColor()); int count = chart.getMaxStreakCount(); List streaks = habit.getStreaks().getBest(count); 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 00afeb46b..ef63cd7c0 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 @@ -24,12 +24,13 @@ import android.support.annotation.*; import android.util.*; import android.widget.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.activities.common.views.*; import org.isoron.uhabits.utils.*; -import static org.isoron.uhabits.utils.InterfaceUtils.getDimension; +import static org.isoron.androidbase.utils.InterfaceUtils.getDimension; public class CheckmarkWidgetView extends HabitWidgetView { @@ -188,7 +189,7 @@ public class CheckmarkWidgetView extends HabitWidgetView { percentage = 0.75f; name = "Wake up early"; - activeColor = ColorUtils.getAndroidTestColor(6); + activeColor = PaletteUtils.getAndroidTestColor(6); checkmarkValue = Checkmark.CHECKED_EXPLICITLY; refresh(); } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/HabitWidgetView.java b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/HabitWidgetView.java index 02f7cf671..802cba210 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/HabitWidgetView.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/HabitWidgetView.java @@ -28,12 +28,12 @@ import android.util.*; import android.view.*; import android.widget.*; +import org.isoron.androidbase.utils.*; import org.isoron.uhabits.*; -import org.isoron.uhabits.utils.*; import java.util.*; -import static org.isoron.uhabits.utils.InterfaceUtils.*; +import static org.isoron.androidbase.utils.InterfaceUtils.*; public abstract class HabitWidgetView extends FrameLayout { diff --git a/uhabits-android/src/main/res/values/attrs.xml b/uhabits-android/src/main/res/values/attrs.xml index 6470a9b0d..576b65a35 100644 --- a/uhabits-android/src/main/res/values/attrs.xml +++ b/uhabits-android/src/main/res/values/attrs.xml @@ -24,7 +24,6 @@ - diff --git a/uhabits-android/src/main/res/values/colors.xml b/uhabits-android/src/main/res/values/colors.xml index 0905b9e3d..49338f051 100644 --- a/uhabits-android/src/main/res/values/colors.xml +++ b/uhabits-android/src/main/res/values/colors.xml @@ -111,303 +111,4 @@ #404040 #363636 #808080 - - - #FFEBEE - #FFCDD2 - #EF9A9A - #E57373 - #EF5350 - #F44336 - #E53935 - #D32F2F - #C62828 - #B71C1C - #FF8A80 - #FF5252 - #FF1744 - #D50000 - - #EDE7F6 - #D1C4E9 - #B39DDB - #9575CD - #7E57C2 - #673AB7 - #5E35B1 - #512DA8 - #4527A0 - #311B92 - #B388FF - #7C4DFF - #651FFF - #6200EA - - #E1F5FE - #B3E5FC - #81D4FA - #4FC3F7 - #29B6F6 - #03A9F4 - #039BE5 - #0288D1 - #0277BD - #01579B - #80D8FF - #40C4FF - #00B0FF - #0091EA - - #E8F5E9 - #C8E6C9 - #A5D6A7 - #81C784 - #66BB6A - #4CAF50 - #43A047 - #388E3C - #2E7D32 - #1B5E20 - #B9F6CA - #69F0AE - #00E676 - #00C853 - - #FFFDE7 - #FFF9C4 - #FFF59D - #FFF176 - #FFEE58 - #FFEB3B - #FDD835 - #FBC02D - #F9A825 - #F57F17 - #FFFF8D - #FFFF00 - #FFEA00 - #FFD600 - - #FBE9E7 - #FFCCBC - #FFAB91 - #FF8A65 - #FF7043 - #FF5722 - #F4511E - #E64A19 - #D84315 - #BF360C - #FF9E80 - #FF6E40 - #FF3D00 - #DD2C00 - - #ECEFF1 - #CFD8DC - #B0BEC5 - #90A4AE - #78909C - #607D8B - #546E7A - #455A64 - #37474F - #263238 - - #FCE4EC - #F8BBD0 - #F48FB1 - #F06292 - #EC407A - #E91E63 - #D81B60 - #C2185B - #AD1457 - #880E4F - #FF80AB - #FF4081 - #F50057 - #C51162 - - #E8EAF6 - #C5CAE9 - #9FA8DA - #7986CB - #5C6BC0 - #3F51B5 - #3949AB - #303F9F - #283593 - #1A237E - #8C9EFF - #536DFE - #3D5AFE - #304FFE - - #E0F7FA - #B2EBF2 - #80DEEA - #4DD0E1 - #26C6DA - #00BCD4 - #00ACC1 - #0097A7 - #00838F - #006064 - #84FFFF - #18FFFF - #00E5FF - #00B8D4 - - #F1F8E9 - #DCEDC8 - #C5E1A5 - #AED581 - #9CCC65 - #8BC34A - #7CB342 - #689F38 - #558B2F - #33691E - #CCFF90 - #B2FF59 - #76FF03 - #64DD17 - - #FFF8E1 - #FFECB3 - #FFE082 - #FFD54F - #FFCA28 - #FFC107 - #FFB300 - #FFA000 - #FF8F00 - #FF6F00 - #FFE57F - #FFD740 - #FFC400 - #FFAB00 - - #EFEBE9 - #D7CCC8 - #BCAAA4 - #A1887F - #8D6E63 - #795548 - #6D4C41 - #5D4037 - #4E342E - #3E2723 - - #F3E5F5 - #E1BEE7 - #CE93D8 - #BA68C8 - #AB47BC - #9C27B0 - #8E24AA - #7B1FA2 - #6A1B9A - #4A148C - #EA80FC - #E040FB - #D500F9 - #AA00FF - - #E3F2FD - #BBDEFB - #90CAF9 - #64B5F6 - #42A5F5 - #2196F3 - #1E88E5 - #1976D2 - #1565C0 - #0D47A1 - #82B1FF - #448AFF - #2979FF - #2962FF - - #E0F2F1 - #B2DFDB - #80CBC4 - #4DB6AC - #26A69A - #009688 - #00897B - #00796B - #00695C - #004D40 - #A7FFEB - #64FFDA - #1DE9B6 - #00BFA5 - - #F9FBE7 - #F0F4C3 - #E6EE9C - #DCE775 - #D4E157 - #CDDC39 - #C0CA33 - #AFB42B - #9E9D24 - #827717 - #F4FF81 - #EEFF41 - #C6FF00 - #AEEA00 - - #FFF3E0 - #FFE0B2 - #FFCC80 - #FFB74D - #FFA726 - #FF9800 - #FB8C00 - #F57C00 - #EF6C00 - #E65100 - #FFD180 - #FFAB40 - #FF9100 - #FF6D00 - - #FAFAFA - #F5F5F5 - #EEEEEE - #E0E0E0 - #BDBDBD - #9E9E9E - #757575 - #616161 - #525252 - #424242 - #303030 - #282828 - #212121 - #101010 - - #ffffff - #000000 - - #ef000000 - #cf000000 - #af000000 - #8f000000 - #6f000000 - #4f000000 - #2f000000 - #0f000000 - - #efffffff - #cfffffff - #afffffff - #8fffffff - #6fffffff - #4fffffff - #2fffffff - #0fffffff \ No newline at end of file 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 eba849ca8..8127343a5 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 @@ -23,6 +23,7 @@ import android.view.*; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.R; import org.isoron.uhabits.core.preferences.*; import org.isoron.uhabits.core.ui.*; import org.isoron.uhabits.core.ui.screens.habits.list.*; 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 f8fe74da5..d72382f69 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 @@ -23,7 +23,7 @@ package org.isoron.uhabits.activities.habits.list; import android.content.*; import org.isoron.androidbase.activities.*; -import org.isoron.uhabits.*; +import org.isoron.uhabits.R; import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.*; import org.isoron.uhabits.core.commands.*; diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java index 890a5c470..e3d57ba34 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java @@ -34,32 +34,43 @@ import javax.inject.*; public class ListHabitsBehavior { - private HabitList habitList; + @NonNull + private final HabitList habitList; - private System system; + @NonNull + private final DirFinder dirFinder; - private TaskRunner taskRunner; + @NonNull + private final TaskRunner taskRunner; - private Screen screen; + @NonNull + private final Screen screen; - private CommandRunner commandRunner; + @NonNull + private final CommandRunner commandRunner; - private Preferences prefs; + @NonNull + private final Preferences prefs; + + @NonNull + private final BugReporter bugReporter; @Inject public ListHabitsBehavior(@NonNull HabitList habitList, - @NonNull System system, + @NonNull DirFinder dirFinder, @NonNull TaskRunner taskRunner, @NonNull Screen screen, @NonNull CommandRunner commandRunner, - @NonNull Preferences prefs) + @NonNull Preferences prefs, + @NonNull BugReporter bugReporter) { this.habitList = habitList; - this.system = system; + this.dirFinder = dirFinder; this.taskRunner = taskRunner; this.screen = screen; this.commandRunner = commandRunner; this.prefs = prefs; + this.bugReporter = bugReporter; } public void onClickHabit(@NonNull Habit h) @@ -85,7 +96,7 @@ public class ListHabitsBehavior { List selected = new LinkedList<>(); for (Habit h : habitList) selected.add(h); - File outputDir = system.getCSVOutputDir(); + File outputDir = dirFinder.getCSVOutputDir(); taskRunner.execute( new ExportCSVTask(habitList, selected, outputDir, filename -> @@ -95,6 +106,13 @@ public class ListHabitsBehavior })); } + public void onFirstRun() + { + prefs.setFirstRun(false); + prefs.updateLastHint(-1, DateUtils.getStartOfToday()); + screen.showIntroScreen(); + } + public void onReorderHabit(@NonNull Habit from, @NonNull Habit to) { taskRunner.execute(() -> habitList.reorder(from, to)); @@ -111,11 +129,11 @@ public class ListHabitsBehavior public void onSendBugReport() { - system.dumpBugReportToFile(); + bugReporter.dumpBugReportToFile(); try { - String log = system.getBugReport(); + String log = bugReporter.getBugReport(); screen.showSendBugReportToDeveloperScreen(log); } catch (IOException e) @@ -137,19 +155,19 @@ public class ListHabitsBehavior 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 BugReporter + { + void dumpBugReportToFile(); + + String getBugReport() throws IOException; + } + public interface NumberPickerCallback { void onNumberPicked(double newValue); @@ -172,12 +190,8 @@ public class ListHabitsBehavior void showSendFileScreen(@NonNull String filename); } - public interface System + public interface DirFinder { - void dumpBugReportToFile(); - - String getBugReport() throws IOException; - File getCSVOutputDir(); } } diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.java index 653b7e843..ac3c1d1ea 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.java @@ -28,20 +28,26 @@ 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 java.nio.file.Files.createTempDirectory; +import static org.apache.commons.io.FileUtils.deleteDirectory; +import static org.apache.commons.io.FileUtils.listFiles; import static org.hamcrest.CoreMatchers.*; -import static org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior.Message.*; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior.Message.COULD_NOT_EXPORT; +import static org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior.Message.COULD_NOT_GENERATE_BUG_REPORT; +import static org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior.Message.DATABASE_REPAIRED; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.any; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.clearInvocations; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; public class ListHabitsBehaviorTest extends BaseUnitTest { @Mock - private ListHabitsBehavior.System system; + private ListHabitsBehavior.DirFinder dirFinder; @Mock private Preferences prefs; @@ -56,6 +62,9 @@ public class ListHabitsBehaviorTest extends BaseUnitTest @Captor ArgumentCaptor picker; + @Mock + private ListHabitsBehavior.BugReporter bugReporter; + @Override @Before public void setUp() @@ -67,8 +76,8 @@ public class ListHabitsBehaviorTest extends BaseUnitTest habitList.add(habit2); clearInvocations(habitList); - behavior = new ListHabitsBehavior(habitList, system, taskRunner, screen, - commandRunner, prefs); + behavior = new ListHabitsBehavior(habitList, dirFinder, taskRunner, screen, + commandRunner, prefs, bugReporter); } @Test @@ -84,7 +93,7 @@ public class ListHabitsBehaviorTest extends BaseUnitTest public void testOnExportCSV() throws Exception { File outputDir = createTempDirectory("CSV").toFile(); - when(system.getCSVOutputDir()).thenReturn(outputDir); + when(dirFinder.getCSVOutputDir()).thenReturn(outputDir); behavior.onExportCSV(); verify(screen).showSendFileScreen(any()); assertThat(listFiles(outputDir, null, false).size(), equalTo(1)); @@ -96,7 +105,7 @@ public class ListHabitsBehaviorTest extends BaseUnitTest { File outputDir = createTempDirectory("CSV").toFile(); outputDir.setWritable(false); - when(system.getCSVOutputDir()).thenReturn(outputDir); + when(dirFinder.getCSVOutputDir()).thenReturn(outputDir); behavior.onExportCSV(); verify(screen).showMessage(COULD_NOT_EXPORT); assertTrue(outputDir.delete()); @@ -126,6 +135,20 @@ public class ListHabitsBehaviorTest extends BaseUnitTest verify(screen).showMessage(DATABASE_REPAIRED); } + @Test + public void testOnSendBugReport() throws IOException + { + when(bugReporter.getBugReport()).thenReturn("hello"); + behavior.onSendBugReport(); + verify(bugReporter).dumpBugReportToFile(); + verify(screen).showSendBugReportToDeveloperScreen("hello"); + + when(bugReporter.getBugReport()).thenThrow(new IOException()); + behavior.onSendBugReport(); + verify(screen).showMessage(COULD_NOT_GENERATE_BUG_REPORT); + + } + @Test public void testOnStartup_firstLaunch() { @@ -154,17 +177,4 @@ public class ListHabitsBehaviorTest extends BaseUnitTest 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