diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml
index 3ad9a4c23..d009c7a2b 100644
--- a/Habitica/AndroidManifest.xml
+++ b/Habitica/AndroidManifest.xml
@@ -48,12 +48,13 @@
diff --git a/Habitica/res/layout/activity_intro.xml b/Habitica/res/layout/activity_intro.xml
index 2540ae87b..f31553375 100644
--- a/Habitica/res/layout/activity_intro.xml
+++ b/Habitica/res/layout/activity_intro.xml
@@ -1,45 +1,50 @@
-
+
-
+
+
-
+
-
-
\ No newline at end of file
+
+
+
diff --git a/Habitica/res/layout/activity_login.xml b/Habitica/res/layout/activity_login.xml
index 7038117c4..1266b9bbd 100644
--- a/Habitica/res/layout/activity_login.xml
+++ b/Habitica/res/layout/activity_login.xml
@@ -1,61 +1,63 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ xmlns:tools="http://schemas.android.com/tools">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/background_container"
+ android:scrollIndicators="none"
+ android:scrollbars="none"
+ >
+ android:id="@+id/background_view"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@drawable/login_gradient"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ >
+ android:id="@+id/city_view"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ app:srcCompat="@drawable/login_background"
+ android:layout_centerHorizontal="true"
+ android:scaleType="centerCrop" />
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_centerHorizontal="true"
+ android:visibility="invisible"
+ android:layout_below="@id/city_view" />
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ app:srcCompat="@drawable/cloud_1"
+ android:id="@+id/left_cloud_view"
+ android:layout_toLeftOf="@id/cloud_anchor"
+ android:layout_marginRight="150dp"
+ android:layout_below="@id/cloud_anchor"
+ android:layout_alignParentLeft="false"
+ android:scaleType="centerCrop"
+ android:layout_marginTop="150dp"
+ />
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ app:srcCompat="@drawable/cloud_2"
+ android:id="@+id/right_cloud_view"
+ android:layout_toRightOf="@id/cloud_anchor"
+ android:layout_marginLeft="170dp"
+ android:layout_below="@id/cloud_anchor"
+ android:layout_alignParentLeft="false"
+ android:scaleType="centerCrop"
+ android:layout_marginTop="240dp"
+ />
@@ -63,7 +65,11 @@
-
+
-
+ android:layout_margin="24dp"
+ android:contentDescription="@string/brand_name" />
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/Habitica/res/layout/fragment_intro.xml b/Habitica/res/layout/fragment_intro.xml
index 99c00feb0..c070da590 100644
--- a/Habitica/res/layout/fragment_intro.xml
+++ b/Habitica/res/layout/fragment_intro.xml
@@ -1,61 +1,64 @@
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center_vertical"
+ android:background="@color/brand_300"
+ android:id="@+id/container_view"
+ android:fitsSystemWindows="true">
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/subtitleTextView"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ style="@style/Body2"
+ android:textSize="17sp"
+ android:textColor="@color/white"
+ tools:text="@string/intro_2_subtitle"
+ android:layout_marginBottom="4dp" />
+ android:id="@+id/titleImageView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:contentDescription="@string/brand_name" />
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/titleTextView"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ style="@style/Title1"
+ android:textSize="30sp"
+ android:textColor="@color/white"
+ tools:text="@string/intro_2_title"
+ android:layout_marginBottom="28dp" />
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/imageView"
+ android:layout_gravity="center_horizontal"
+ android:src="@drawable/intro_2"
+ app:srcCompat="@drawable/intro_2" />
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/descriptionTextView"
+ android:layout_gravity="center_horizontal"
+ style="@style/Body2"
+ android:textColor="@android:color/white"
+ android:layout_margin="28dp"
+ android:gravity="center_horizontal"
+ android:lineSpacingExtra="4dp"
+ android:maxWidth="350dp"
+ tools:text="@string/intro_2_description"/>
\ No newline at end of file
diff --git a/Habitica/res/values-v21/styles.xml b/Habitica/res/values-v21/styles.xml
index 36b71cf42..348e9ce31 100644
--- a/Habitica/res/values-v21/styles.xml
+++ b/Habitica/res/values-v21/styles.xml
@@ -10,4 +10,14 @@
- 4dp
+
+
\ No newline at end of file
diff --git a/Habitica/res/values/colors.xml b/Habitica/res/values/colors.xml
index 31a220486..289fabfe0 100644
--- a/Habitica/res/values/colors.xml
+++ b/Habitica/res/values/colors.xml
@@ -116,6 +116,7 @@
#bfffffff
#7fffffff
#26ffffff
+ #33000000
#F6F4F8
#ddc994
diff --git a/Habitica/res/values/strings.constants.xml b/Habitica/res/values/strings.constants.xml
index 1b8b6428e..47c2a5904 100644
--- a/Habitica/res/values/strings.constants.xml
+++ b/Habitica/res/values/strings.constants.xml
@@ -19,4 +19,5 @@
habitica
habitrpg-qr-code.jpg
2,000,000
+ Habitica
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 4c0630510..baba6a15b 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -556,4 +556,5 @@ To start, which parts of your life do you want to improve?
Gray
Dated
Complated
+ Other
diff --git a/Habitica/res/values/styles.xml b/Habitica/res/values/styles.xml
index f7ff5197f..d5e50506b 100644
--- a/Habitica/res/values/styles.xml
+++ b/Habitica/res/values/styles.xml
@@ -41,13 +41,23 @@
- @style/AlertDialogTheme
-
-
+
+
+
+
+
+
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.java
index c1fb4a17a..44855bc37 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/IntroActivity.java
@@ -1,5 +1,6 @@
package com.habitrpg.android.habitica.ui.activities;
+import com.habitrpg.android.habitica.HabiticaBaseApplication;
import com.magicmicky.habitrpgwrapper.lib.api.ApiClient;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
@@ -9,6 +10,7 @@ import com.viewpagerindicator.IconPageIndicator;
import com.viewpagerindicator.IconPagerAdapter;
import android.content.Intent;
+import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
@@ -17,6 +19,8 @@ import android.support.v4.content.ContextCompat;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v4.view.ViewPager;
import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
import android.widget.Button;
import javax.inject.Inject;
@@ -45,7 +49,7 @@ public class IntroActivity extends BaseActivity implements View.OnClickListener,
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- getHabiticaApplication().getComponent().inject(this);
+ HabiticaBaseApplication.getComponent().inject(this);
setupIntro();
indicator.setViewPager(pager);
@@ -55,6 +59,13 @@ public class IntroActivity extends BaseActivity implements View.OnClickListener,
apiClient.getContent()
.subscribe(contentResult -> {}, throwable -> {});
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ Window window = getWindow();
+ window.setStatusBarColor(ContextCompat.getColor(this, R.color.black_20_alpha));
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ }
+
}
@Override
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java
index 9b8400c79..81440b24b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/LoginActivity.java
@@ -1,38 +1,5 @@
package com.habitrpg.android.habitica.ui.activities;
-import com.google.android.gms.auth.GoogleAuthException;
-import com.google.android.gms.auth.GoogleAuthUtil;
-import com.google.android.gms.auth.GooglePlayServicesAvailabilityException;
-import com.google.android.gms.auth.UserRecoverableAuthException;
-import com.google.android.gms.common.AccountPicker;
-import com.google.android.gms.common.GooglePlayServicesUtil;
-import com.google.android.gms.common.Scopes;
-
-import com.facebook.AccessToken;
-import com.facebook.CallbackManager;
-import com.facebook.FacebookCallback;
-import com.facebook.FacebookException;
-import com.facebook.FacebookSdk;
-import com.facebook.login.LoginManager;
-import com.facebook.login.LoginResult;
-import com.facebook.login.widget.LoginButton;
-import com.habitrpg.android.habitica.BuildConfig;
-import com.magicmicky.habitrpgwrapper.lib.api.ApiClient;
-import com.habitrpg.android.habitica.HostConfig;
-import com.habitrpg.android.habitica.R;
-import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
-import com.habitrpg.android.habitica.components.AppComponent;
-import com.habitrpg.android.habitica.helpers.AmplitudeManager;
-import com.habitrpg.android.habitica.prefs.scanner.IntentIntegrator;
-import com.habitrpg.android.habitica.prefs.scanner.IntentResult;
-import com.habitrpg.android.habitica.ui.views.login.LockableScrollView;
-import com.habitrpg.android.habitica.ui.views.login.LoginBackgroundView;
-import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
-import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-
import android.accounts.AccountManager;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -45,28 +12,60 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
+import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.preference.PreferenceManager;
import android.text.SpannableString;
import android.text.style.UnderlineSpan;
import android.util.Log;
-import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import android.view.ViewGroup;
import android.view.Window;
-import android.view.animation.AccelerateInterpolator;
+import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.ScrollView;
import android.widget.TextView;
+import com.facebook.AccessToken;
+import com.facebook.CallbackManager;
+import com.facebook.FacebookCallback;
+import com.facebook.FacebookException;
+import com.facebook.login.LoginManager;
+import com.facebook.login.LoginResult;
+import com.google.android.gms.auth.GoogleAuthException;
+import com.google.android.gms.auth.GoogleAuthUtil;
+import com.google.android.gms.auth.GooglePlayServicesAvailabilityException;
+import com.google.android.gms.auth.UserRecoverableAuthException;
+import com.google.android.gms.common.AccountPicker;
+import com.google.android.gms.common.GooglePlayServicesUtil;
+import com.google.android.gms.common.Scopes;
+import com.habitrpg.android.habitica.BuildConfig;
+import com.habitrpg.android.habitica.HostConfig;
+import com.habitrpg.android.habitica.R;
+import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
+import com.habitrpg.android.habitica.components.AppComponent;
+import com.habitrpg.android.habitica.helpers.AmplitudeManager;
+import com.habitrpg.android.habitica.prefs.scanner.IntentIntegrator;
+import com.habitrpg.android.habitica.prefs.scanner.IntentResult;
+import com.habitrpg.android.habitica.ui.views.login.LockableScrollView;
+import com.habitrpg.android.habitica.ui.views.login.LoginBackgroundView;
+import com.magicmicky.habitrpgwrapper.lib.api.ApiClient;
+import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
+import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
import java.io.IOException;
-import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -117,6 +116,8 @@ public class LoginActivity extends BaseActivity
LinearLayout formWrapper;
@BindView(R.id.back_button)
Button backButton;
+ @BindView(R.id.logo_view)
+ ImageView logoView;
@BindView(R.id.login_btn)
Button mLoginNormalBtn;
@@ -173,6 +174,12 @@ public class LoginActivity extends BaseActivity
backgroundContainer.post(() -> backgroundContainer.scrollTo(0, backgroundContainer.getBottom()));
backgroundContainer.setScrollingEnabled(false);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ Window window = getWindow();
+ window.setStatusBarColor(ContextCompat.getColor(this, R.color.black_20_alpha));
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ }
}
private void setupFacebookLogin() {
@@ -517,9 +524,14 @@ public class LoginActivity extends BaseActivity
isShowingForm = true;
ValueAnimator panAnimation = ObjectAnimator.ofInt(backgroundContainer, "scrollY", 0).setDuration(1000);
ValueAnimator newGameAlphaAnimation = ObjectAnimator.ofFloat(newGameButton, View.ALPHA, 0);
-
ValueAnimator showLoginAlphaAnimation = ObjectAnimator.ofFloat(showLoginButton, View.ALPHA, 0);
-
+ ValueAnimator scaleLogoAnimation = ValueAnimator.ofInt(logoView.getMeasuredHeight(), (int)(logoView.getMeasuredHeight()*0.75));
+ scaleLogoAnimation.addUpdateListener(valueAnimator -> {
+ int val = (Integer) valueAnimator.getAnimatedValue();
+ ViewGroup.LayoutParams layoutParams = logoView.getLayoutParams();
+ layoutParams.height = val;
+ logoView.setLayoutParams(layoutParams);
+ });
if (isRegistering) {
newGameAlphaAnimation.setStartDelay(600);
newGameAlphaAnimation.setDuration(400);
@@ -547,7 +559,7 @@ public class LoginActivity extends BaseActivity
}
ValueAnimator backAlphaAnimation = ObjectAnimator.ofFloat(backButton, View.ALPHA, 1).setDuration(800);
AnimatorSet showAnimation = new AnimatorSet();
- showAnimation.playTogether(panAnimation, newGameAlphaAnimation, showLoginAlphaAnimation);
+ showAnimation.playTogether(panAnimation, newGameAlphaAnimation, showLoginAlphaAnimation, scaleLogoAnimation);
showAnimation.play(backAlphaAnimation).after(panAnimation);
for (int i = 0; i < formWrapper.getChildCount(); i++) {
View view = formWrapper.getChildAt(i);
@@ -565,6 +577,13 @@ public class LoginActivity extends BaseActivity
ValueAnimator panAnimation = ObjectAnimator.ofInt(backgroundContainer, "scrollY", backgroundContainer.getBottom()).setDuration(1000);
ValueAnimator newGameAlphaAnimation = ObjectAnimator.ofFloat(newGameButton, View.ALPHA, 1).setDuration(700);
ValueAnimator showLoginAlphaAnimation = ObjectAnimator.ofFloat(showLoginButton, View.ALPHA, 1).setDuration(700);
+ ValueAnimator scaleLogoAnimation = ValueAnimator.ofInt(logoView.getMeasuredHeight(), (int)(logoView.getMeasuredHeight()*1.333333));
+ scaleLogoAnimation.addUpdateListener(valueAnimator -> {
+ int val = (Integer) valueAnimator.getAnimatedValue();
+ ViewGroup.LayoutParams layoutParams = logoView.getLayoutParams();
+ layoutParams.height = val;
+ logoView.setLayoutParams(layoutParams);
+ });
showLoginAlphaAnimation.setStartDelay(300);
ValueAnimator scrollViewAlphaAnimation = ObjectAnimator.ofFloat(scrollView, View.ALPHA, 0).setDuration(800);
scrollViewAlphaAnimation.addListener(new AnimatorListenerAdapter() {
@@ -576,7 +595,7 @@ public class LoginActivity extends BaseActivity
});
ValueAnimator backAlphaAnimation = ObjectAnimator.ofFloat(backButton, View.ALPHA, 0).setDuration(800);
AnimatorSet showAnimation = new AnimatorSet();
- showAnimation.playTogether(panAnimation, scrollViewAlphaAnimation, backAlphaAnimation);
+ showAnimation.playTogether(panAnimation, scrollViewAlphaAnimation, backAlphaAnimation, scaleLogoAnimation);
showAnimation.play(newGameAlphaAnimation).after(scrollViewAlphaAnimation);
showAnimation.play(showLoginAlphaAnimation).after(scrollViewAlphaAnimation);
showAnimation.start();
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.java
index ae4944082..f7c4ba71b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/setup/TaskSetupFragment.java
@@ -1,5 +1,13 @@
package com.habitrpg.android.habitica.ui.fragments.setup;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.ui.AvatarView;
@@ -10,15 +18,6 @@ import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Days;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.GridLayoutManager;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -88,6 +87,7 @@ public class TaskSetupFragment extends BaseFragment {
{getString(R.string.setup_group_teams), "teams"},
{getString(R.string.setup_group_chores), "chores"},
{getString(R.string.setup_group_creativity), "creativity"},
+ {getString(R.string.setuP_group_other), "other"}
};
this.tasks = new Object[][]{
@@ -132,7 +132,8 @@ public class TaskSetupFragment extends BaseFragment {
}
List tasks = new ArrayList<>();
for (Object[] task : this.tasks) {
- if (groups.contains((String) task[0])) {
+ String taskGroup = (String) task[0];
+ if (groups.contains(taskGroup)) {
Task taskObject;
if (task.length == 5) {
taskObject = this.makeTaskObject((String) task[1], (String) task[2], (Boolean) task[3], (Boolean) task[4]);
@@ -145,7 +146,7 @@ public class TaskSetupFragment extends BaseFragment {
return tasks;
}
- private Task makeTaskObject(String type, String text, Boolean up, Boolean down) {
+ private Task makeTaskObject(String type, String text, @Nullable Boolean up, @Nullable Boolean down) {
Task task = new Task();
task.text = text;
task.priority = 1.0f;