diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java index 724d8f21e..731624e1c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java @@ -24,6 +24,7 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.security.NoSuchAlgorithmException; +import java.util.Random; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; @@ -63,6 +64,7 @@ import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.ExceptionService; +import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.actfm.sync.ActFmInvoker; @@ -91,6 +93,7 @@ public class ActFmLoginActivity extends Activity implements AuthListener { @Autowired protected ActFmPreferenceService actFmPreferenceService; private final ActFmInvoker actFmInvoker = new ActFmInvoker(); + private Random rand; private Facebook facebook; private AsyncFacebookRunner facebookRunner; @@ -134,6 +137,8 @@ public class ActFmLoginActivity extends Activity implements AuthListener { setContentView(getContentViewResource()); setTitle(getTitleResource()); + rand = new Random(DateUtilities.now()); + noSync = getIntent().getBooleanExtra(EXTRA_DO_NOT_SYNC, false); facebook = new Facebook(APP_ID); @@ -233,6 +238,7 @@ public class ActFmLoginActivity extends Activity implements AuthListener { isNew.set(!isNew.get()); int nameIndex = body.indexOfChild(name); int visibility = isNew.get() ? View.VISIBLE : View.GONE; + int passwordVisibility = isNew.get() ? View.GONE : View.VISIBLE; toggleNew.setText(isNew.get() ? R.string.actfm_ALA_pw_returning : R.string.actfm_ALA_pw_new); dialog.get().setTitle( @@ -240,6 +246,12 @@ public class ActFmLoginActivity extends Activity implements AuthListener { : R.string.actfm_ALA_login_title); body.getChildAt(nameIndex - 1).setVisibility(visibility); body.getChildAt(nameIndex).setVisibility(visibility); + + EditText password = (EditText) body.getChildAt(nameIndex + 4); + String passwordText = isNew.get() ? generateRandomPassword() : ""; //$NON-NLS-1$ + password.setText(passwordText); + body.getChildAt(nameIndex + 3).setVisibility(passwordVisibility); + body.getChildAt(nameIndex + 4).setVisibility(passwordVisibility); } }); toggleNew.setText(R.string.actfm_ALA_pw_returning); @@ -259,6 +271,10 @@ public class ActFmLoginActivity extends Activity implements AuthListener { R.string.actfm_ALA_password_label); password.setTransformationMethod(new PasswordTransformationMethod()); + password.setText(generateRandomPassword()); + body.getChildAt(body.indexOfChild(password) - 1).setVisibility(View.GONE); + password.setVisibility(View.GONE); + dialog.set(new AlertDialog.Builder(ActFmLoginActivity.this).setView( body).setIcon(R.drawable.icon_32).setTitle( R.string.actfm_ALA_signup_title).setPositiveButton( @@ -282,6 +298,16 @@ public class ActFmLoginActivity extends Activity implements AuthListener { } }; + private String generateRandomPassword() { + String acceptable = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*(),."; //$NON-NLS-1$ + char[] chars = new char[8]; + for (int i = 0; i < chars.length; i++) { + char r = acceptable.charAt(rand.nextInt(acceptable.length())); + chars[i] = r; + } + return new String(chars); + } + private EditText addEditField(LinearLayout body, int hint) { TextView label = new TextView(ActFmLoginActivity.this); label.setText(hint);