diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..4ad7ed3
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,15 @@
+language: android
+jdk: oraclejdk8
+android:
+ components:
+ - tools # to get the new `repository-11.xml`
+ - tools # see https://github.com/travis-ci/travis-ci/issues/6040#issuecomment-219367943)
+ - platform-tools
+ - build-tools-25.0.2
+ - android-25
+ - extra-android-m2repository
+ - extra-google-m2repository
+before_script: cd outlay
+script:
+- ./gradlew assembleDebug
+
diff --git a/outlay/app/google-services.json b/outlay/app/google-services.json
new file mode 100644
index 0000000..e8e20a5
--- /dev/null
+++ b/outlay/app/google-services.json
@@ -0,0 +1,55 @@
+{
+ "project_info": {
+ "project_number": "493988397268",
+ "firebase_url": "https://outlay-c8db8.firebaseio.com",
+ "project_id": "outlay-c8db8",
+ "storage_bucket": "outlay-c8db8.appspot.com"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:493988397268:android:95649c21a8bc6266",
+ "android_client_info": {
+ "package_name": "app.outlay"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "493988397268-1thsbh8c2rtbbc38hd9opj2d4ggpff7s.apps.googleusercontent.com",
+ "client_type": 1,
+ "android_info": {
+ "package_name": "app.outlay",
+ "certificate_hash": "90e14b32ea082f18eccd422a24e9b40b7cb18a03"
+ }
+ },
+ {
+ "client_id": "493988397268-d8h6qppkcq2r87coobac4pl7rigsd5j3.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyDjc1HdmPnYw74rY4tQyZLzQTvXPwsdXRM"
+ }
+ ],
+ "services": {
+ "analytics_service": {
+ "status": 1
+ },
+ "appinvite_service": {
+ "status": 2,
+ "other_platform_oauth_client": [
+ {
+ "client_id": "493988397268-d8h6qppkcq2r87coobac4pl7rigsd5j3.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ },
+ "ads_service": {
+ "status": 2
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/outlay/app/src/main/AndroidManifest.xml b/outlay/app/src/main/AndroidManifest.xml
index a8ea1c7..f4da483 100644
--- a/outlay/app/src/main/AndroidManifest.xml
+++ b/outlay/app/src/main/AndroidManifest.xml
@@ -13,7 +13,7 @@
android:theme="@style/Theme.Material.Custom">
+ android:screenOrientation="portrait" />
defaultCategories() {
@Provides
@Singleton
Gson providerGson() {
- Gson gson = new GsonBuilder().create();
- return gson;
+ return new GsonBuilder().create();
}
private static Category category(String title, String icon, int color, int order) {
diff --git a/outlay/app/src/main/java/app/outlay/executor/JobExecutor.java b/outlay/app/src/main/java/app/outlay/executor/JobExecutor.java
index 1cf77b6..77e91de 100644
--- a/outlay/app/src/main/java/app/outlay/executor/JobExecutor.java
+++ b/outlay/app/src/main/java/app/outlay/executor/JobExecutor.java
@@ -1,6 +1,8 @@
package app.outlay.executor;
+import android.support.annotation.NonNull;
+
import app.outlay.core.executor.ThreadExecutor;
import java.util.concurrent.BlockingQueue;
@@ -39,7 +41,7 @@ public JobExecutor() {
}
@Override
- public void execute(Runnable runnable) {
+ public void execute(@NonNull Runnable runnable) {
if (runnable == null) {
throw new IllegalArgumentException("Runnable to execute cannot be null");
}
@@ -51,7 +53,7 @@ private static class JobThreadFactory implements ThreadFactory {
private int counter = 0;
@Override
- public Thread newThread(Runnable runnable) {
+ public Thread newThread(@NonNull Runnable runnable) {
return new Thread(runnable, THREAD_NAME + counter++);
}
}
diff --git a/outlay/app/src/main/java/app/outlay/firebase/ExpenseFirebaseSource.java b/outlay/app/src/main/java/app/outlay/firebase/ExpenseFirebaseSource.java
index 63bb8d8..cd2abf3 100644
--- a/outlay/app/src/main/java/app/outlay/firebase/ExpenseFirebaseSource.java
+++ b/outlay/app/src/main/java/app/outlay/firebase/ExpenseFirebaseSource.java
@@ -133,7 +133,7 @@ public void onCancelled(DatabaseError databaseError) {
}
return categoryMap;
}).switchMap(categoryMap ->
- listObservable.flatMap(expenses -> Observable.from(expenses))
+ listObservable.flatMap(Observable::from)
.map(expense -> {
String currentCatId = expense.getCategory().getId();
return expense.setCategory(categoryMap.get(currentCatId));
diff --git a/outlay/app/src/main/java/app/outlay/firebase/FirebaseAuthRxWrapper.java b/outlay/app/src/main/java/app/outlay/firebase/FirebaseAuthRxWrapper.java
index bab412b..9996f0a 100644
--- a/outlay/app/src/main/java/app/outlay/firebase/FirebaseAuthRxWrapper.java
+++ b/outlay/app/src/main/java/app/outlay/firebase/FirebaseAuthRxWrapper.java
@@ -41,67 +41,44 @@ public Observable getUserToken(FirebaseUser firebaseUser) {
});
}
+ private void addListener(Task task, rx.Subscriber super AuthResult> subscriber) {
+ task.addOnCompleteListener(resultTask -> {
+ if (task.isSuccessful()) {
+ AuthResult authResult = task.getResult();
+ subscriber.onNext(authResult);
+ subscriber.onCompleted();
+ } else {
+ Exception e = task.getException();
+ subscriber.onError(e);
+ }
+ });
+ }
+
public Observable signUp(String email, String password) {
return Observable.create(subscriber -> {
Task task = firebaseAuth.createUserWithEmailAndPassword(email, password);
- task.addOnCompleteListener(resultTask -> {
- if (task.isSuccessful()) {
- AuthResult authResult = task.getResult();
- subscriber.onNext(authResult);
- subscriber.onCompleted();
- } else {
- Exception e = task.getException();
- subscriber.onError(e);
- }
- });
+ addListener(task, subscriber);
});
}
public Observable signIn(String email, String password) {
return Observable.create(subscriber -> {
Task task = firebaseAuth.signInWithEmailAndPassword(email, password);
- task.addOnCompleteListener(resultTask -> {
- if (task.isSuccessful()) {
- AuthResult authResult = task.getResult();
- subscriber.onNext(authResult);
- subscriber.onCompleted();
- } else {
- Exception e = task.getException();
- subscriber.onError(e);
- }
- });
+ addListener(task, subscriber);
});
}
public Observable signInAnonymously() {
return Observable.create(subscriber -> {
Task task = firebaseAuth.signInAnonymously();
- task.addOnCompleteListener(resultTask -> {
- if (task.isSuccessful()) {
- AuthResult authResult = task.getResult();
- subscriber.onNext(authResult);
- subscriber.onCompleted();
- } else {
- Exception e = task.getException();
- subscriber.onError(e);
- }
- });
+ addListener(task, subscriber);
});
}
public Observable linkAccount(AuthCredential credentials) {
return Observable.create(subscriber -> {
Task task = firebaseAuth.getCurrentUser().linkWithCredential(credentials);
- task.addOnCompleteListener(resultTask -> {
- if (task.isSuccessful()) {
- AuthResult authResult = task.getResult();
- subscriber.onNext(authResult);
- subscriber.onCompleted();
- } else {
- Exception e = task.getException();
- subscriber.onError(e);
- }
- });
+ addListener(task, subscriber);
});
}
diff --git a/outlay/app/src/main/java/app/outlay/firebase/FirebaseAuthService.java b/outlay/app/src/main/java/app/outlay/firebase/FirebaseAuthService.java
index fadb0bf..656401f 100644
--- a/outlay/app/src/main/java/app/outlay/firebase/FirebaseAuthService.java
+++ b/outlay/app/src/main/java/app/outlay/firebase/FirebaseAuthService.java
@@ -1,6 +1,7 @@
package app.outlay.firebase;
import com.google.firebase.auth.AuthCredential;
+import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.EmailAuthProvider;
import app.outlay.domain.model.Credentials;
import app.outlay.domain.model.User;
@@ -26,30 +27,30 @@ public FirebaseAuthService(FirebaseAuthRxWrapper firebaseWrapper) {
@Override
public Observable signIn(Credentials credentials) {
return firebaseWrapper.signIn(credentials.getEmail(), credentials.getPassword())
- .map(authResult -> authResult.getUser())
- .map(firebaseUser -> UserAdapter.fromFirebaseUser(firebaseUser));
+ .map(AuthResult::getUser)
+ .map(UserAdapter::fromFirebaseUser);
}
@Override
public Observable signUp(Credentials credentials) {
return firebaseWrapper.signUp(credentials.getEmail(), credentials.getPassword())
- .map(authResult -> authResult.getUser())
- .map(firebaseUser -> UserAdapter.fromFirebaseUser(firebaseUser));
+ .map(AuthResult::getUser)
+ .map(UserAdapter::fromFirebaseUser);
}
@Override
public Observable linkCredentials(Credentials credentials) {
AuthCredential emailCredentials = EmailAuthProvider.getCredential(credentials.getEmail(), credentials.getPassword());
return firebaseWrapper.linkAccount(emailCredentials)
- .map(authResult -> authResult.getUser())
- .map(firebaseUser -> UserAdapter.fromFirebaseUser(firebaseUser));
+ .map(AuthResult::getUser)
+ .map(UserAdapter::fromFirebaseUser);
}
@Override
public Observable signInAnonymously() {
return firebaseWrapper.signInAnonymously()
- .map(authResult -> authResult.getUser())
- .map(firebaseUser -> UserAdapter.fromFirebaseUser(firebaseUser));
+ .map(AuthResult::getUser)
+ .map(UserAdapter::fromFirebaseUser);
}
@Override
diff --git a/outlay/app/src/main/java/app/outlay/mvp/presenter/AnalysisPresenter.java b/outlay/app/src/main/java/app/outlay/mvp/presenter/AnalysisPresenter.java
index 551e4cf..06d41aa 100644
--- a/outlay/app/src/main/java/app/outlay/mvp/presenter/AnalysisPresenter.java
+++ b/outlay/app/src/main/java/app/outlay/mvp/presenter/AnalysisPresenter.java
@@ -35,7 +35,9 @@ public void getCategories() {
@Override
public void onNext(List categories) {
super.onNext(categories);
- getView().setCategories(categories);
+ if (getView()!=null){
+ getView().setCategories(categories);
+ }
}
});
}
@@ -47,7 +49,7 @@ public void getExpenses(Date startDate, Date endDate, Category category) {
@Override
public void onNext(Report report) {
super.onNext(report);
- if (isViewAttached()) {
+ if (isViewAttached() && getView()!=null) {
getView().showAnalysis(report);
}
}
diff --git a/outlay/app/src/main/java/app/outlay/mvp/presenter/CategoriesPresenter.java b/outlay/app/src/main/java/app/outlay/mvp/presenter/CategoriesPresenter.java
index cec746f..d84ab10 100644
--- a/outlay/app/src/main/java/app/outlay/mvp/presenter/CategoriesPresenter.java
+++ b/outlay/app/src/main/java/app/outlay/mvp/presenter/CategoriesPresenter.java
@@ -31,7 +31,9 @@ public void getCategories() {
getCategoriesUseCase.execute(new DefaultSubscriber>() {
@Override
public void onNext(List categories) {
- getView().showCategories(categories);
+ if (getView()!=null){
+ getView().showCategories(categories);
+ }
}
});
}
diff --git a/outlay/app/src/main/java/app/outlay/mvp/presenter/CategoryDetailsPresenter.java b/outlay/app/src/main/java/app/outlay/mvp/presenter/CategoryDetailsPresenter.java
index cabacd4..948db98 100644
--- a/outlay/app/src/main/java/app/outlay/mvp/presenter/CategoryDetailsPresenter.java
+++ b/outlay/app/src/main/java/app/outlay/mvp/presenter/CategoryDetailsPresenter.java
@@ -33,7 +33,9 @@ public void getCategory(String id) {
getCategoryUseCase.execute(id, new DefaultSubscriber() {
@Override
public void onNext(Category category) {
- getView().showCategory(category);
+ if (getView()!=null){
+ getView().showCategory(category);
+ }
}
});
}
@@ -42,7 +44,9 @@ public void updateCategory(Category category) {
updateCategoryUseCase.execute(category, new DefaultSubscriber() {
@Override
public void onCompleted() {
- getView().finish();
+ if (getView()!=null){
+ getView().finish();
+ }
}
});
@@ -52,7 +56,9 @@ public void deleteCategory(Category category) {
deleteCategoryUseCase.execute(category, new DefaultSubscriber() {
@Override
public void onCompleted() {
- getView().finish();
+ if (getView()!=null){
+ getView().finish();
+ }
}
});
}
diff --git a/outlay/app/src/main/java/app/outlay/mvp/presenter/EnterExpensePresenter.java b/outlay/app/src/main/java/app/outlay/mvp/presenter/EnterExpensePresenter.java
index 65337cb..3801cb5 100644
--- a/outlay/app/src/main/java/app/outlay/mvp/presenter/EnterExpensePresenter.java
+++ b/outlay/app/src/main/java/app/outlay/mvp/presenter/EnterExpensePresenter.java
@@ -42,7 +42,9 @@ public void getCategories() {
getCategoriesUseCase.execute(new DefaultSubscriber>() {
@Override
public void onNext(List categories) {
- getView().showCategories(categories);
+ if (getView()!=null){
+ getView().showCategories(categories);
+ }
}
});
}
@@ -52,7 +54,9 @@ public void createExpense(Expense expense) {
createExpenseUseCase.execute(expense, new DefaultSubscriber() {
@Override
public void onNext(Expense expense) {
- getView().alertExpenseSuccess(expense);
+ if (getView()!=null){
+ getView().alertExpenseSuccess(expense);
+ }
}
});
diff --git a/outlay/app/src/main/java/app/outlay/mvp/presenter/ExpenseDetailsPresenter.java b/outlay/app/src/main/java/app/outlay/mvp/presenter/ExpenseDetailsPresenter.java
index 8b5929b..d4a534a 100644
--- a/outlay/app/src/main/java/app/outlay/mvp/presenter/ExpenseDetailsPresenter.java
+++ b/outlay/app/src/main/java/app/outlay/mvp/presenter/ExpenseDetailsPresenter.java
@@ -41,7 +41,9 @@ public void findExpense(String expenseId, Date date) {
getExpenseUseCase.execute(new GetExpenseUseCase.Input(expenseId, date), new DefaultSubscriber() {
@Override
public void onNext(Expense expense) {
- getView().showExpense(expense);
+ if (getView()!=null){
+ getView().showExpense(expense);
+ }
}
});
@@ -52,7 +54,9 @@ public void getCategories() {
@Override
public void onNext(List categories) {
super.onNext(categories);
- getView().showCategories(categories);
+ if (getView()!=null){
+ getView().showCategories(categories);
+ }
}
});
}
diff --git a/outlay/app/src/main/java/app/outlay/mvp/presenter/ExpensesListPresenter.java b/outlay/app/src/main/java/app/outlay/mvp/presenter/ExpensesListPresenter.java
index 1369072..0885ce4 100644
--- a/outlay/app/src/main/java/app/outlay/mvp/presenter/ExpensesListPresenter.java
+++ b/outlay/app/src/main/java/app/outlay/mvp/presenter/ExpensesListPresenter.java
@@ -28,7 +28,9 @@ public void findExpenses(Date dateFrom, Date dateTo, String categoryId) {
loadReportUseCase.execute(input, new DefaultSubscriber() {
@Override
public void onNext(Report report) {
- getView().showReport(report);
+ if (getView()!=null){
+ getView().showReport(report);
+ }
}
});
}
diff --git a/outlay/app/src/main/java/app/outlay/mvp/presenter/LoginViewPresenter.java b/outlay/app/src/main/java/app/outlay/mvp/presenter/LoginViewPresenter.java
index a25206c..91e45d8 100644
--- a/outlay/app/src/main/java/app/outlay/mvp/presenter/LoginViewPresenter.java
+++ b/outlay/app/src/main/java/app/outlay/mvp/presenter/LoginViewPresenter.java
@@ -48,7 +48,9 @@ public void signInGuest() {
}
private void signIn(Credentials credentials) {
- getView().setProgress(true);
+ if (getView()!=null){
+ getView().setProgress(true);
+ }
userSignInUseCase.execute(credentials, new DefaultSubscriber() {
@Override
@@ -66,7 +68,9 @@ public void onError(Throwable e) {
}
public void signUp(String email, String password) {
- getView().setProgress(true);
+ if (getView()!=null){
+ getView().setProgress(true);
+ }
Credentials credentials = new Credentials(email, password);
@@ -89,7 +93,9 @@ public void linkAccount(String email, String password) {
linkAccountUseCase.execute(new Credentials(email, password), new DefaultSubscriber() {
@Override
public void onNext(User user) {
- getView().onSuccess(user);
+ if (getView()!=null){
+ getView().onSuccess(user);
+ }
}
});
}
@@ -102,12 +108,16 @@ public void trySignIn() {
user.setEmail(firebaseUser.getEmail());
user.setAnonymous(firebaseUser.isAnonymous());
user.setUserName(firebaseUser.getDisplayName());
- getView().onSuccess(user);
+ if (getView()!=null){
+ getView().onSuccess(user);
+ }
}
}
private void onAuthSuccess(User user) {
- getView().onSuccess(user);
+ if (getView()!=null){
+ getView().onSuccess(user);
+ }
}
public void resetPassword(String email) {
@@ -116,13 +126,17 @@ public void resetPassword(String email) {
resetPasswordUseCase.execute(user, new DefaultSubscriber() {
@Override
public void onCompleted() {
- getView().info("Email with was sent");
+ if (getView()!=null){
+ getView().info("Email with was sent");
+ }
}
@Override
public void onError(Throwable e) {
super.onError(e);
- getView().error(new Exception("Problem while resetting your password"));
+ if (getView()!=null){
+ getView().error(new Exception("Problem while resetting your password"));
+ }
}
});
}
diff --git a/outlay/app/src/main/java/app/outlay/mvp/presenter/ReportPresenter.java b/outlay/app/src/main/java/app/outlay/mvp/presenter/ReportPresenter.java
index 0e34332..cf85c80 100644
--- a/outlay/app/src/main/java/app/outlay/mvp/presenter/ReportPresenter.java
+++ b/outlay/app/src/main/java/app/outlay/mvp/presenter/ReportPresenter.java
@@ -49,7 +49,9 @@ public void getExpenses(Date date, int period) {
@Override
public void onNext(Report report) {
super.onNext(report);
- getView().showReport(report);
+ if (getView()!=null){
+ getView().showReport(report);
+ }
}
});
}
diff --git a/outlay/app/src/main/java/app/outlay/view/activity/SingleFragmentActivity.java b/outlay/app/src/main/java/app/outlay/view/activity/SingleFragmentActivity.java
index 708275c..f10ec29 100644
--- a/outlay/app/src/main/java/app/outlay/view/activity/SingleFragmentActivity.java
+++ b/outlay/app/src/main/java/app/outlay/view/activity/SingleFragmentActivity.java
@@ -10,6 +10,8 @@
public class SingleFragmentActivity extends ParentActivity {
+ private static final String FRAGMENT_PARAM = "fragment";
+
public static void start(Context context, Class> fragmentClass, Bundle bundle) {
Intent intent = new Intent(context, SingleFragmentActivity.class);
if (bundle != null) {
@@ -23,8 +25,6 @@ public static void start(Context context, Class> fragmentClass) {
start(context, fragmentClass, null);
}
- public final static String FRAGMENT_PARAM = "fragment";
-
@Override
protected void onCreate(Bundle bundle) {
diff --git a/outlay/app/src/main/java/app/outlay/view/adapter/CategoriesDraggableGridAdapter.java b/outlay/app/src/main/java/app/outlay/view/adapter/CategoriesDraggableGridAdapter.java
index 0934a9b..55c2339 100644
--- a/outlay/app/src/main/java/app/outlay/view/adapter/CategoriesDraggableGridAdapter.java
+++ b/outlay/app/src/main/java/app/outlay/view/adapter/CategoriesDraggableGridAdapter.java
@@ -70,8 +70,7 @@ public boolean onItemMove(int fromPosition, int toPosition) {
public CategoryDraggableViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
final View v = inflater.inflate(app.outlay.R.layout.item_category, parent, false);
- final CategoryDraggableViewHolder viewHolder = new CategoryDraggableViewHolder(v);
- return viewHolder;
+ return new CategoryDraggableViewHolder(v);
}
public List getItems() {
diff --git a/outlay/app/src/main/java/app/outlay/view/adapter/CategoriesGridAdapter.java b/outlay/app/src/main/java/app/outlay/view/adapter/CategoriesGridAdapter.java
index 97cad6b..cbe3e95 100644
--- a/outlay/app/src/main/java/app/outlay/view/adapter/CategoriesGridAdapter.java
+++ b/outlay/app/src/main/java/app/outlay/view/adapter/CategoriesGridAdapter.java
@@ -73,12 +73,10 @@ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType
GridLayoutManager.LayoutParams params = (GridLayoutManager.LayoutParams) numpadView.getLayoutParams();
params.height = parent.getMeasuredHeight() - (context.getResources().getDimensionPixelSize(app.outlay.R.dimen.category_item_height) * 2);
- final NumpadViewHolder viewHolder = new NumpadViewHolder(numpadView);
- return viewHolder;
+ return new NumpadViewHolder(numpadView);
default:
final View catView = inflater.inflate(app.outlay.R.layout.item_category, parent, false);
- final CategoryViewHolder categoryViewHolder = new CategoryViewHolder(catView);
- return categoryViewHolder;
+ return new CategoryViewHolder(catView);
}
}
diff --git a/outlay/app/src/main/java/app/outlay/view/adapter/GridExpensesAdapter.java b/outlay/app/src/main/java/app/outlay/view/adapter/GridExpensesAdapter.java
index 74a23f4..cee5b3b 100644
--- a/outlay/app/src/main/java/app/outlay/view/adapter/GridExpensesAdapter.java
+++ b/outlay/app/src/main/java/app/outlay/view/adapter/GridExpensesAdapter.java
@@ -25,8 +25,7 @@ public class GridExpensesAdapter extends ExpenseAdapter= android.os.Build.VERSION_CODES.N) {
+ aboutText.setText(Html.fromHtml(getString(R.string.text_about), Html.FROM_HTML_MODE_LEGACY));
+ } else {
+ aboutText.setText(Html.fromHtml(getString(app.outlay.R.string.text_about)));
+ }
+
aboutText.setMovementMethod(LinkMovementMethod.getInstance());
}
}
diff --git a/outlay/app/src/main/java/app/outlay/view/fragment/AnalysisFragment.java b/outlay/app/src/main/java/app/outlay/view/fragment/AnalysisFragment.java
index e0faeef..ee18306 100644
--- a/outlay/app/src/main/java/app/outlay/view/fragment/AnalysisFragment.java
+++ b/outlay/app/src/main/java/app/outlay/view/fragment/AnalysisFragment.java
@@ -2,6 +2,7 @@
import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.Toolbar;
@@ -53,7 +54,6 @@
*/
public class AnalysisFragment extends BaseMvpFragment implements AnalysisView {
- private static final int REF_TIMESTAMP = 1451660400;
@Bind(app.outlay.R.id.categoryTitle)
MaterialAutoCompleteTextView categoryTitle;
@@ -83,6 +83,7 @@ public class AnalysisFragment extends BaseMvpFragment
* This is a good place to clear all changes on the View that was done in
- * {@link #onSelectedChanged(RecyclerView.ViewHolder, int)},
- * {@link #onChildDraw(Canvas, RecyclerView, RecyclerView.ViewHolder, float, float, int,
+ * {@link SimpleItemTouchHelperCallback#onSelectedChanged(RecyclerView.ViewHolder, int)},
+ * {@link SimpleItemTouchHelperCallback#onChildDraw(Canvas, RecyclerView, RecyclerView.ViewHolder, float, float, int,
* boolean)} or
- * {@link #onChildDrawOver(Canvas, RecyclerView, RecyclerView.ViewHolder, float, float, int, boolean)}.
+ * {@link SimpleItemTouchHelperCallback#onChildDrawOver(Canvas, RecyclerView, RecyclerView.ViewHolder, float, float, int, boolean)}.
*
* @param recyclerView The RecyclerView which is controlled by the ItemTouchHelper.
* @param viewHolder The View that was interacted by the user.
diff --git a/outlay/app/src/main/java/app/outlay/view/helper/itemtouch/SimpleItemTouchHelperCallback.java b/outlay/app/src/main/java/app/outlay/view/helper/itemtouch/SimpleItemTouchHelperCallback.java
index caa9844..f36b3ba 100755
--- a/outlay/app/src/main/java/app/outlay/view/helper/itemtouch/SimpleItemTouchHelperCallback.java
+++ b/outlay/app/src/main/java/app/outlay/view/helper/itemtouch/SimpleItemTouchHelperCallback.java
@@ -17,7 +17,7 @@
*/
public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback {
- public static final float ALPHA_FULL = 1.0f;
+ private static final float ALPHA_FULL = 1.0f;
private final ItemTouchHelperAdapter mAdapter;
diff --git a/outlay/app/src/main/res/layout/activity_login.xml b/outlay/app/src/main/res/layout/activity_login.xml
index 431182a..7b45435 100644
--- a/outlay/app/src/main/res/layout/activity_login.xml
+++ b/outlay/app/src/main/res/layout/activity_login.xml
@@ -28,7 +28,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
- android:text="Loading" />
+ android:text="@string/label_loading" />
diff --git a/outlay/app/src/main/res/layout/fragment_analysis.xml b/outlay/app/src/main/res/layout/fragment_analysis.xml
index e0f1809..f978466 100644
--- a/outlay/app/src/main/res/layout/fragment_analysis.xml
+++ b/outlay/app/src/main/res/layout/fragment_analysis.xml
@@ -49,16 +49,15 @@
android:id="@+id/startDateInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_below="@+id/categoryTitle"
android:layout_weight="1">
@@ -67,16 +66,15 @@
android:id="@+id/endDateInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_below="@+id/categoryTitle"
android:layout_weight="1">
diff --git a/outlay/app/src/main/res/layout/fragment_expense_details.xml b/outlay/app/src/main/res/layout/fragment_expense_details.xml
index 803fa9b..57ebf7f 100644
--- a/outlay/app/src/main/res/layout/fragment_expense_details.xml
+++ b/outlay/app/src/main/res/layout/fragment_expense_details.xml
@@ -68,7 +68,7 @@
android:id="@+id/date"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:editable="false"
+ android:inputType="none"
android:hint="@string/label_date"
android:textColor="@color/text_primary" />
diff --git a/outlay/app/src/main/res/layout/fragment_main.xml b/outlay/app/src/main/res/layout/fragment_main.xml
index 1496d8c..b67cbcb 100644
--- a/outlay/app/src/main/res/layout/fragment_main.xml
+++ b/outlay/app/src/main/res/layout/fragment_main.xml
@@ -40,7 +40,7 @@
android:focusableInTouchMode="false"
android:fontFamily="sans-serif-light"
android:gravity="center"
- android:hint="0.0"
+ android:hint="@string/hint_amount"
android:lines="1"
android:textColor="@color/text_primary"
android:textColorHint="@color/text_disabled"
@@ -106,7 +106,7 @@
android:layout_marginBottom="@dimen/spacing_very_big"
android:paddingLeft="@dimen/spacing_default"
android:paddingRight="@dimen/spacing_default"
- android:text="Go to categories"
+ android:text="@string/label_go_to_categories"
android:theme="@style/MyOverlayTheme"
android:visibility="gone" />
diff --git a/outlay/app/src/main/res/layout/recycler_list_expense.xml b/outlay/app/src/main/res/layout/recycler_list_expense.xml
index e74b9a7..e9b3168 100644
--- a/outlay/app/src/main/res/layout/recycler_list_expense.xml
+++ b/outlay/app/src/main/res/layout/recycler_list_expense.xml
@@ -1,6 +1,5 @@
+ android:hint="@string/hint_email">
+ android:maxLines="1" />
@@ -59,7 +59,7 @@
android:layout_height="wrap_content"
android:layout_below="@+id/signInInputEmail"
android:layout_marginTop="@dimen/spacing_default"
- android:hint="Password">
+ android:hint="@string/hint_password">
+ android:maxLines="1" />
@@ -82,7 +82,7 @@
android:fontFamily="sans-serif-light"
android:gravity="center_vertical"
android:padding="@dimen/spacing_small"
- android:text="Forget Password?"
+ android:text="@string/label_forget_password"
android:textColor="@color/text_primary"
android:visibility="invisible" />
@@ -94,7 +94,7 @@
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginTop="@dimen/spacing_default"
- android:text="Login"
+ android:text="@string/label_login"
android:theme="@style/MyOverlayTheme" />
+ android:text="@string/label_guest" />
@@ -124,8 +124,8 @@
android:layout_alignParentTop="true"
android:layout_marginBottom="@dimen/spacing_default"
android:layout_marginTop="@dimen/spacing_very_small"
- android:text="SIGN UP"
- android:textSize="18dp"
+ android:text="@string/label_sign_up"
+ android:textSize="18sp"
android:textStyle="bold" />
+ android:hint="@string/hint_email">
+ android:maxLines="1" />
@@ -151,7 +151,7 @@
android:layout_height="wrap_content"
android:layout_below="@+id/signUpInputEmail"
android:layout_marginTop="@dimen/spacing_default"
- android:hint="Password">
+ android:hint="@string/hint_password">
+ android:maxLines="1"/>
@@ -169,7 +169,7 @@
android:layout_height="wrap_content"
android:layout_below="@+id/signUpInputPassword"
android:layout_marginTop="@dimen/spacing_default"
- android:hint="Repeat Password">
+ android:hint="@string/hint_repeat_password">
+ android:maxLines="1" />
@@ -189,7 +189,7 @@
android:layout_alignParentRight="true"
android:layout_below="@+id/signUpInputRepeatPassword"
android:layout_marginTop="@dimen/spacing_default"
- android:text="Sign Up"
+ android:text="@string/label_sign_up_lowercase"
android:theme="@style/MyOverlayTheme" />
diff --git a/outlay/app/src/main/res/values/strings.xml b/outlay/app/src/main/res/values/strings.xml
index 4e7fc97..54bf326 100644
--- a/outlay/app/src/main/res/values/strings.xml
+++ b/outlay/app/src/main/res/values/strings.xml
@@ -70,5 +70,19 @@
Games
Tickets
Create Your first category
+ Loading
+ Start Date
+ End Date
+ 0.0
+ Go to categories
+ SIGN IN
+ Email
+ Password
+ Forget Password?
+ Login
+ Guest
+ SIGN UP
+ Repeat Password
+ Sign Up
diff --git a/outlay/build.gradle b/outlay/build.gradle
index 3c5fbc6..78e8ab2 100644
--- a/outlay/build.gradle
+++ b/outlay/build.gradle
@@ -1,37 +1,12 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
-ext {
- configuration = [
- package : "app.outlay",
- buildToolsVersion : "25.0.2",
- compileVersion : 25,
- minSdk : 21,
- targetSdk : 25,
- version_code : 5,
- version_name : "1.1.3",
- ]
-
- libraries = [
- supportVersion : "25.1.1",
- dagger : "2.9",
- rxjava : "1.1.0",
- rxandroid : "1.1.0",
- butterknife : "7.0.1",
- javax_annotation : "10.0-b28",
- circleimageview : "2.0.0",
- picasso : "2.5.2",
- greenDao : "2.0.0",
- firebase : "10.0.1",
- ]
-}
-
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.2.3'
+ classpath 'com.android.tools.build:gradle:2.3.1'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
classpath 'me.tatarka:gradle-retrolambda:3.4.0'
classpath 'com.google.gms:google-services:3.0.0'
@@ -40,6 +15,9 @@ buildscript {
}
}
+plugins {
+ id "org.sonarqube" version "2.3"
+}
allprojects {
repositories {
jcenter()
@@ -54,3 +32,27 @@ allprojects {
task clean(type: Delete) {
delete rootProject.buildDir
}
+ext {
+ configuration = [
+ package : "app.outlay",
+ buildToolsVersion: "25.0.2",
+ compileVersion : 25,
+ minSdk : 21,
+ targetSdk : 25,
+ version_code : 5,
+ version_name : "1.1.3",
+ ]
+
+ libraries = [
+ supportVersion : "25.3.1",
+ dagger : "2.9",
+ rxjava : "1.1.0",
+ rxandroid : "1.1.0",
+ butterknife : "7.0.1",
+ javax_annotation: "10.0-b28",
+ circleimageview : "2.0.0",
+ picasso : "2.5.2",
+ greenDao : "2.0.0",
+ firebase : "10.0.1",
+ ]
+}
\ No newline at end of file
diff --git a/outlay/domain/build.gradle b/outlay/domain/build.gradle
index 8b807cd..05fe97c 100644
--- a/outlay/domain/build.gradle
+++ b/outlay/domain/build.gradle
@@ -1,20 +1,16 @@
apply plugin: 'java'
apply plugin: 'me.tatarka.retrolambda'
-sourceCompatibility = 1.8
-targetCompatibility = 1.8
-
configurations {
provided
}
-def cfg = rootProject.ext.configuration
def libs = rootProject.ext.libraries
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile "io.reactivex:rxjava:${libs.rxjava}"
- compile "com.google.code.gson:gson:2.6.2"
+ compile "com.google.code.gson:gson:2.7"
compile "com.google.dagger:dagger:${libs.dagger}"
compile 'joda-time:joda-time:2.9.2'
}
\ No newline at end of file
diff --git a/outlay/domain/src/main/java/app/outlay/data/repository/CategoryRepositoryImpl.java b/outlay/domain/src/main/java/app/outlay/data/repository/CategoryRepositoryImpl.java
index 903d32b..1199c7e 100644
--- a/outlay/domain/src/main/java/app/outlay/data/repository/CategoryRepositoryImpl.java
+++ b/outlay/domain/src/main/java/app/outlay/data/repository/CategoryRepositoryImpl.java
@@ -40,7 +40,7 @@ public Observable> getAll() {
if (categoryMap != null) {
return Observable.just(new ArrayList<>(categoryMap.values()));
}
- return getDataSource().getAll().doOnNext(categories -> cacheCategories(categories));
+ return getDataSource().getAll().doOnNext(this::cacheCategories);
}
@Override
@@ -55,7 +55,7 @@ public Observable getById(String id) {
@Override
public Observable> updateOrder(List categories) {
clearCache();
- return getDataSource().updateOrder(categories).doOnNext(updated -> cacheCategories(updated));
+ return getDataSource().updateOrder(categories).doOnNext(this::cacheCategories);
}
@Override
@@ -69,7 +69,7 @@ public Observable save(Category category) {
}
}
return getDataSource().save(category);
- }).doOnNext(stored -> cacheCategory(stored));
+ }).doOnNext(this::cacheCategory);
}
@Override
diff --git a/outlay/gradle/wrapper/gradle-wrapper.properties b/outlay/gradle/wrapper/gradle-wrapper.properties
index 54cbf5c..47369ab 100644
--- a/outlay/gradle/wrapper/gradle-wrapper.properties
+++ b/outlay/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Mon Oct 24 13:17:43 CEST 2016
+#Wed Apr 19 19:44:52 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
diff --git a/outlay/gradlew b/outlay/gradlew
index 9d82f78..a22e469 100755
--- a/outlay/gradlew
+++ b/outlay/gradlew
@@ -42,6 +42,11 @@ case "`uname`" in
;;
esac
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
@@ -56,9 +61,9 @@ while [ -h "$PRG" ] ; do
fi
done
SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
+cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
+cd "$SAVED" >&-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@@ -72,14 +77,12 @@ if [ -n "$JAVA_HOME" ] ; then
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
@@ -109,7 +112,6 @@ fi
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`