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