Add Intro before login

This commit is contained in:
Phillip Thelen 2016-01-28 14:09:10 +01:00
parent 905568821f
commit 2c982d5fb0
14 changed files with 299 additions and 7 deletions

View file

@ -50,6 +50,11 @@
android:windowSoftInputMode="adjustResize"
android:screenOrientation="portrait">
</activity>
<activity
android:name=".ui.activities.IntroActivity"
android:windowSoftInputMode="adjustResize"
android:screenOrientation="portrait">
</activity>
<activity
android:name=".ui.activities.SkillTasksActivity"
android:label="@string/app_name"

View file

@ -86,6 +86,8 @@ dependencies {
//Material Dialogs
compile('com.github.afollestad.material-dialogs:core:0.8.5.0@aar')
compile 'fr.avianey.com.viewpagerindicator:library:2.4.1@aar'
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

View file

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/intro_background">
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.viewpagerindicator.CirclePageIndicator
android:id="@+id/view_pager_indicator"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_alignParentBottom="true"
android:layout_marginBottom="16dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/skip"
android:id="@+id/skipButton"
android:layout_alignParentBottom="false"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="6dp"
android:layout_alignParentTop="true"
android:layout_marginTop="6dp"
android:textColor="@android:color/white"
android:backgroundTint="@color/brand_100" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/intro_finish_button"
android:id="@+id/finishButton"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="6dp"
android:layout_marginBottom="6dp"
android:backgroundTint="@color/brand_100"
android:textColor="@android:color/white"
android:visibility="gone" />
</RelativeLayout>

View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/titleTextView"
android:layout_gravity="center_horizontal"
android:textColor="@android:color/white"
android:gravity="center_horizontal"
android:layout_margin="24dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:layout_gravity="center_horizontal" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/descriptionTextView"
android:layout_gravity="center_horizontal"
android:textColor="@android:color/white"
android:layout_margin="24dp"
android:gravity="center_horizontal" />
</LinearLayout>

View file

@ -167,4 +167,12 @@
<string name="sidebar_help"><![CDATA[Help & FAQ]]></string>
<string name="complete_tutorial">Got it!</string>
<string name="dismiss_tutorial">Remind me again</string>
<string name="intro_1_title">Welcome to Habitica</string>
<string name="intro_1_description">Join over 900,000 people having fun while getting things done. Create an avatar and track your real-life tasks.</string>
<string name="intro_2_title">Game Progress = Life Progress</string>
<string name="intro_2_description">Unlock features in the game by checking off your real-life tasks. Earn armor, pets, and more to reward you for meeting your goals!</string>
<string name="intro_3_title">Get Social and Fight Monsters</string>
<string name="intro_3_description">Keep your goals on track with help from your friends. Support each other in life and in battle as you improve together!</string>
<string name="skip">Skip</string>
<string name="intro_finish_button">Get Started</string>
</resources>

View file

@ -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

View file

@ -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) {
}
}

View file

@ -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);
}
}
}