diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml
index 10210c842..8f70454b9 100644
--- a/astrid/AndroidManifest.xml
+++ b/astrid/AndroidManifest.xml
@@ -426,12 +426,7 @@
android:theme="@style/Theme" />
-
-
-
-
-
+ android:theme="@style/Theme" />
diff --git a/astrid/common-src/com/facebook/android/LoginButton.java b/astrid/common-src/com/facebook/android/LoginButton.java
index 0c3f0cf12..41ec94e91 100644
--- a/astrid/common-src/com/facebook/android/LoginButton.java
+++ b/astrid/common-src/com/facebook/android/LoginButton.java
@@ -27,6 +27,8 @@ import com.facebook.android.Facebook.DialogListener;
public class LoginButton extends Button {
+ public static final int REQUEST_CODE_FACEBOOK = 21421;
+
private Facebook mFb;
private AuthListener mListener;
private String[] mPermissions;
@@ -61,7 +63,7 @@ public class LoginButton extends Button {
private final class ButtonOnClickListener implements OnClickListener {
public void onClick(View arg0) {
- mFb.authorize(mActivity, mPermissions,
+ mFb.authorize(mActivity, mPermissions, REQUEST_CODE_FACEBOOK,
new LoginDialogListener());
}
}
diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java
index 0d2354f28..cbfccf886 100644
--- a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java
+++ b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmLoginActivity.java
@@ -23,16 +23,24 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
+import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
+import android.app.AlertDialog;
import android.app.ProgressDialog;
+import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.PixelFormat;
+import android.os.Build;
import android.os.Bundle;
+import android.text.method.PasswordTransformationMethod;
import android.util.Log;
import android.view.View;
+import android.view.View.OnClickListener;
import android.view.WindowManager;
+import android.widget.EditText;
+import android.widget.LinearLayout;
import android.widget.TextView;
import com.facebook.android.AsyncFacebookRunner;
@@ -42,6 +50,8 @@ import com.facebook.android.Facebook;
import com.facebook.android.FacebookError;
import com.facebook.android.LoginButton;
import com.facebook.android.Util;
+import com.google.android.googlelogin.GoogleLoginServiceConstants;
+import com.google.android.googlelogin.GoogleLoginServiceHelper;
import com.timsu.astrid.C2DMReceiver;
import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired;
@@ -51,6 +61,7 @@ import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.sync.ActFmInvoker;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
+import com.todoroo.astrid.gtasks.auth.ModernAuthManager;
import com.todoroo.astrid.service.AstridDependencyInjector;
import com.todoroo.astrid.service.TaskService;
@@ -75,6 +86,8 @@ public class ActFmLoginActivity extends Activity implements AuthListener {
// --- ui initialization
+ private static final int REQUEST_CODE_GOOGLE = 1;
+
static {
AstridDependencyInjector.initialize();
}
@@ -92,8 +105,8 @@ public class ActFmLoginActivity extends Activity implements AuthListener {
super.onCreate(savedInstanceState);
ContextManager.setContext(this);
- setContentView(R.layout.sharing_login_activity);
- setTitle(R.string.sharing_SLA_title);
+ setContentView(R.layout.actfm_login_activity);
+ setTitle(R.string.actfm_ALA_title);
noSync = getIntent().getBooleanExtra(EXTRA_DO_NOT_SYNC, false);
@@ -108,34 +121,101 @@ public class ActFmLoginActivity extends Activity implements AuthListener {
"publish_stream"
});
+ findViewById(R.id.pw_signup).setOnClickListener(signUpListener);
+ findViewById(R.id.pw_login).setOnClickListener(loginListener);
+
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
setResult(RESULT_CANCELED);
}
- // --- facebook handler
+ // --- event handler
- @SuppressWarnings("nls")
- @Override
- protected void onActivityResult(int requestCode, int resultCode,
- Intent data) {
- String error = data.getStringExtra("error");
- if (error == null) {
- error = data.getStringExtra("error_type");
+ private final OnClickListener signUpListener = new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ LinearLayout body = new LinearLayout(ActFmLoginActivity.this);
+ body.setOrientation(LinearLayout.VERTICAL);
+ body.setPadding(10, 0, 10, 0);
+
+ final EditText name = addEditField(body, R.string.actfm_ALA_name_label);
+
+ final EditText email = addEditField(body, R.string.actfm_ALA_email_label);
+ getCredentials(new OnGetCredentials() {
+ @Override
+ public void getCredentials(String[] accounts) {
+ if(accounts != null && accounts.length > 0)
+ email.setText(accounts[0]);
+ }
+ });
+
+ final EditText password = addEditField(body, R.string.actfm_ALA_password_label);
+ password.setTransformationMethod(new PasswordTransformationMethod());
+
+ new AlertDialog.Builder(ActFmLoginActivity.this)
+ .setTitle(R.string.actfm_ALA_signup_title)
+ .setView(body)
+ .setIcon(R.drawable.icon_32)
+ .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ authenticate(email.getText().toString(), name.getText().toString(),
+ ActFmInvoker.PROVIDER_PASSWORD, password.getText().toString());
+ }
+ })
+ .setNegativeButton(android.R.string.cancel, null)
+ .show().setOwnerActivity(ActFmLoginActivity.this);
}
- String token = data.getStringExtra("access_token");
- if(error != null) {
- onFBAuthFail(error);
- } else if(token == null) {
- onFBAuthFail("Something went wrong! Please try again.");
- } else {
- facebook.setAccessToken(token);
- onFBAuthSucceed();
+ };
+
+ private final OnClickListener loginListener = new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ LinearLayout body = new LinearLayout(ActFmLoginActivity.this);
+ body.setOrientation(LinearLayout.VERTICAL);
+ body.setPadding(10, 0, 10, 0);
+
+ final EditText email = addEditField(body, R.string.actfm_ALA_username_email_label);
+ getCredentials(new OnGetCredentials() {
+ @Override
+ public void getCredentials(String[] accounts) {
+ if(accounts != null && accounts.length > 0)
+ email.setText(accounts[0]);
+ }
+ });
+
+ final EditText password = addEditField(body, R.string.actfm_ALA_password_label);
+ password.setTransformationMethod(new PasswordTransformationMethod());
+
+ new AlertDialog.Builder(ActFmLoginActivity.this)
+ .setTitle(R.string.actfm_ALA_login_title)
+ .setView(body)
+ .setIcon(R.drawable.icon_32)
+ .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ authenticate(email.getText().toString(), null,
+ ActFmInvoker.PROVIDER_PASSWORD, password.getText().toString());
+ }
+ })
+ .setNegativeButton(android.R.string.cancel, null)
+ .show().setOwnerActivity(ActFmLoginActivity.this);
}
- errors.setVisibility(View.GONE);
+ };
+
+ private EditText addEditField(LinearLayout body, int hint) {
+ TextView label = new TextView(ActFmLoginActivity.this);
+ label.setText(hint);
+ body.addView(label);
+ EditText field = new EditText(ActFmLoginActivity.this);
+ field.setHint(hint);
+ body.addView(field);
+ return field;
}
+ // --- facebook handler
+
public void onFBAuthSucceed() {
createUserAccountFB();
}
@@ -150,9 +230,7 @@ public class ActFmLoginActivity extends Activity implements AuthListener {
// do nothing
}
- // --- astrid social handler
-
- ProgressDialog progressDialog;
+ private ProgressDialog progressDialog;
/**
* Create user account via FB
@@ -165,7 +243,6 @@ public class ActFmLoginActivity extends Activity implements AuthListener {
private class SLARequestListener implements RequestListener {
- @SuppressWarnings("nls")
@Override
public void onComplete(String response, Object state) {
JSONObject json;
@@ -174,49 +251,15 @@ public class ActFmLoginActivity extends Activity implements AuthListener {
String name = json.getString("name"); //$NON-NLS-1$
String email = json.getString("email"); //$NON-NLS-1$
- JSONObject result = actFmInvoker.authenticate(email, name, ActFmInvoker.PROVIDER_FACEBOOK,
+ authenticate(email, name, ActFmInvoker.PROVIDER_FACEBOOK,
facebook.getAccessToken());
-
- String token = actFmInvoker.getToken();
- actFmPreferenceService.setToken(token);
-
- if(Preferences.getStringValue(R.string.actfm_APr_interval_key) == null)
- Preferences.setStringFromInteger(R.string.actfm_APr_interval_key, 3600);
-
- Preferences.setLong(ActFmPreferenceService.PREF_USER_ID,
- result.optLong("id"));
- Preferences.setString(ActFmPreferenceService.PREF_NAME, result.optString("name"));
- Preferences.setString(ActFmPreferenceService.PREF_EMAIL, result.optString("email"));
- Preferences.setString(ActFmPreferenceService.PREF_PICTURE, result.optString("picture"));
-
- C2DMReceiver.register();
-
- progressDialog.dismiss();
- setResult(RESULT_OK);
- finish();
-
- if(!noSync) {
- synchronize();
- }
-
- } catch (Throwable e) {
+ } catch (FacebookError e) {
+ handleError(e);
+ } catch (JSONException e) {
handleError(e);
}
}
- private void handleError(final Throwable e) {
- progressDialog.dismiss();
- Log.e("astrid-sharing", "error-doing-sla", e); //$NON-NLS-1$ //$NON-NLS-2$
-
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- errors.setText(e.toString());
- errors.setVisibility(View.VISIBLE);
- }
- });
- }
-
@Override
public void onFacebookError(FacebookError e, Object state) {
handleError(e);
@@ -241,9 +284,100 @@ public class ActFmLoginActivity extends Activity implements AuthListener {
}
+ // --- utilities
+
+ @SuppressWarnings("nls")
+ public void authenticate(String email, String name, String provider, String secret) {
+ if(progressDialog == null)
+ progressDialog = DialogUtilities.progressDialog(this, getString(R.string.DLG_please_wait));
+
+ try {
+ JSONObject result = actFmInvoker.authenticate(email, name, provider, secret);
+ String token = actFmInvoker.getToken();
+ actFmPreferenceService.setToken(token);
+
+ if(Preferences.getStringValue(R.string.actfm_APr_interval_key) == null)
+ Preferences.setStringFromInteger(R.string.actfm_APr_interval_key, 3600);
+
+ Preferences.setLong(ActFmPreferenceService.PREF_USER_ID,
+ result.optLong("id"));
+ Preferences.setString(ActFmPreferenceService.PREF_NAME, result.optString("name"));
+ Preferences.setString(ActFmPreferenceService.PREF_EMAIL, result.optString("email"));
+ Preferences.setString(ActFmPreferenceService.PREF_PICTURE, result.optString("picture"));
+
+ C2DMReceiver.register();
+
+ setResult(RESULT_OK);
+ finish();
+
+ if(!noSync)
+ synchronize();
+ } catch (IOException e) {
+ handleError(e);
+ } finally {
+ DialogUtilities.dismissDialog(this, progressDialog);
+ }
+ }
+
+ private void handleError(final Throwable e) {
+ DialogUtilities.dismissDialog(this, progressDialog);
+ Log.e("astrid-sharing", "error-doing-sla", e); //$NON-NLS-1$ //$NON-NLS-2$
+
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ errors.setText(e.getMessage());
+ errors.setVisibility(View.VISIBLE);
+ }
+ });
+ }
+
public void synchronize() {
startService(new Intent(null, null,
this, ActFmBackgroundService.class));
}
+ // --- google account manager
+
+ @SuppressWarnings("nls")
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode,
+ Intent data) {
+ if(requestCode == REQUEST_CODE_GOOGLE){
+ String accounts[] = data.getExtras().getStringArray(GoogleLoginServiceConstants.ACCOUNTS_KEY);
+ credentialsListener.getCredentials(accounts);
+ } else if(requestCode == LoginButton.REQUEST_CODE_FACEBOOK) {
+ if(data == null)
+ return;
+
+ String error = data.getStringExtra("error");
+ if (error == null) {
+ error = data.getStringExtra("error_type");
+ }
+ String token = data.getStringExtra("access_token");
+ if(error != null) {
+ onFBAuthFail(error);
+ } else if(token == null) {
+ onFBAuthFail("Something went wrong! Please try again.");
+ } else {
+ facebook.setAccessToken(token);
+ onFBAuthSucceed();
+ }
+ errors.setVisibility(View.GONE);
+ }
+ }
+ public interface OnGetCredentials {
+ public void getCredentials(String[] accounts);
+ }
+
+ private OnGetCredentials credentialsListener;
+
+ public void getCredentials(OnGetCredentials onGetCredentials) {
+ credentialsListener = onGetCredentials;
+ if(Integer.parseInt(Build.VERSION.SDK) >= 7)
+ credentialsListener.getCredentials(ModernAuthManager.getAccounts(this));
+ else
+ GoogleLoginServiceHelper.getAccount(this, REQUEST_CODE_GOOGLE, false);
+ }
+
}
\ No newline at end of file
diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/ProjectDetailExposer.java b/astrid/plugin-src/com/todoroo/astrid/actfm/ProjectDetailExposer.java
deleted file mode 100644
index 912c1dfa7..000000000
--- a/astrid/plugin-src/com/todoroo/astrid/actfm/ProjectDetailExposer.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * See the file "LICENSE" for the full license governing this code.
- */
-package com.todoroo.astrid.actfm;
-
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
-import com.todoroo.astrid.api.AstridApiConstants;
-
-/**
- * Exposes Task Detail for notes
- *
- * @author Tim Su
- *
- */
-public class TagDataDetailExposer extends BroadcastReceiver {
-
- @Override
- public void onReceive(Context context, Intent intent) {
- long taskId = intent.getLongExtra(AstridApiConstants.EXTRAS_TASK_ID, -1);
- if(taskId == -1)
- return;
-
- String taskDetail = getTaskDetails(taskId);
- if(taskDetail == null)
- return;
-
- // transmit
- Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_DETAILS);
- broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, taskDetail);
- broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ADDON,
- ActFmPreferenceService.IDENTIFIER);
- broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId);
- context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
- }
-
- public String getTaskDetails(long id) {
- /*Task task = PluginServices.getTaskService().fetchById(id, Task.PROJECT_ID);
- if(task == null)
- return null;
- TagData tagData = PluginServices.getTagDataService().fetchById(task.getValue(Task.PROJECT_ID), TagData.TITLE);
- if(tagData == null)*/
- return null;
-
- // return " " + tagData.getValue(TagData.TITLE); //$NON-NLS-1$
- }
-
-}
diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/ProjectListActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/ProjectListActivity.java
deleted file mode 100644
index aa841ef9f..000000000
--- a/astrid/plugin-src/com/todoroo/astrid/actfm/ProjectListActivity.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/**
- * See the file "LICENSE" for the full license governing this code.
- */
-package com.todoroo.astrid.actfm;
-
-import java.util.concurrent.atomic.AtomicReference;
-
-import android.app.ListActivity;
-import android.content.Intent;
-import android.database.Cursor;
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.Window;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.ImageButton;
-import android.widget.ImageView;
-
-import com.timsu.astrid.R;
-import com.todoroo.andlib.data.TodorooCursor;
-import com.todoroo.andlib.service.Autowired;
-import com.todoroo.andlib.service.DependencyInjectionService;
-import com.todoroo.andlib.service.ExceptionService;
-import com.todoroo.andlib.sql.QueryTemplate;
-import com.todoroo.andlib.utility.DialogUtilities;
-import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
-import com.todoroo.astrid.actfm.sync.ActFmSyncService;
-import com.todoroo.astrid.activity.TaskListActivity;
-import com.todoroo.astrid.adapter.TagDataAdapter;
-import com.todoroo.astrid.dao.TagDataDao.TagDataCriteria;
-import com.todoroo.astrid.data.TagData;
-import com.todoroo.astrid.service.AstridDependencyInjector;
-import com.todoroo.astrid.service.TagDataService;
-import com.todoroo.astrid.service.StatisticsService;
-import com.todoroo.astrid.service.ThemeService;
-
-/**
- * Activity that displays a user's task lists and allows users
- * to filter their task list.
- *
- * @author Tim Su
- *
- */
-public class TagDataListActivity extends ListActivity implements OnItemClickListener {
-
- // --- constants
-
- private static final int REQUEST_LOG_IN = 1;
- private static final int REQUEST_SHOW_GOAL = 2;
-
- private static final int MENU_REFRESH_ID = Menu.FIRST + 0;
-
- // --- instance variables
-
- @Autowired ExceptionService exceptionService;
- @Autowired TagDataService tagDataService;
- @Autowired ActFmPreferenceService actFmPreferenceService;
- @Autowired ActFmSyncService actFmSyncService;
-
- protected TagDataAdapter adapter = null;
- protected AtomicReference queryTemplate = new AtomicReference();
-
- /* ======================================================================
- * ======================================================= initialization
- * ====================================================================== */
-
- static {
- AstridDependencyInjector.initialize();
- }
-
- /** Called when loading up the activity */
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- DependencyInjectionService.getInstance().inject(this);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.tagData_list_activity);
- ThemeService.applyTheme(this);
-
- if(!actFmPreferenceService.isLoggedIn()) {
- Intent login = new Intent(this, ActFmLoginActivity.class);
- login.putExtra(ActFmLoginActivity.EXTRA_DO_NOT_SYNC, true);
- startActivityForResult(login, REQUEST_LOG_IN);
- }
-
- initializeUIComponents();
- setUpList();
- refreshList(false);
- }
-
- @SuppressWarnings("nls")
- private void initializeUIComponents() {
- ((ImageButton) findViewById(R.id.extendedAddButton)).setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- DialogUtilities.okDialog(TagDataListActivity.this, "unsupported", null);
- }
- });
-
- ((ImageButton) findViewById(R.id.extendedAddButton)).setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- DialogUtilities.okDialog(TagDataListActivity.this, "unsupported", null);
- }
- });
-
- ((ImageView) findViewById(R.id.goals)).setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(TagDataListActivity.this, TaskListActivity.class);
- startActivity(intent);
- finish();
- }
- });
-
-
- }
-
- /**
- * Create options menu (displayed when user presses menu key)
- *
- * @return true if menu should be displayed
- */
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- if(menu.size() > 0)
- return true;
-
- MenuItem item;
-
- item = menu.add(Menu.NONE, MENU_REFRESH_ID, Menu.NONE,
- R.string.PLA_menu_refresh);
- item.setIcon(R.drawable.ic_menu_refresh);
-
- return true;
- }
-
- /* ======================================================================
- * ============================================================ lifecycle
- * ====================================================================== */
-
- @Override
- protected void onStart() {
- super.onStart();
- StatisticsService.sessionStart(this);
- StatisticsService.reportEvent("goal-list"); //$NON-NLS-1$
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- StatisticsService.sessionStop(this);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if(requestCode == REQUEST_LOG_IN) {
- if(resultCode == RESULT_CANCELED)
- finish();
- else
- refreshList(true);
- } else
- super.onActivityResult(requestCode, resultCode, data);
- }
-
- /* ======================================================================
- * ====================================================== populating list
- * ====================================================================== */
-
- /** Sets up the coach list adapter */
- protected void setUpList() {
- queryTemplate.set(new QueryTemplate().where(TagDataCriteria.isTeam()).toString());
- TodorooCursor currentCursor = tagDataService.fetchFiltered(queryTemplate.get(),
- null, TagData.PROPERTIES);
- startManagingCursor(currentCursor);
-
- adapter = new TagDataAdapter(this, R.layout.tagData_adapter_row,
- currentCursor, queryTemplate, false, null);
- setListAdapter(adapter);
-
- getListView().setOnItemClickListener(this);
- }
-
- /** refresh the list with latest data from the web */
- private void refreshList(boolean manual) {
- actFmSyncService.fetchTagDataDashboard(manual, new Runnable() {
- @Override
- public void run() {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- Cursor cursor = adapter.getCursor();
- cursor.requery();
- startManagingCursor(cursor);
- }
- });
- }
- });
- }
-
- /* ======================================================================
- * ============================================================== actions
- * ====================================================================== */
-
- @Override
- public void onItemClick(AdapterView> adapterView, View view, int position, long id) {
- Intent intent = new Intent(this, TagDataViewActivity.class);
- intent.putExtra(TagDataViewActivity.EXTRA_PROJECT_ID, id);
- startActivityForResult(intent, REQUEST_SHOW_GOAL);
- }
-
- @Override
- public boolean onMenuItemSelected(int featureId, final MenuItem item) {
-
- // handle my own menus
- switch (item.getItemId()) {
- case MENU_REFRESH_ID: {
- refreshList(true);
- return true;
- }
- }
-
- return false;
- }
-}
diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/ShowProjectExposer.java b/astrid/plugin-src/com/todoroo/astrid/actfm/ShowProjectExposer.java
deleted file mode 100644
index c683d863f..000000000
--- a/astrid/plugin-src/com/todoroo/astrid/actfm/ShowProjectExposer.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.todoroo.astrid.actfm;
-
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-
-import com.timsu.astrid.R;
-import com.todoroo.andlib.service.ContextManager;
-import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
-import com.todoroo.astrid.api.AstridApiConstants;
-import com.todoroo.astrid.api.TaskAction;
-import com.todoroo.astrid.core.PluginServices;
-import com.todoroo.astrid.data.TagData;
-
-public class ShowTagDataExposer extends BroadcastReceiver {
-
- private static final String FILTER_ACTION = "com.todoroo.astrid.SHOW_PROJECT"; //$NON-NLS-1$
-
- @Override
- public void onReceive(Context context, Intent intent) {
- ContextManager.setContext(context);
- long taskId = intent.getLongExtra(AstridApiConstants.EXTRAS_TASK_ID, -1);
- if(taskId == -1)
- return;
-
- TagData tagData = PluginServices.getTagDataService().getTagData(taskId,
- TagData.ID, TagData.TITLE);
- if(tagData == null)
- return;
-
- if(AstridApiConstants.BROADCAST_REQUEST_ACTIONS.equals(intent.getAction())) {
- final String label = tagData.getValue(TagData.TITLE);
- final Drawable drawable = context.getResources().getDrawable(R.drawable.tango_users);
- Intent newIntent = new Intent(FILTER_ACTION);
- newIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId);
- Bitmap icon = ((BitmapDrawable)drawable).getBitmap();
- TaskAction action = new TaskAction(label,
- PendingIntent.getBroadcast(context, (int)taskId, newIntent, 0), icon);
-
- // transmit
- Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_ACTIONS);
- broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ADDON, ActFmPreferenceService.IDENTIFIER);
- broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, action);
- broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId);
- context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
- } else if(FILTER_ACTION.equals(intent.getAction())) {
- Intent launchIntent = new Intent(context, TagDataViewActivity.class);
- launchIntent.putExtra(TagDataViewActivity.EXTRA_PROJECT_ID, tagData.getId());
- ContextManager.getContext().startActivity(launchIntent);
- }
- }
-
-}
diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TaskFields.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TaskFields.java
deleted file mode 100644
index 9a564891a..000000000
--- a/astrid/plugin-src/com/todoroo/astrid/actfm/TaskFields.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.todoroo.astrid.actfm;
-
-import com.todoroo.andlib.data.Property.IntegerProperty;
-import com.todoroo.andlib.data.Property.LongProperty;
-import com.todoroo.andlib.data.Property.StringProperty;
-import com.todoroo.astrid.data.Metadata;
-
-/**
- * Metadata entry for a task shared with astrid.com
- *
- * @author Tim Su
- *
- */
-public class TaskFields {
-
- /** metadata key */
- public static final String METADATA_KEY = "actfm"; //$NON-NLS-1$
-
- /** remote id*/
- public static final LongProperty REMOTE_ID = new LongProperty(Metadata.TABLE, Metadata.VALUE2.name);
-
- /** goal id */
- public static final LongProperty GOAL_ID = new LongProperty(Metadata.TABLE, Metadata.VALUE2.name);
-
- /** user id */
- public static final LongProperty USER_ID = new LongProperty(Metadata.TABLE, Metadata.VALUE3.name);
-
- /** user */
- public static final StringProperty USER = Metadata.VALUE4;
-
- /** comment count */
- public static final IntegerProperty COMMENT_COUNT = new IntegerProperty(Metadata.TABLE,
- Metadata.VALUE4.name);
-
-}
diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java
index e2e4ab2ed..70eba973c 100644
--- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java
+++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java
@@ -30,6 +30,7 @@ public class ActFmInvoker {
public static final String PROVIDER_FACEBOOK = "facebook";
public static final String PROVIDER_GOOGLE= "google";
+ public static final String PROVIDER_PASSWORD = "password";
@Autowired private RestClient restClient;
diff --git a/astrid/res/drawable-hdpi/facebook.png b/astrid/res/drawable-hdpi/facebook.png
new file mode 100644
index 000000000..24d7f41d5
Binary files /dev/null and b/astrid/res/drawable-hdpi/facebook.png differ
diff --git a/astrid/res/drawable/sharing_gradient.xml b/astrid/res/drawable/astrid_com_gradient.xml
similarity index 100%
rename from astrid/res/drawable/sharing_gradient.xml
rename to astrid/res/drawable/astrid_com_gradient.xml
diff --git a/astrid/res/drawable/sharing_logo.png b/astrid/res/drawable/astrid_com_logo.png
similarity index 57%
rename from astrid/res/drawable/sharing_logo.png
rename to astrid/res/drawable/astrid_com_logo.png
index 8fd00da91..c8c8ce873 100644
Binary files a/astrid/res/drawable/sharing_logo.png and b/astrid/res/drawable/astrid_com_logo.png differ
diff --git a/astrid/res/drawable/facebook.png b/astrid/res/drawable/facebook.png
new file mode 100644
index 000000000..f0faf29a7
Binary files /dev/null and b/astrid/res/drawable/facebook.png differ
diff --git a/astrid/res/drawable/sharing_button.xml b/astrid/res/drawable/sharing_button.xml
deleted file mode 100644
index ec27f4ba2..000000000
--- a/astrid/res/drawable/sharing_button.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/astrid/res/drawable/sharing_button_focused.9.png b/astrid/res/drawable/sharing_button_focused.9.png
deleted file mode 100644
index e730ae885..000000000
Binary files a/astrid/res/drawable/sharing_button_focused.9.png and /dev/null differ
diff --git a/astrid/res/drawable/sharing_button_normal.9.png b/astrid/res/drawable/sharing_button_normal.9.png
deleted file mode 100644
index ab8d02ac8..000000000
Binary files a/astrid/res/drawable/sharing_button_normal.9.png and /dev/null differ
diff --git a/astrid/res/drawable/sharing_button_pressed.9.png b/astrid/res/drawable/sharing_button_pressed.9.png
deleted file mode 100644
index 90c2783a7..000000000
Binary files a/astrid/res/drawable/sharing_button_pressed.9.png and /dev/null differ
diff --git a/astrid/res/layout/sharing_login_activity.xml b/astrid/res/layout/actfm_login_activity.xml
similarity index 56%
rename from astrid/res/layout/sharing_login_activity.xml
rename to astrid/res/layout/actfm_login_activity.xml
index 481571401..91c207bd2 100644
--- a/astrid/res/layout/sharing_login_activity.xml
+++ b/astrid/res/layout/actfm_login_activity.xml
@@ -6,7 +6,7 @@
android:layout_height="fill_parent"
android:paddingLeft="4px"
android:paddingRight="4px"
- android:background="@drawable/sharing_gradient">
+ android:background="@drawable/astrid_com_gradient">
+ android:text="@string/actfm_ALA_body" />
@@ -40,7 +40,8 @@
android:scaleType="fitCenter"
android:paddingLeft="20dip"
android:paddingRight="20dip"
- android:src="@drawable/sharing_logo" />
+ android:layout_marginBottom="95dip"
+ android:src="@drawable/astrid_com_logo" />
+ android:text="@string/actfm_ALA_notice" />
+
+
+
+
-
+ android:textSize="16sp"
+ android:drawableLeft="@drawable/facebook"
+ android:text="@string/actfm_ALA_fb_login" />
+
diff --git a/astrid/res/values/strings-actfm.xml b/astrid/res/values/strings-actfm.xml
index 5462af37f..393344371 100644
--- a/astrid/res/values/strings-actfm.xml
+++ b/astrid/res/values/strings-actfm.xml
@@ -120,18 +120,41 @@
- Welcome to Astrid.com!
+ Welcome to Astrid.com!
- Astrid.com lets you access your tasks online,
- and share & delegate with others. Perfect for personal use, friends & family,
- or your work groups!
+ Astrid.com lets you access your tasks online,
+ share, and delegate with others. Perfect for personal use, friends, family, and coworkers!
-
- Sign in using Facebook
+
+ Login with Facebook
+
+
+ Login
+
+
+ Sign Up
+
+
+ Name
+
+
+ Email
+
+
+ Username / Email
+
+
+ Password
+
+
+ Create New Account
+
+
+ Login to Astrid.com
- We won\'t post messages or send
+ We promise not to post messages or send
e-mails without your permission.