diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml
index 66b0a693b..0e52f294c 100644
--- a/Habitica/AndroidManifest.xml
+++ b/Habitica/AndroidManifest.xml
@@ -50,6 +50,11 @@
android:windowSoftInputMode="adjustResize"
android:screenOrientation="portrait">
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/fragment_intro.xml b/Habitica/res/layout/fragment_intro.xml
new file mode 100644
index 000000000..2d1db85cc
--- /dev/null
+++ b/Habitica/res/layout/fragment_intro.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 942f9bc81..fac0b776f 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -167,4 +167,12 @@
Got it!
Remind me again
+ Welcome to Habitica
+ Join over 900,000 people having fun while getting things done. Create an avatar and track your real-life tasks.
+ Game Progress = Life Progress
+ Unlock features in the game by checking off your real-life tasks. Earn armor, pets, and more to reward you for meeting your goals!
+ Get Social and Fight Monsters
+ Keep your goals on track with help from your friends. Support each other in life and in battle as you improve together!
+ Skip
+ Get Started
\ No newline at end of file
diff --git a/Habitica/src/com/habitrpg/android/habitica/HabiticaApplication.java b/Habitica/src/com/habitrpg/android/habitica/HabiticaApplication.java
index 14a7869b2..fed581ac1 100644
--- a/Habitica/src/com/habitrpg/android/habitica/HabiticaApplication.java
+++ b/Habitica/src/com/habitrpg/android/habitica/HabiticaApplication.java
@@ -17,6 +17,7 @@ import android.util.Log;
import com.crashlytics.android.Crashlytics;
import com.crashlytics.android.core.CrashlyticsCore;
import com.facebook.FacebookSdk;
+import com.habitrpg.android.habitica.ui.activities.IntroActivity;
import com.habitrpg.android.habitica.ui.activities.LoginActivity;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
import com.raizlabs.android.dbflow.config.FlowManager;
@@ -214,17 +215,12 @@ public class HabiticaApplication extends Application {
editor.putBoolean("use_reminder", use_reminder);
editor.putString("reminder_time", reminder_time);
editor.commit();
- Intent intent = new Intent(context, LoginActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(intent);
+ startActivity(LoginActivity.class, context);
}
public static boolean checkUserAuthentication(Context context, HostConfig hostConfig) {
if (hostConfig == null || hostConfig.getApi() == null || hostConfig.getApi().equals("") || hostConfig.getUser() == null || hostConfig.getUser().equals("")) {
- Intent intent = new Intent(context, LoginActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
-
- context.startActivity(intent);
+ startActivity(IntroActivity.class, context);
return false;
}
@@ -232,6 +228,12 @@ public class HabiticaApplication extends Application {
return true;
}
+ private static void startActivity(Class activityClass, Context context) {
+ Intent intent = new Intent(context, activityClass);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ }
+
// endregion
// region IAP - Specific
diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/activities/IntroActivity.java b/Habitica/src/com/habitrpg/android/habitica/ui/activities/IntroActivity.java
new file mode 100644
index 000000000..b57232afa
--- /dev/null
+++ b/Habitica/src/com/habitrpg/android/habitica/ui/activities/IntroActivity.java
@@ -0,0 +1,121 @@
+package com.habitrpg.android.habitica.ui.activities;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.PersistableBundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentPagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+
+import com.habitrpg.android.habitica.R;
+import com.habitrpg.android.habitica.ui.fragments.IntroFragment;
+import com.viewpagerindicator.CirclePageIndicator;
+
+import butterknife.Bind;
+import butterknife.ButterKnife;
+
+public class IntroActivity extends AppCompatActivity implements View.OnClickListener, ViewPager.OnPageChangeListener {
+
+ @Bind(R.id.view_pager)
+ ViewPager pager;
+
+ @Bind(R.id.view_pager_indicator)
+ CirclePageIndicator indicator;
+
+ @Bind(R.id.skipButton)
+ Button skipButton;
+
+ @Bind(R.id.finishButton)
+ Button finishButton;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_intro);
+ ButterKnife.bind(this);
+
+ setupIntro();
+ indicator.setViewPager(pager);
+
+ this.skipButton.setOnClickListener(this);
+ this.finishButton.setOnClickListener(this);
+ }
+
+ private void setupIntro() {
+ android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
+
+ pager.setAdapter(new FragmentPagerAdapter(fragmentManager) {
+ @Override
+ public Fragment getItem(int position) {
+ IntroFragment fragment = new IntroFragment();
+
+ switch (position) {
+ case 0: {
+ fragment.setImage(getResources().getDrawable(R.drawable.intro_1));
+ fragment.setTitle(getString(R.string.intro_1_title));
+ fragment.setDescription(getString(R.string.intro_1_description));
+ break;
+ }
+ case 1: {
+ fragment.setImage(getResources().getDrawable(R.drawable.intro_2));
+ fragment.setTitle(getString(R.string.intro_2_title));
+ fragment.setDescription(getString(R.string.intro_2_description));
+ break;
+ }
+ case 2: {
+ fragment.setImage(getResources().getDrawable(R.drawable.intro_3));
+ fragment.setTitle(getString(R.string.intro_3_title));
+ fragment.setDescription(getString(R.string.intro_3_description));
+ break;
+ }
+ }
+
+ return fragment;
+ }
+
+ @Override
+ public int getCount() {
+ return 3;
+ }
+ });
+
+ pager.addOnPageChangeListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ finishIntro();
+ }
+
+ private void finishIntro() {
+ Intent intent = new Intent(this, LoginActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
+
+ this.startActivity(intent);
+ finish();
+ }
+
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ if (position == 2) {
+ this.finishButton.setVisibility(View.VISIBLE);
+ } else {
+ this.finishButton.setVisibility(View.GONE);
+ }
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+
+ }
+}
diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/fragments/IntroFragment.java b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/IntroFragment.java
new file mode 100644
index 000000000..08dd8d5dc
--- /dev/null
+++ b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/IntroFragment.java
@@ -0,0 +1,79 @@
+package com.habitrpg.android.habitica.ui.fragments;
+
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.habitrpg.android.habitica.R;
+
+import butterknife.Bind;
+import butterknife.ButterKnife;
+
+public class IntroFragment extends Fragment {
+
+
+ @Bind(R.id.titleTextView)
+ TextView titleTextView;
+
+ @Bind(R.id.descriptionTextView)
+ TextView descriptionTextView;
+
+ @Bind(R.id.imageView)
+ ImageView imageView;
+
+ Drawable image;
+ String title;
+ String description;
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ super.onCreateView(inflater, container, savedInstanceState);
+ View v = inflater.inflate(R.layout.fragment_intro, container, false);
+
+ ButterKnife.bind(this, v);
+
+ if (this.image != null) {
+ this.imageView.setImageDrawable(this.image);
+ }
+
+ if (this.title != null) {
+ this.titleTextView.setText(this.title);
+ }
+
+ if (this.description != null) {
+ this.descriptionTextView.setText(this.description);
+ }
+
+ return v;
+ }
+
+ public void setImage(Drawable image) {
+ this.image = image;
+ if (this.imageView != null && image != null) {
+ this.imageView.setImageDrawable(image);
+ }
+ }
+
+ public void setTitle(String text) {
+ this.title = text;
+ if (this.titleTextView != null && text != null) {
+ this.titleTextView.setText(text);
+ }
+ }
+
+ public void setDescription(String text) {
+ this.description = text;
+ if (this.descriptionTextView != null && text != null) {
+ this.descriptionTextView.setText(text);
+ }
+ }
+
+}