diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmGoogleAuthActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmGoogleAuthActivity.java
index 068d099eb..26a07fefe 100644
--- a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmGoogleAuthActivity.java
+++ b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmGoogleAuthActivity.java
@@ -41,7 +41,7 @@ import com.todoroo.astrid.service.StatisticsService;
*/
public class ActFmGoogleAuthActivity extends ListActivity {
- private static final String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/userinfo.profile"; //$NON-NLS-1$
+ public static final String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/userinfo.profile"; //$NON-NLS-1$
public static final String RESULT_EMAIL = "email"; //$NON-NLS-1$
public static final String RESULT_TOKEN = "token"; //$NON-NLS-1$
diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java
index 504ef04ca..b632c4c0c 100644
--- a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java
+++ b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java
@@ -36,7 +36,6 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
-import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ScrollView;
@@ -215,13 +214,6 @@ public class ActFmLoginActivity extends FragmentActivity implements AuthListener
return link;
}
- private void setupSignIn(TextView signIn) {
- signIn.setOnClickListener(signInListener);
- SpannableString content = new SpannableString(getString(R.string.welcome_sign_in));
- content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
- signIn.setText(content);
- }
-
@SuppressWarnings("nls")
protected void initializeUI() {
facebook = new Facebook(APP_ID);
@@ -239,11 +231,11 @@ public class ActFmLoginActivity extends FragmentActivity implements AuthListener
if(AmazonMarketStrategy.isKindleFire())
googleLogin.setVisibility(View.GONE);
googleLogin.setOnClickListener(googleListener);
- Button signUp = (Button) findViewById(R.id.pw_signup);
+ TextView signUp = (TextView) findViewById(R.id.pw_signup);
signUp.setOnClickListener(signUpListener);
TextView signIn = (TextView) findViewById(R.id.pw_login);
- setupSignIn(signIn);
+ signIn.setOnClickListener(signInListener);
setupTermsOfService((TextView) findViewById(R.id.tos));
}
diff --git a/astrid/res/drawable-hdpi/astrid_com_logo_new.png b/astrid/res/drawable-hdpi/astrid_com_logo_new.png
new file mode 100644
index 000000000..5f29cb6e2
Binary files /dev/null and b/astrid/res/drawable-hdpi/astrid_com_logo_new.png differ
diff --git a/astrid/res/drawable-hdpi/fb_login_background.9.png b/astrid/res/drawable-hdpi/fb_login_background.9.png
new file mode 100644
index 000000000..49b7d483b
Binary files /dev/null and b/astrid/res/drawable-hdpi/fb_login_background.9.png differ
diff --git a/astrid/res/drawable-hdpi/google_login_background.9.png b/astrid/res/drawable-hdpi/google_login_background.9.png
new file mode 100644
index 000000000..56511c7b7
Binary files /dev/null and b/astrid/res/drawable-hdpi/google_login_background.9.png differ
diff --git a/astrid/res/drawable/astrid_com_gradient.xml b/astrid/res/drawable/astrid_com_gradient.xml
index 850b5c4e3..1ec360c5c 100644
--- a/astrid/res/drawable/astrid_com_gradient.xml
+++ b/astrid/res/drawable/astrid_com_gradient.xml
@@ -8,8 +8,8 @@
android:shape="rectangle">
diff --git a/astrid/res/layout-land/actfm_login_activity.xml b/astrid/res/layout-land/actfm_login_activity.xml
index 16e756e9e..4fa1a4c77 100644
--- a/astrid/res/layout-land/actfm_login_activity.xml
+++ b/astrid/res/layout-land/actfm_login_activity.xml
@@ -12,121 +12,116 @@
android:background="@drawable/astrid_com_gradient"
android:orientation="vertical" >
-
-
-
-
-
-
+
-
-
-
-
+ android:scaleType="center"
+ android:paddingLeft="20dip"
+ android:paddingRight="20dip"
+ android:paddingBottom="10dip"
+ android:src="@drawable/astrid_com_logo_new"
+ android:layout_weight="1" />
-
-
-
-
+ android:id="@+id/fb_login"
+ android:layout_width="fill_parent"
+ android:layout_height="45dip"
+ android:layout_marginLeft="15dip"
+ android:layout_marginRight="15dip"
+ android:layout_marginBottom="15dip"
+ android:layout_marginTop="15dip"
+ android:paddingLeft="70dip"
+ android:textSize="14sp"
+ android:gravity="left|center_vertical"
+ android:background="@drawable/fb_login_background"
+ android:textColor="@android:color/white"
+ android:text="@string/actfm_ALA_fb_login" />
-
+
+
+ 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:visibility="invisible"
+ android:textColor="#ffffff" />
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/astrid/res/layout/actfm_login_activity.xml b/astrid/res/layout/actfm_login_activity.xml
index 73ec6bf55..541ab3fe3 100644
--- a/astrid/res/layout/actfm_login_activity.xml
+++ b/astrid/res/layout/actfm_login_activity.xml
@@ -13,101 +13,99 @@
android:background="@drawable/astrid_com_gradient"
android:orientation="vertical">
-
-
+ android:layout_height="fill_parent"
+ android:layout_weight="1"
+ android:paddingTop="95dip"
+ android:scaleType="center"
+ android:src="@drawable/astrid_com_logo_new" />
-
-
-
-
-
-
-
-
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
-
+
+
+
+
+
+
+
+
+
diff --git a/astrid/res/layout/welcome_walkthrough_login_page.xml b/astrid/res/layout/welcome_walkthrough_login_page.xml
index 5b5e5660d..0c81978bf 100644
--- a/astrid/res/layout/welcome_walkthrough_login_page.xml
+++ b/astrid/res/layout/welcome_walkthrough_login_page.xml
@@ -112,6 +112,7 @@
android:paddingRight="20dip"
android:paddingBottom="5dip"
android:textSize="16sp"
+ android:text="@string/welcome_login_later"
android:textColor="#444444" />
diff --git a/astrid/res/layout/welcome_walkthrough_simple_login.xml b/astrid/res/layout/welcome_walkthrough_simple_login.xml
new file mode 100644
index 000000000..cd5619507
--- /dev/null
+++ b/astrid/res/layout/welcome_walkthrough_simple_login.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/astrid/res/values/strings-actfm.xml b/astrid/res/values/strings-actfm.xml
index f9d547735..ed75a2ce3 100644
--- a/astrid/res/values/strings-actfm.xml
+++ b/astrid/res/values/strings-actfm.xml
@@ -234,15 +234,11 @@
Connect with Google
-
+
+ Sign in: %s
-
-
-
-
-
-
-
+
+ Not %s?
First Name
diff --git a/astrid/res/values/strings-intro.xml b/astrid/res/values/strings-intro.xml
index b5ba0e7a3..0f7b0a361 100644
--- a/astrid/res/values/strings-intro.xml
+++ b/astrid/res/values/strings-intro.xml
@@ -38,12 +38,12 @@
Terms of Service
- Sign up with email
+ Sign up
- Sign in
+ Log in
- Connect Later
+ Later
Why not sign in?
diff --git a/astrid/src/com/todoroo/astrid/service/StartupService.java b/astrid/src/com/todoroo/astrid/service/StartupService.java
index f42ee0d74..ca306f1f0 100644
--- a/astrid/src/com/todoroo/astrid/service/StartupService.java
+++ b/astrid/src/com/todoroo/astrid/service/StartupService.java
@@ -201,6 +201,8 @@ public class StartupService {
final int finalLatestVersion = latestSetVersion;
+ abTests.externalInit(context);
+
abChooser.makeChoicesForAllTests(latestSetVersion == 0, taskService.getUserActivationStatus());
abTestInvoker.reportAcquisition();
diff --git a/astrid/src/com/todoroo/astrid/service/StatisticsConstants.java b/astrid/src/com/todoroo/astrid/service/StatisticsConstants.java
index 1c5718e8f..777f03aa5 100644
--- a/astrid/src/com/todoroo/astrid/service/StatisticsConstants.java
+++ b/astrid/src/com/todoroo/astrid/service/StatisticsConstants.java
@@ -78,6 +78,9 @@ public class StatisticsConstants {
public static final String PREMIUM_PAGE_VIEWED = "premium-page-viewed";
public static final String FEATURED_LIST_CLONED = "featured-list-cloned";
+ public static final String ACTFM_LOGIN_SIMPLE = "actfm-login-simple";
+ public static final String ACTFM_LOGIN_SIMPLE_REJECTED = "actfm-login-simple-rejected";
+
public static final String SUBTASKS_HAS_TASKS = "subtasks-has-tasks";
public static final String SUBTASKS_ORDER_USED = "subtasks-order-used";
public static final String SUBTASKS_INDENT_USED = "subtasks-indent-used";
diff --git a/astrid/src/com/todoroo/astrid/service/abtesting/ABTests.java b/astrid/src/com/todoroo/astrid/service/abtesting/ABTests.java
index 87b12f99b..ed98d0f57 100644
--- a/astrid/src/com/todoroo/astrid/service/abtesting/ABTests.java
+++ b/astrid/src/com/todoroo/astrid/service/abtesting/ABTests.java
@@ -8,6 +8,11 @@ package com.todoroo.astrid.service.abtesting;
import java.util.HashMap;
import java.util.Set;
+import android.accounts.Account;
+import android.content.Context;
+
+import com.google.api.client.googleapis.extensions.android2.auth.GoogleAccountManager;
+
/**
* Helper class to define options with their probabilities and descriptions
* @author Sam Bosley
@@ -20,6 +25,30 @@ public class ABTests {
initialize();
}
+ /**
+ * Initialization for any tests that require a context or other logic
+ * to be initialized should go here. This method is called from the startup
+ * service before any test choices are made, so it is safe to add
+ * tests here. It's also ok if this method is a no-op sometimes.
+ * @param context
+ */
+ public void externalInit(Context context) {
+ // The outer 'if' statement is to prevent one test from being added one time
+ // and the other from being added later if the accounts changed
+ if (ABChooser.readChoiceForTest(AB_NEW_LOGIN_NO_GOOGLE) == ABChooser.NO_OPTION
+ && ABChooser.readChoiceForTest(AB_NEW_LOGIN_YES_GOOGLE) == ABChooser.NO_OPTION) {
+ GoogleAccountManager am = new GoogleAccountManager(context);
+ Account[] accounts = am.getAccounts();
+ if (accounts == null || accounts.length == 0) {
+ addTest(AB_NEW_LOGIN_NO_GOOGLE, new int[] { 1, 1 },
+ new int[] { 1, 0 }, new String[] { "old-welcome", "new-welcome" }); //$NON-NLS-1$//$NON-NLS-2$
+ } else {
+ addTest(AB_NEW_LOGIN_YES_GOOGLE, new int[] { 1, 1, 1 },
+ new int[] { 1, 0, 0 }, new String[] { "old-welcome", "new-welcome", "new-quick-welcome" }); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
+ }
+ }
+ }
+
/**
* Gets the integer array of weighted probabilities for an option key
* @param key
@@ -127,6 +156,10 @@ public class ABTests {
public static final String AB_DEFAULT_EDIT_TAB = "android_default_edit_tab"; //$NON-NLS-1$
+ public static final String AB_NEW_LOGIN_NO_GOOGLE = "android_new_login_n_google"; //$NON-NLS-1$
+
+ public static final String AB_NEW_LOGIN_YES_GOOGLE = "android_new_login_y_google"; //$NON-NLS-1$
+
private void initialize() {
addTest(AB_FEATURED_LISTS, new int[] { 1, 1 },
diff --git a/astrid/src/com/todoroo/astrid/welcome/tutorial/WelcomePagerAdapter.java b/astrid/src/com/todoroo/astrid/welcome/tutorial/WelcomePagerAdapter.java
index cf034c128..f4af8a9fa 100644
--- a/astrid/src/com/todoroo/astrid/welcome/tutorial/WelcomePagerAdapter.java
+++ b/astrid/src/com/todoroo/astrid/welcome/tutorial/WelcomePagerAdapter.java
@@ -21,11 +21,13 @@ import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
+import com.todoroo.astrid.service.abtesting.ABChooser;
+import com.todoroo.astrid.service.abtesting.ABTests;
import com.viewpagerindicator.TitleProvider;
public class WelcomePagerAdapter extends PagerAdapter implements TitleProvider
{
- private static int[] images = new int[] {
+ private final int[] images = new int[] {
R.drawable.welcome_walkthrough_1,
R.drawable.welcome_walkthrough_2,
R.drawable.welcome_walkthrough_3,
@@ -34,7 +36,7 @@ public class WelcomePagerAdapter extends PagerAdapter implements TitleProvider
R.drawable.welcome_walkthrough_6,
0
};
- private static int[] title = new int[] {
+ private final int[] title = new int[] {
R.string.welcome_title_1,
R.string.welcome_title_2,
R.string.welcome_title_3,
@@ -43,7 +45,7 @@ public class WelcomePagerAdapter extends PagerAdapter implements TitleProvider
R.string.welcome_title_6,
R.string.welcome_title_7,
};
- private static int[] body = new int[] {
+ private final int[] body = new int[] {
R.string.welcome_body_1,
R.string.welcome_body_2,
R.string.welcome_body_3,
@@ -52,7 +54,7 @@ public class WelcomePagerAdapter extends PagerAdapter implements TitleProvider
R.string.welcome_body_6,
R.string.welcome_body_7,
};
- private static int[] layouts = new int[] {
+ public final int[] layouts = new int[] {
R.layout.welcome_walkthrough_page,
R.layout.welcome_walkthrough_page,
R.layout.welcome_walkthrough_page,
@@ -62,6 +64,8 @@ public class WelcomePagerAdapter extends PagerAdapter implements TitleProvider
R.layout.welcome_walkthrough_login_page,
};
+ public int fallbackLoginPage;
+
private final Context context;
public WelcomeWalkthrough parent;
@Autowired ActFmPreferenceService actFmPreferenceService;
@@ -75,6 +79,28 @@ public class WelcomePagerAdapter extends PagerAdapter implements TitleProvider
title[title.length - 1] = R.string.welcome_title_7_return;
images[images.length - 1] = R.drawable.welcome_walkthrough_1;
body[body.length - 1] = R.string.welcome_body_7_return;
+ } else {
+ // Setup login page from AB tests
+ if (ABChooser.readChoiceForTest(ABTests.AB_NEW_LOGIN_YES_GOOGLE) != ABChooser.NO_OPTION) {
+ int choice = ABChooser.readChoiceForTest(ABTests.AB_NEW_LOGIN_YES_GOOGLE);
+ switch (choice) {
+ case 1:
+ fallbackLoginPage = layouts[layouts.length - 1] = R.layout.actfm_login_activity;
+ break;
+ case 2:
+ layouts[layouts.length - 1] = R.layout.welcome_walkthrough_simple_login;
+ fallbackLoginPage = R.layout.actfm_login_activity;
+ break;
+ default:
+ fallbackLoginPage = layouts[layouts.length - 1];
+ break;
+ }
+ } else if (ABChooser.readChoiceForTest(ABTests.AB_NEW_LOGIN_NO_GOOGLE) != ABChooser.NO_OPTION) {
+ int choice = ABChooser.readChoiceForTest(ABTests.AB_NEW_LOGIN_NO_GOOGLE);
+ fallbackLoginPage = layouts[layouts.length - 1];
+ if (choice == 1)
+ fallbackLoginPage = layouts[layouts.length - 1] = R.layout.actfm_login_activity;
+ }
}
}
@@ -91,6 +117,11 @@ public class WelcomePagerAdapter extends PagerAdapter implements TitleProvider
return layouts.length;
}
+ public void changeLoginPage(int newLayout) {
+ layouts[layouts.length - 1] = newLayout;
+ notifyDataSetChanged();
+ }
+
@Override
public Object instantiateItem(final View pager, final int position) {
LayoutInflater inflater = LayoutInflater.from(context);
diff --git a/astrid/src/com/todoroo/astrid/welcome/tutorial/WelcomeWalkthrough.java b/astrid/src/com/todoroo/astrid/welcome/tutorial/WelcomeWalkthrough.java
index ce8a900e2..588078234 100644
--- a/astrid/src/com/todoroo/astrid/welcome/tutorial/WelcomeWalkthrough.java
+++ b/astrid/src/com/todoroo/astrid/welcome/tutorial/WelcomeWalkthrough.java
@@ -6,23 +6,34 @@
package com.todoroo.astrid.welcome.tutorial;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.accounts.AccountManagerCallback;
+import android.accounts.AccountManagerFuture;
+import android.app.ProgressDialog;
import android.content.DialogInterface;
-import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
-import android.text.SpannableString;
-import android.text.Spanned;
-import android.text.TextPaint;
-import android.text.style.ClickableSpan;
+import android.text.TextUtils;
+import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
+import android.widget.Toast;
+import com.google.api.client.googleapis.extensions.android2.auth.GoogleAccountManager;
import com.timsu.astrid.R;
import com.todoroo.andlib.utility.DialogUtilities;
+import com.todoroo.astrid.actfm.ActFmGoogleAuthActivity;
import com.todoroo.astrid.actfm.ActFmLoginActivity;
+import com.todoroo.astrid.gtasks.auth.ModernAuthManager;
+import com.todoroo.astrid.service.StatisticsConstants;
+import com.todoroo.astrid.service.StatisticsService;
import com.viewpagerindicator.CirclePageIndicator;
import com.viewpagerindicator.PageIndicator;
@@ -68,6 +79,109 @@ public class WelcomeWalkthrough extends ActFmLoginActivity {
}
}
+ private int getLoginPageLayout() {
+ return mAdapter.fallbackLoginPage;
+ }
+
+ @Override
+ protected void initializeUI() {
+ String[] accounts = ModernAuthManager.getAccounts(this);
+ String email = null;
+ if (accounts != null && accounts.length > 0) {
+ email = accounts[0];
+ }
+ Button simpleLogin = (Button) findViewById(R.id.quick_login_google);
+ if (simpleLogin != null && !TextUtils.isEmpty(email)) {
+ initializeSimpleUI(email);
+ } else {
+ if (mAdapter != null && mAdapter.layouts[mAdapter.layouts.length - 1] != getLoginPageLayout())
+ mAdapter.changeLoginPage(getLoginPageLayout());
+ super.initializeUI();
+ }
+ }
+
+ private void initializeSimpleUI(final String email) {
+ Button simpleLogin = (Button) findViewById(R.id.quick_login_google);
+ simpleLogin.setText(getString(R.string.actfm_quick_login, email));
+ simpleLogin.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ StatisticsService.reportEvent(StatisticsConstants.ACTFM_LOGIN_SIMPLE);
+ final ProgressDialog pd = DialogUtilities.progressDialog(WelcomeWalkthrough.this, getString(R.string.gtasks_GLA_authenticating));
+ pd.show();
+ GoogleAccountManager accountManager = new GoogleAccountManager(WelcomeWalkthrough.this);
+ Account a = accountManager.getAccountByName(email);
+ AccountManagerCallback callback = new AccountManagerCallback() {
+ public void run(final AccountManagerFuture future) {
+ new Thread() {
+ @Override
+ public void run() {
+ try {
+ Bundle bundle = future.getResult(30, TimeUnit.SECONDS);
+ if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) {
+ String authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN);
+ onAuthTokenSuccess(email, authToken);
+ }
+ } catch (final Exception e) {
+ Log.e("actfm-google-auth", "Login Error", e); //$NON-NLS-1$ //$NON-NLS-2$
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ int error = e instanceof IOException ? R.string.gtasks_GLA_errorIOAuth :
+ R.string.gtasks_GLA_errorAuth;
+ Toast.makeText(WelcomeWalkthrough.this,
+ error,
+ Toast.LENGTH_LONG).show();
+ onAuthError();
+ }
+ });
+ } finally {
+ DialogUtilities.dismissDialog(WelcomeWalkthrough.this, pd);
+ }
+ }
+ }.start();
+ }
+ };
+ accountManager.manager.getAuthToken(a, ActFmGoogleAuthActivity.AUTH_TOKEN_TYPE, null, WelcomeWalkthrough.this, callback, null);
+ }
+ });
+
+ TextView rejectQuickLogin = (TextView) findViewById(R.id.quick_login_reject);
+ rejectQuickLogin.setText(getString(R.string.actfm_quick_login_reject, email));
+ rejectQuickLogin.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ StatisticsService.reportEvent(StatisticsConstants.ACTFM_LOGIN_SIMPLE_REJECTED);
+ switchToLoginPage();
+ }
+ });
+ }
+
+ private void onAuthTokenSuccess(final String email, final String authToken) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ authenticate(email, email, "", "google", authToken); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ });
+ }
+
+ private void onAuthError() {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ switchToLoginPage();
+ }
+ });
+ }
+
+ private void switchToLoginPage() {
+ mAdapter.changeLoginPage(getLoginPageLayout());
+ mPager.setAdapter(mAdapter);
+ mPager.setCurrentItem(mAdapter.layouts.length - 1, false);
+ initializeUI();
+ }
+
public void onPageChanged(View view, int position) {
currentPage = position;
currentView = view;
@@ -88,6 +202,7 @@ public class WelcomeWalkthrough extends ActFmLoginActivity {
currentView.findViewById(R.id.welcome_walkthrough_image).setOnClickListener(done);
}
}
+ ((CirclePageIndicator) mIndicator).setVisibility(currentPage == mAdapter.getCount()-1 ? View.GONE : View.VISIBLE);
}
protected void setupPWLogin() {
@@ -98,21 +213,7 @@ public class WelcomeWalkthrough extends ActFmLoginActivity {
protected void setupLoginLater() {
TextView loginLater = (TextView)currentView.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(68, 68, 68));
- }
- };
- loginLaterLink.setSpan(laterSpan, 0, loginLaterBase.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- loginLater.setText(loginLaterLink);
+ loginLater.setVisibility(View.VISIBLE);
}