mirror of https://github.com/tasks/tasks
New user experience with login prompt and welcome graphic
parent
6a666f8d80
commit
9d9680cbf2
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