mirror of https://github.com/tasks/tasks
Merge pull request #79 from sbosley/rebase-mania
New user experience with login prompt and welcome graphicpull/14/head
commit
3c012b4d1d
Binary file not shown.
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 22 KiB |
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
Binary file not shown.
After Width: | Height: | Size: 47 KiB |
@ -0,0 +1,98 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:paddingLeft="4dip"
|
||||||
|
android:paddingRight="4dip"
|
||||||
|
android:background="@drawable/astrid_com_gradient"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/logo"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="110dip"
|
||||||
|
android:scaleType="fitCenter"
|
||||||
|
android:paddingLeft="20dip"
|
||||||
|
android:paddingRight="20dip"
|
||||||
|
android:paddingBottom="10dip"
|
||||||
|
android:layout_marginTop="40dip"
|
||||||
|
android:src="@drawable/astrid_com_logo" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/error"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:textColor="#ff0000"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:paddingTop="5dip">
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/login_later"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="45dip"
|
||||||
|
android:gravity="center"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:paddingLeft="20dip"
|
||||||
|
android:paddingRight="20dip"
|
||||||
|
android:paddingBottom="5dip"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:textColor="#ffffff" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/pw_login"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="45dip"
|
||||||
|
android:layout_above="@id/login_later"
|
||||||
|
android:paddingLeft="20dip"
|
||||||
|
android:paddingRight="20dip"
|
||||||
|
android:layout_marginLeft="15dip"
|
||||||
|
android:layout_marginRight="15dip"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:text="@string/welcome_login_pw"/>
|
||||||
|
|
||||||
|
<com.facebook.android.LoginButton
|
||||||
|
android:id="@+id/fb_login"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="45dip"
|
||||||
|
android:layout_above="@id/pw_login"
|
||||||
|
android:paddingLeft="20dip"
|
||||||
|
android:paddingRight="20dip"
|
||||||
|
android:layout_marginLeft="15dip"
|
||||||
|
android:layout_marginRight="15dip"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:drawableLeft="@drawable/facebook"
|
||||||
|
android:text="@string/actfm_ALA_fb_login" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/gg_login"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="45dip"
|
||||||
|
android:layout_above="@id/fb_login"
|
||||||
|
android:paddingLeft="20dip"
|
||||||
|
android:paddingRight="20dip"
|
||||||
|
android:layout_marginLeft="15dip"
|
||||||
|
android:layout_marginRight="15dip"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:drawableLeft="@drawable/google"
|
||||||
|
android:text="@string/actfm_ALA_gg_login" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tos"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="35dip"
|
||||||
|
android:layout_above="@id/gg_login"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingLeft="20dip"
|
||||||
|
android:paddingRight="20dip"
|
||||||
|
android:textSize="12.5sp"
|
||||||
|
android:textColor="#ffffff" />
|
||||||
|
</RelativeLayout>
|
||||||
|
</LinearLayout>
|
@ -0,0 +1,181 @@
|
|||||||
|
package com.todoroo.astrid.welcome;
|
||||||
|
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.text.SpannableString;
|
||||||
|
import android.text.Spanned;
|
||||||
|
import android.text.TextPaint;
|
||||||
|
import android.text.style.ClickableSpan;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.View.OnClickListener;
|
||||||
|
import android.view.Window;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.facebook.android.AuthListener;
|
||||||
|
import com.timsu.astrid.R;
|
||||||
|
import com.todoroo.andlib.service.ContextManager;
|
||||||
|
import com.todoroo.andlib.utility.DialogUtilities;
|
||||||
|
import com.todoroo.andlib.utility.Preferences;
|
||||||
|
import com.todoroo.astrid.actfm.ActFmLoginActivity;
|
||||||
|
import com.todoroo.astrid.activity.Eula;
|
||||||
|
import com.todoroo.astrid.activity.TaskListActivity;
|
||||||
|
import com.todoroo.astrid.data.Task;
|
||||||
|
import com.todoroo.astrid.service.AstridDependencyInjector;
|
||||||
|
import com.todoroo.astrid.service.StartupService;
|
||||||
|
import com.todoroo.astrid.utility.AstridPreferences;
|
||||||
|
|
||||||
|
public class WelcomeLogin extends ActFmLoginActivity implements AuthListener {
|
||||||
|
|
||||||
|
// --- ui initialization
|
||||||
|
|
||||||
|
public static final String KEY_SHOWED_WELCOME_LOGIN = "key_showed_welcome_login"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
public static final String KEY_IS_NEW_INSTALL = "key_is_new_install"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
private boolean shouldShowWelcomeScreen = true;
|
||||||
|
|
||||||
|
static {
|
||||||
|
AstridDependencyInjector.initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getContentViewResource() {
|
||||||
|
return R.layout.welcome_login_activity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getTitleResource() {
|
||||||
|
return R.string.welcome_login_title;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
int latestSetVersion = AstridPreferences.getCurrentVersion();
|
||||||
|
shouldShowWelcomeScreen = (latestSetVersion == 0);
|
||||||
|
new StartupService().onStartupApplication(this);
|
||||||
|
ContextManager.setContext(this);
|
||||||
|
|
||||||
|
if (latestSetVersion !=0 || Preferences.getBoolean(KEY_SHOWED_WELCOME_LOGIN, false)) {
|
||||||
|
finishAndShowNext();
|
||||||
|
}
|
||||||
|
initializeUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void finishAndShowNext() {
|
||||||
|
if (shouldShowWelcomeScreen) {
|
||||||
|
Intent welcomeScreen = new Intent(this, WelcomeScreen.class);
|
||||||
|
startActivity(welcomeScreen);
|
||||||
|
finish();
|
||||||
|
Preferences.setBoolean(KEY_SHOWED_WELCOME_LOGIN, true);
|
||||||
|
} else {
|
||||||
|
Intent taskListStartup = new Intent(this, TaskListActivity.class);
|
||||||
|
startActivity(taskListStartup);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initializeUI() {
|
||||||
|
findViewById(R.id.gg_login).setOnClickListener(googleListener);
|
||||||
|
setupTermsOfService();
|
||||||
|
setupPWLogin();
|
||||||
|
setupLoginLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
private SpannableString getLinkStringWithCustomInterval(String base, String linkComponent,
|
||||||
|
int start, int endOffset, final OnClickListener listener) {
|
||||||
|
SpannableString link = new SpannableString (String.format("%s %s", //$NON-NLS-1$
|
||||||
|
base, linkComponent));
|
||||||
|
ClickableSpan linkSpan = new ClickableSpan() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View widget) {
|
||||||
|
listener.onClick(widget);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void updateDrawState(TextPaint ds) {
|
||||||
|
ds.setUnderlineText(true);
|
||||||
|
ds.setColor(Color.rgb(255, 255, 255));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
link.setSpan(linkSpan, start, link.length() + endOffset, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||||
|
return link;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupTermsOfService() {
|
||||||
|
TextView tos = (TextView)findViewById(R.id.tos);
|
||||||
|
tos.setOnClickListener(showTosListener);
|
||||||
|
|
||||||
|
String tosBase = getString(R.string.welcome_login_tos_base);
|
||||||
|
String tosLink = getString(R.string.welcome_login_tos_link);
|
||||||
|
SpannableString link = getLinkStringWithCustomInterval(tosBase, tosLink, tosBase.length() + 2, -1, showTosListener);
|
||||||
|
tos.setText(link);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupPWLogin() {
|
||||||
|
Button pwLogin = (Button) findViewById(R.id.pw_login);
|
||||||
|
pwLogin.setOnClickListener(signUpListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupLoginLater() {
|
||||||
|
TextView loginLater = (TextView)findViewById(R.id.login_later);
|
||||||
|
loginLater.setOnClickListener(loginLaterListener);
|
||||||
|
String loginLaterBase = getString(R.string.welcome_login_later);
|
||||||
|
SpannableString loginLaterLink = new SpannableString(String.format("%s", loginLaterBase)); //$NON-NLS-1$
|
||||||
|
ClickableSpan laterSpan = new ClickableSpan() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View widget) {
|
||||||
|
loginLaterListener.onClick(widget);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void updateDrawState(TextPaint ds) {
|
||||||
|
ds.setUnderlineText(true);
|
||||||
|
ds.setColor(Color.rgb(255, 255, 255));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
loginLaterLink.setSpan(laterSpan, 0, loginLaterBase.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||||
|
loginLater.setText(loginLaterLink);
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- event handler
|
||||||
|
|
||||||
|
private final OnClickListener showTosListener = new OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Eula.showEulaBasic(WelcomeLogin.this);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private final OnClickListener loginLaterListener = new OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View arg0) {
|
||||||
|
String title = getString(R.string.welcome_login_confirm_later_title);
|
||||||
|
String confirmLater = getString(R.string.welcome_login_confirm_later_dialog);
|
||||||
|
DialogUtilities.okCancelCustomDialog(WelcomeLogin.this, title, confirmLater,
|
||||||
|
R.string.welcome_login_confirm_later_ok,
|
||||||
|
R.string.welcome_login_confirm_later_cancel,
|
||||||
|
null, confirmLaterListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final DialogInterface.OnClickListener confirmLaterListener = new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
finishAndShowNext();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void postAuthenticate(JSONObject result, String token) {
|
||||||
|
// Delete the "Setup sync" task on successful login
|
||||||
|
taskService.deleteWhere(Task.TITLE.eq(getString(R.string.intro_task_3_summary)));
|
||||||
|
super.postAuthenticate(result, token);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue