From 4ddff4a3d04565f375cd29dfb9ee4829ae266a70 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Thu, 22 Sep 2011 17:56:23 -0700 Subject: [PATCH] New list view like iOS version. Header for members with filter by assigned to. Separate activities for settings and comments, with comments now having the ability to add pictures. New look for the header buttons. --- api/src/com/todoroo/astrid/data/Update.java | 4 + astrid/.classpath | 2 +- astrid/AndroidManifest.xml | 9 +- .../com/timsu/astrid/C2DMReceiver.java | 2 +- .../astrid/actfm/ActFmCameraModule.java | 144 ++++ .../astrid/actfm/TagSettingsActivity.java | 295 ++++++++ .../astrid/actfm/TagUpdatesActivity.java | 272 ++++++++ .../todoroo/astrid/actfm/TagViewActivity.java | 630 +++++------------- .../actfm/sync/ActFmPreferenceService.java | 2 +- .../astrid/actfm/sync/ActFmSyncService.java | 37 +- .../astrid/tags/FilterByTagExposer.java | 3 +- .../todoroo/astrid/tags/TagFilterExposer.java | 2 +- .../com/todoroo/astrid/tags/TagsPlugin.java | 6 +- astrid/res/drawable-hdpi/header_logo_new.png | Bin 0 -> 11855 bytes .../drawable/header_background_pressed.png | Bin 0 -> 2860 bytes astrid/res/drawable/header_button.xml | 27 + astrid/res/drawable/header_button_white.xml | 27 + astrid/res/drawable/header_logo_new.png | Bin 0 -> 7983 bytes .../res/drawable/header_settings_normal.png | Bin 0 -> 4106 bytes .../res/drawable/header_settings_pressed.png | Bin 0 -> 4912 bytes astrid/res/drawable/icn_arrow.png | Bin 0 -> 308 bytes astrid/res/drawable/icn_arrow_light.png | Bin 0 -> 293 bytes astrid/res/drawable/icn_arrow_over.png | Bin 0 -> 308 bytes astrid/res/drawable/icn_camera.png | Bin 0 -> 693 bytes astrid/res/drawable/icn_cmmt_off.png | Bin 0 -> 655 bytes astrid/res/drawable/icn_lists.png | Bin 0 -> 430 bytes astrid/res/drawable/icn_settings.png | Bin 0 -> 578 bytes astrid/res/drawable/ios_fabric_480.png | Bin 0 -> 48471 bytes astrid/res/drawable/ios_fabric_480_dark.png | Bin 0 -> 49113 bytes .../{header_tags.xml => members_arrow.xml} | 6 +- astrid/res/drawable/members_arrow_white.xml | 26 + astrid/res/layout/filter_list_activity.xml | 2 +- astrid/res/layout/tag_settings_activity.xml | 161 +++++ astrid/res/layout/tag_updates_activity.xml | 83 +++ astrid/res/layout/task_list_activity.xml | 124 +++- astrid/res/layout/task_list_body_tag_v2.xml | 65 ++ astrid/res/layout/update_adapter_row.xml | 120 ++-- astrid/res/values/attrs.xml | 4 + astrid/res/values/strings-actfm.xml | 9 + astrid/res/values/strings-core.xml | 7 + astrid/res/values/strings-tags.xml | 6 + astrid/res/values/styles.xml | 6 + .../astrid/activity/TaskListActivity.java | 19 +- .../todoroo/astrid/adapter/UpdateAdapter.java | 40 +- .../todoroo/astrid/ui/PeopleContainer.java | 4 +- 45 files changed, 1583 insertions(+), 561 deletions(-) create mode 100644 astrid/plugin-src/com/todoroo/astrid/actfm/ActFmCameraModule.java create mode 100644 astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java create mode 100644 astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesActivity.java create mode 100644 astrid/res/drawable-hdpi/header_logo_new.png create mode 100644 astrid/res/drawable/header_background_pressed.png create mode 100644 astrid/res/drawable/header_button.xml create mode 100644 astrid/res/drawable/header_button_white.xml create mode 100644 astrid/res/drawable/header_logo_new.png create mode 100644 astrid/res/drawable/header_settings_normal.png create mode 100644 astrid/res/drawable/header_settings_pressed.png create mode 100644 astrid/res/drawable/icn_arrow.png create mode 100644 astrid/res/drawable/icn_arrow_light.png create mode 100644 astrid/res/drawable/icn_arrow_over.png create mode 100644 astrid/res/drawable/icn_camera.png create mode 100644 astrid/res/drawable/icn_cmmt_off.png create mode 100644 astrid/res/drawable/icn_lists.png create mode 100644 astrid/res/drawable/icn_settings.png create mode 100644 astrid/res/drawable/ios_fabric_480.png create mode 100644 astrid/res/drawable/ios_fabric_480_dark.png rename astrid/res/drawable/{header_tags.xml => members_arrow.xml} (90%) create mode 100644 astrid/res/drawable/members_arrow_white.xml create mode 100644 astrid/res/layout/tag_settings_activity.xml create mode 100644 astrid/res/layout/tag_updates_activity.xml create mode 100644 astrid/res/layout/task_list_body_tag_v2.xml diff --git a/api/src/com/todoroo/astrid/data/Update.java b/api/src/com/todoroo/astrid/data/Update.java index 7abd2aabd..cdd5e1e23 100644 --- a/api/src/com/todoroo/astrid/data/Update.java +++ b/api/src/com/todoroo/astrid/data/Update.java @@ -86,6 +86,10 @@ public class Update extends RemoteModel { /** List of all properties for this model */ public static final Property[] PROPERTIES = generateProperties(Update.class); + // --- constants + + public static final String PICTURE_LOADING = ""; + // --- defaults /** Default values container */ diff --git a/astrid/.classpath b/astrid/.classpath index e7b64bf23..c7efb1be2 100644 --- a/astrid/.classpath +++ b/astrid/.classpath @@ -22,7 +22,7 @@ - + diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index 174c7de37..2bd71740e 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -321,6 +321,12 @@ + + + @@ -365,7 +371,8 @@ - + diff --git a/astrid/plugin-src/com/timsu/astrid/C2DMReceiver.java b/astrid/plugin-src/com/timsu/astrid/C2DMReceiver.java index e1a971b43..bd034e572 100644 --- a/astrid/plugin-src/com/timsu/astrid/C2DMReceiver.java +++ b/astrid/plugin-src/com/timsu/astrid/C2DMReceiver.java @@ -296,7 +296,7 @@ public class C2DMReceiver extends BroadcastReceiver { } FilterWithCustomIntent filter = (FilterWithCustomIntent)TagFilterExposer.filterFromTagData(context, tagData); - filter.customExtras.putString(TagViewActivity.EXTRA_START_TAB, "updates"); + //filter.customExtras.putString(TagViewActivity.EXTRA_START_TAB, "updates"); if(intent.hasExtra("activity_id")) { try { Update update = new Update(); diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmCameraModule.java b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmCameraModule.java new file mode 100644 index 000000000..957ae1d17 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/ActFmCameraModule.java @@ -0,0 +1,144 @@ +package com.todoroo.astrid.actfm; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.Environment; +import android.provider.MediaStore; +import android.widget.ArrayAdapter; + +import com.timsu.astrid.R; +import com.todoroo.andlib.utility.DateUtilities; + +public class ActFmCameraModule { + + protected static final int REQUEST_CODE_CAMERA = 1; + protected static final int REQUEST_CODE_PICTURE = 2; + + private static File lastTempFile = null; + + public interface ClearImageCallback { + public void clearImage(); + } + + public static void showPictureLauncher(final Activity activity, final ClearImageCallback clearImageOption) { + ArrayList options = new ArrayList(); + options.add(activity.getString(R.string.actfm_picture_camera)); + options.add(activity.getString(R.string.actfm_picture_gallery)); + + if (clearImageOption != null) { + options.add(activity.getString(R.string.actfm_picture_clear)); + } + ArrayAdapter adapter = new ArrayAdapter(activity, + android.R.layout.simple_spinner_dropdown_item, options.toArray(new String[options.size()])); + + DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() { + @SuppressWarnings("nls") + @Override + public void onClick(DialogInterface d, int which) { + if(which == 0) { + lastTempFile = getTempFile(activity); + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + if (lastTempFile != null) { + intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(lastTempFile)); + } + activity.startActivityForResult(intent, REQUEST_CODE_CAMERA); + } else if (which == 1) { + Intent intent = new Intent(Intent.ACTION_GET_CONTENT); + intent.setType("image/*"); + activity.startActivityForResult(Intent.createChooser(intent, + activity.getString(R.string.actfm_TVA_tag_picture)), REQUEST_CODE_PICTURE); + } else { + if (clearImageOption != null) + clearImageOption.clearImage(); + } + } + }; + + // show a menu of available options + new AlertDialog.Builder(activity) + .setAdapter(adapter, listener) + .show().setOwnerActivity(activity); + } + + @SuppressWarnings("nls") + private static File getTempFile(Activity activity) { + try { + String storageState = Environment.getExternalStorageState(); + if(storageState.equals(Environment.MEDIA_MOUNTED)) { + String path = Environment.getExternalStorageDirectory().getName() + File.separatorChar + "Android/data/" + activity.getPackageName() + "/files/"; + File photoFile = File.createTempFile("comment_pic_" + DateUtilities.now(), ".jpg", new File(path)); + return photoFile; + } + } catch (IOException e) { + return null; + } + return null; + } + + public interface CameraResultCallback { + public void handleCameraResult(Bitmap bitmap); + } + + private static Bitmap bitmapFromUri(Activity activity, Uri uri) { + String[] projection = { MediaStore.Images.Media.DATA }; + Cursor cursor = activity.managedQuery(uri, projection, null, null, null); + String path; + + if(cursor != null) { + try { + int column_index = cursor + .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + path = cursor.getString(column_index); + } finally { + cursor.close(); + } + } else { + path = uri.getPath(); + } + + return BitmapFactory.decodeFile(path); + } + + public static boolean activityResult(Activity activity, int requestCode, int resultCode, Intent data, + CameraResultCallback cameraResult) { + if(requestCode == ActFmCameraModule.REQUEST_CODE_CAMERA && resultCode == Activity.RESULT_OK) { + Bitmap bitmap; + if (data == null) { // large from camera + if (lastTempFile != null) { + bitmap = bitmapFromUri(activity, Uri.fromFile(lastTempFile)); + lastTempFile.deleteOnExit(); + lastTempFile = null; + } + else + bitmap = null; + } else + bitmap = data.getParcelableExtra("data"); //$NON-NLS-1$ + if(bitmap != null) { + activity.setResult(Activity.RESULT_OK); + cameraResult.handleCameraResult(bitmap); + } + return true; + } else if(requestCode == ActFmCameraModule.REQUEST_CODE_PICTURE && resultCode == Activity.RESULT_OK) { + Uri uri = data.getData(); + Bitmap bitmap = bitmapFromUri(activity, uri); + if(bitmap != null) { + activity.setResult(Activity.RESULT_OK); + cameraResult.handleCameraResult(bitmap); + } + return true; + } + return false; + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java new file mode 100644 index 000000000..62a7dbbe7 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java @@ -0,0 +1,295 @@ +package com.todoroo.astrid.actfm; + +import greendroid.widget.AsyncImageView; + +import java.io.IOException; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import android.app.Activity; +import android.content.Intent; +import android.graphics.Bitmap; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.Window; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.timsu.astrid.R; +import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.service.DependencyInjectionService; +import com.todoroo.andlib.utility.AndroidUtilities; +import com.todoroo.andlib.utility.DialogUtilities; +import com.todoroo.andlib.utility.Preferences; +import com.todoroo.astrid.actfm.ActFmCameraModule.CameraResultCallback; +import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; +import com.todoroo.astrid.actfm.sync.ActFmSyncService; +import com.todoroo.astrid.data.TagData; +import com.todoroo.astrid.service.StatisticsConstants; +import com.todoroo.astrid.service.StatisticsService; +import com.todoroo.astrid.service.TagDataService; +import com.todoroo.astrid.service.ThemeService; +import com.todoroo.astrid.tags.TagFilterExposer; +import com.todoroo.astrid.tags.TagService; +import com.todoroo.astrid.ui.PeopleContainer; +import com.todoroo.astrid.utility.Flags; +import com.todoroo.astrid.welcome.HelpInfoPopover; + +public class TagSettingsActivity extends Activity { + + protected static final int REQUEST_ACTFM_LOGIN = 3; + + private static final String MEMBERS_IN_PROGRESS = "members"; //$NON-NLS-1$ + + private TagData tagData; + + @Autowired TagDataService tagDataService; + + @Autowired ActFmSyncService actFmSyncService; + + @Autowired ActFmPreferenceService actFmPreferenceService; + + private PeopleContainer tagMembers; + private AsyncImageView picture; + private EditText tagName; + private CheckBox isSilent; + + boolean isNewTag = false; + + public TagSettingsActivity() { + DependencyInjectionService.getInstance().inject(this); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + requestWindowFeature(Window.FEATURE_NO_TITLE); + super.onCreate(savedInstanceState); + ThemeService.applyTheme(this); + setContentView(R.layout.tag_settings_activity); + tagData = getIntent().getParcelableExtra(TagViewActivity.EXTRA_TAG_DATA); + if (tagData == null) { + isNewTag = true; + tagData = new TagData(); + } + setUpSettingsPage(); + + if(savedInstanceState != null && savedInstanceState.containsKey(MEMBERS_IN_PROGRESS)) { + final String members = savedInstanceState.getString(MEMBERS_IN_PROGRESS); + new Thread(new Runnable() { + @Override + public void run() { + AndroidUtilities.sleepDeep(500); + runOnUiThread(new Runnable() { + @Override + public void run() { + updateMembers(members); + } + }); + } + }).start(); + } + showCollaboratorsPopover(); + } + + private void showCollaboratorsPopover() { + if (!Preferences.getBoolean(R.string.p_showed_collaborators_help, false)) { + View members = findViewById(R.id.members_container); + HelpInfoPopover.showPopover(this, members, R.string.help_popover_collaborators); + Preferences.setBoolean(R.string.p_showed_collaborators_help, true); + } + } + + protected void setUpSettingsPage() { + tagMembers = (PeopleContainer) findViewById(R.id.members_container); + tagName = (EditText) findViewById(R.id.tag_name); + picture = (AsyncImageView) findViewById(R.id.picture); + isSilent = (CheckBox) findViewById(R.id.tag_silenced); + + if(actFmPreferenceService.isLoggedIn()) { + picture.setVisibility(View.VISIBLE); + findViewById(R.id.listSettingsMore).setVisibility(View.VISIBLE); + } + + picture.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + ActFmCameraModule.showPictureLauncher(TagSettingsActivity.this, null); + } + }); + + findViewById(R.id.saveMembers).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + saveSettings(); + } + }); + + refreshSettingsPage(); + } + + private void saveSettings() { + setResult(RESULT_OK); + String oldName = tagData.getValue(TagData.NAME); + String newName = tagName.getText().toString(); + + if (TextUtils.isEmpty(newName)) { + return; + } + + boolean nameChanged = !oldName.equals(newName); + TagService service = TagService.getInstance(); + if (nameChanged) { + if (oldName.equalsIgnoreCase(newName)) { // Change the capitalization of a list manually + tagData.setValue(TagData.NAME, newName); + service.renameCaseSensitive(oldName, newName); + tagData.setFlag(TagData.FLAGS, TagData.FLAG_EMERGENT, false); + } else { // Rename list--check for existing name + newName = service.getTagWithCase(newName); + tagName.setText(newName); + if (!newName.equals(oldName)) { + tagData.setValue(TagData.NAME, newName); + service.rename(oldName, newName); + tagData.setFlag(TagData.FLAGS, TagData.FLAG_EMERGENT, false); + } else { + nameChanged = false; + } + } + } + + if(newName.length() > 0 && oldName.length() == 0) { + tagDataService.save(tagData); + //setUpNewTag(newName); + } + + JSONArray members = tagMembers.toJSONArray(); + if(members.length() > 0 && !actFmPreferenceService.isLoggedIn()) { + startActivityForResult(new Intent(this, ActFmLoginActivity.class), + REQUEST_ACTFM_LOGIN); + return; + } + + int oldMemberCount = tagData.getValue(TagData.MEMBER_COUNT); + if (members.length() > oldMemberCount) { + StatisticsService.reportEvent(StatisticsConstants.ACTFM_LIST_SHARED); + } + tagData.setValue(TagData.MEMBERS, members.toString()); + tagData.setValue(TagData.MEMBER_COUNT, members.length()); + tagData.setFlag(TagData.FLAGS, TagData.FLAG_SILENT, isSilent.isChecked()); + + if(actFmPreferenceService.isLoggedIn()) + Flags.set(Flags.TOAST_ON_SAVE); + else + Toast.makeText(this, R.string.tag_list_saved, Toast.LENGTH_LONG).show(); + + tagDataService.save(tagData); + + if (isNewTag) { + Intent intent = new Intent(this, TagViewActivity.class); + intent.putExtra(TagViewActivity.EXTRA_TAG_NAME, newName); + intent.putExtra(TagViewActivity.TOKEN_FILTER, TagFilterExposer.filterFromTagData(this, tagData)); + finish(); + startActivity(intent); + return; + } + + refreshSettingsPage(); + } + + @SuppressWarnings("nls") + private void refreshSettingsPage() { + tagName.setText(tagData.getValue(TagData.NAME)); + if (isNewTag) { + ((TextView)findViewById(R.id.listLabel)).setText(getString(R.string.tag_new_list)); + } else { + ((TextView) findViewById(R.id.listLabel)).setText(this.getString(R.string.tag_settings_title, tagData.getValue(TagData.NAME))); + } + picture.setUrl(tagData.getValue(TagData.PICTURE)); + setTitle(tagData.getValue(TagData.NAME)); + + TextView ownerLabel = (TextView) findViewById(R.id.tag_owner); + try { + if(tagData.getFlag(TagData.FLAGS, TagData.FLAG_EMERGENT)) { + ownerLabel.setText(String.format("<%s>", getString(R.string.actfm_TVA_tag_owner_none))); + } else if(tagData.getValue(TagData.USER_ID) == 0) { + ownerLabel.setText(Preferences.getStringValue(ActFmPreferenceService.PREF_NAME)); + } else { + JSONObject owner = new JSONObject(tagData.getValue(TagData.USER)); + ownerLabel.setText(owner.getString("name")); + } + } catch (JSONException e) { + Log.e("tag-view-activity", "json error refresh owner", e); + ownerLabel.setText(""); + System.err.println(tagData.getValue(TagData.USER)); + } + + String peopleJson = tagData.getValue(TagData.MEMBERS); + updateMembers(peopleJson); + } + + @SuppressWarnings("nls") + private void updateMembers(String peopleJson) { + tagMembers.removeAllViews(); + if(!TextUtils.isEmpty(peopleJson)) { + try { + JSONArray people = new JSONArray(peopleJson); + tagMembers.fromJSONArray(people); + } catch (JSONException e) { + System.err.println(peopleJson); + Log.e("tag-view-activity", "json error refresh members", e); + } + } + + tagMembers.addPerson(""); //$NON-NLS-1$ + } + + private void uploadTagPicture(final Bitmap bitmap) { + new Thread(new Runnable() { + @Override + public void run() { + try { + String url = actFmSyncService.setTagPicture(tagData.getValue(TagData.REMOTE_ID), bitmap); + tagData.setValue(TagData.PICTURE, url); + Flags.set(Flags.ACTFM_SUPPRESS_SYNC); + tagDataService.save(tagData); + } catch (IOException e) { + DialogUtilities.okDialog(TagSettingsActivity.this, e.toString(), null); + } + } + }).start(); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + if(tagMembers.getChildCount() > 1) { + JSONArray members = tagMembers.toJSONArray(); + outState.putString(MEMBERS_IN_PROGRESS, members.toString()); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + CameraResultCallback callback = new CameraResultCallback() { + @Override + public void handleCameraResult(Bitmap bitmap) { + picture.setImageBitmap(bitmap); + uploadTagPicture(bitmap); + } + }; + if (ActFmCameraModule.activityResult(this, requestCode, resultCode, data, callback)) { + // Handled + } else if(requestCode == REQUEST_ACTFM_LOGIN && resultCode == Activity.RESULT_OK) { + saveSettings(); + } else { + super.onActivityResult(requestCode, resultCode, data); + } + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesActivity.java new file mode 100644 index 000000000..7deb356d7 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagUpdatesActivity.java @@ -0,0 +1,272 @@ +package com.todoroo.astrid.actfm; + +import android.app.ListActivity; +import android.app.ProgressDialog; +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuItem; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnTouchListener; +import android.view.Window; +import android.view.inputmethod.EditorInfo; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.TextView.OnEditorActionListener; + +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.utility.DateUtilities; +import com.todoroo.andlib.utility.DialogUtilities; +import com.todoroo.astrid.actfm.ActFmCameraModule.CameraResultCallback; +import com.todoroo.astrid.actfm.ActFmCameraModule.ClearImageCallback; +import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; +import com.todoroo.astrid.actfm.sync.ActFmSyncService; +import com.todoroo.astrid.adapter.UpdateAdapter; +import com.todoroo.astrid.dao.UpdateDao; +import com.todoroo.astrid.data.TagData; +import com.todoroo.astrid.data.Task; +import com.todoroo.astrid.data.Update; +import com.todoroo.astrid.service.StatisticsConstants; +import com.todoroo.astrid.service.StatisticsService; +import com.todoroo.astrid.service.TagDataService; +import com.todoroo.astrid.service.ThemeService; +import com.todoroo.astrid.utility.Flags; + +public class TagUpdatesActivity extends ListActivity { + + private TagData tagData; + private UpdateAdapter updateAdapter; + private EditText addCommentField; + + private ImageButton pictureButton; + + private Bitmap picture = null; + + private static final int MENU_REFRESH_ID = Menu.FIRST; + + @Autowired ActFmPreferenceService actFmPreferenceService; + @Autowired TagDataService tagDataService; + @Autowired UpdateDao updateDao; + @Autowired ActFmSyncService actFmSyncService; + + public TagUpdatesActivity() { + DependencyInjectionService.getInstance().inject(this); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + requestWindowFeature(Window.FEATURE_NO_TITLE); + super.onCreate(savedInstanceState); + ThemeService.applyTheme(this); + setContentView(R.layout.tag_updates_activity); + tagData = getIntent().getParcelableExtra(TagViewActivity.EXTRA_TAG_DATA); + + OnTouchListener onTouch = new OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + v.requestFocusFromTouch(); + return false; + } + }; + + addCommentField = (EditText) findViewById(R.id.commentField); + addCommentField.setOnTouchListener(onTouch); + + setUpUpdateList(); + } + + protected void setUpUpdateList() { + ((TextView) findViewById(R.id.listLabel)).setText(this.getString(R.string.tag_updates_title, tagData.getValue(TagData.NAME))); + final ImageButton commentButton = (ImageButton) findViewById(R.id.commentButton); + addCommentField = (EditText) findViewById(R.id.commentField); + addCommentField.setOnEditorActionListener(new OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView view, int actionId, KeyEvent event) { + if(actionId == EditorInfo.IME_NULL && addCommentField.getText().length() > 0) { + addComment(); + return true; + } + return false; + } + }); + addCommentField.addTextChangedListener(new TextWatcher() { + @Override + public void afterTextChanged(Editable s) { + commentButton.setVisibility((s.length() > 0) ? View.VISIBLE : View.GONE); + } + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + // + } + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + // + } + }); + commentButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + addComment(); + } + }); + + final ClearImageCallback clearImage = new ClearImageCallback() { + @Override + public void clearImage() { + picture = null; + pictureButton.setImageResource(R.drawable.icn_camera); + } + }; + pictureButton = (ImageButton) findViewById(R.id.picture); + pictureButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (picture != null) + ActFmCameraModule.showPictureLauncher(TagUpdatesActivity.this, clearImage); + else + ActFmCameraModule.showPictureLauncher(TagUpdatesActivity.this, null); + } + }); + + refreshUpdatesList(); + } + + private void refreshUpdatesList() { + + if(!actFmPreferenceService.isLoggedIn() || tagData.getValue(Task.REMOTE_ID) <= 0) + return; + + if(updateAdapter == null) { + TodorooCursor currentCursor = tagDataService.getUpdates(tagData); + startManagingCursor(currentCursor); + + updateAdapter = new UpdateAdapter(this, R.layout.update_adapter_row, + currentCursor, false, null); + ((ListView)findViewById(android.R.id.list)).setAdapter(updateAdapter); + } else { + Cursor cursor = updateAdapter.getCursor(); + cursor.requery(); + startManagingCursor(cursor); + } + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + if(menu.size() > 0) + return true; + + MenuItem item; + if(actFmPreferenceService.isLoggedIn()) { + item = menu.add(Menu.NONE, MENU_REFRESH_ID, Menu.NONE, + R.string.ENA_refresh_comments); + item.setIcon(R.drawable.ic_menu_refresh); + } + + return true; + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + // handle my own menus + switch (item.getItemId()) { + + case MENU_REFRESH_ID: { + + final ProgressDialog progressDialog = DialogUtilities.progressDialog(this, getString(R.string.DLG_please_wait)); + actFmSyncService.fetchUpdatesForTag(tagData, true, new Runnable() { + @Override + public void run() { + runOnUiThread(new Runnable() { + @Override + public void run() { + refreshUpdatesList(); + DialogUtilities.dismissDialog(TagUpdatesActivity.this, progressDialog); + } + }); + } + }); + return true; + } + + default: return false; + } + } + + @SuppressWarnings("nls") + private void addComment() { + if(tagData.getValue(TagData.REMOTE_ID) == 0L) + return; + + Update update = new Update(); + update.setValue(Update.MESSAGE, addCommentField.getText().toString()); + update.setValue(Update.ACTION_CODE, "tag_comment"); + update.setValue(Update.USER_ID, 0L); + update.setValue(Update.TAGS, "," + tagData.getValue(TagData.REMOTE_ID) + ","); + update.setValue(Update.CREATION_DATE, DateUtilities.now()); + if (picture != null) { + update.setValue(Update.PICTURE, Update.PICTURE_LOADING); + } + Flags.set(Flags.ACTFM_SUPPRESS_SYNC); + updateDao.createNew(update); + + final long updateId = update.getId(); + new Thread() { + @Override + public void run() { + actFmSyncService.pushUpdate(updateId, picture); + } + }.start(); + addCommentField.setText(""); //$NON-NLS-1$ + pictureButton.setImageResource(R.drawable.icn_camera); + refreshUpdatesList(); + + StatisticsService.reportEvent(StatisticsConstants.ACTFM_TAG_COMMENT); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + CameraResultCallback callback = new CameraResultCallback() { + @Override + public void handleCameraResult(Bitmap bitmap) { + picture = bitmap; + pictureButton.setImageBitmap(picture); + } + }; + + if (ActFmCameraModule.activityResult(this, requestCode, resultCode, data, callback)) { + //Handled + } else { + super.onActivityResult(requestCode, resultCode, data); + } + } + + @Override + protected void onStop() { + StatisticsService.sessionStop(this); + super.onStop(); + } + + @Override + protected void onResume() { + super.onResume(); + StatisticsService.sessionStart(this); + } + + @Override + protected void onPause() { + super.onPause(); + StatisticsService.sessionPause(); + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java index c1619743b..067334f15 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java @@ -8,25 +8,15 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import android.app.Activity; -import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; -import android.database.Cursor; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.net.Uri; import android.os.Bundle; -import android.provider.MediaStore; -import android.text.Editable; import android.text.TextUtils; -import android.text.TextWatcher; +import android.util.DisplayMetrics; import android.util.Log; -import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; @@ -34,18 +24,10 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.ViewGroup; -import android.view.inputmethod.EditorInfo; -import android.widget.ArrayAdapter; -import android.widget.CheckBox; import android.widget.EditText; -import android.widget.ImageButton; -import android.widget.ListView; -import android.widget.TabHost; -import android.widget.TabHost.OnTabChangeListener; -import android.widget.TabWidget; +import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.TextView; -import android.widget.TextView.OnEditorActionListener; -import android.widget.Toast; import com.timsu.astrid.R; import com.todoroo.andlib.data.TodorooCursor; @@ -55,33 +37,25 @@ import com.todoroo.andlib.service.NotificationManager; import com.todoroo.andlib.service.NotificationManager.AndroidNotificationManager; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Query; -import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.Preferences; 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.UpdateAdapter; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.core.SortHelper; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; -import com.todoroo.astrid.dao.UpdateDao; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.data.Update; -import com.todoroo.astrid.service.StatisticsConstants; -import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.service.TagDataService; import com.todoroo.astrid.tags.TagFilterExposer; import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.tags.TagService.Tag; -import com.todoroo.astrid.ui.PeopleContainer; -import com.todoroo.astrid.utility.Flags; import com.todoroo.astrid.welcome.HelpInfoPopover; -public class TagViewActivity extends TaskListActivity implements OnTabChangeListener { +public class TagViewActivity extends TaskListActivity { private static final String LAST_FETCH_KEY = "tag-fetch-"; //$NON-NLS-1$ @@ -89,17 +63,12 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList public static final String EXTRA_TAG_NAME = "tag"; //$NON-NLS-1$ public static final String EXTRA_TAG_REMOTE_ID = "remoteId"; //$NON-NLS-1$ - public static final String EXTRA_START_TAB = "tab"; //$NON-NLS-1$ - public static final String EXTRA_NEW_TAG = "new"; //$NON-NLS-1$ - protected static final int MENU_REFRESH_ID = MENU_SYNC_ID; + public static final String EXTRA_TAG_DATA = "tagData"; //$NON-NLS-1$ - protected static final int REQUEST_CODE_CAMERA = 1; - protected static final int REQUEST_CODE_PICTURE = 2; - protected static final int REQUEST_ACTFM_LOGIN = 3; + protected static final int MENU_REFRESH_ID = MENU_SYNC_ID; - private static final String MEMBERS_IN_PROGRESS = "members"; //$NON-NLS-1$ - private static final String TAB_IN_PROGRESS = "tab"; //$NON-NLS-1$ + private static final int REQUEST_CODE_SETTINGS = 0; private TagData tagData; @@ -109,24 +78,16 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList @Autowired ActFmPreferenceService actFmPreferenceService; - @Autowired UpdateDao updateDao; - - private UpdateAdapter updateAdapter; - private PeopleContainer tagMembers; - private EditText addCommentField; - private AsyncImageView picture; - private EditText tagName; private View taskListView; - private CheckBox isSilent; - - private TabHost tabHost; - private TabWidget tabWidget; - private String[] tabLabels; private boolean dataLoaded = false; - private boolean updatesTabAdded = false; + private long currentId; + private JSONObject currentMember; + private Filter originalFilter; + + //private ImageAdapter galleryAdapter; // --- UI initialization @@ -145,113 +106,69 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList } }; ((EditText) findViewById(R.id.quickAddText)).setOnTouchListener(onTouch); - ((EditText) findViewById(R.id.commentField)).setOnTouchListener(onTouch); - if(getIntent().hasExtra(EXTRA_START_TAB)) - tabHost.setCurrentTabByTag(getIntent().getStringExtra(EXTRA_START_TAB)); + View settingsContainer = findViewById(R.id.settingsContainer); + settingsContainer.setVisibility(View.VISIBLE); + + View settingsButton = findViewById(R.id.settings); + settingsButton.setOnClickListener(settingsListener); + + View membersEdit = findViewById(R.id.members_edit); + membersEdit.setOnClickListener(settingsListener); - if(savedInstanceState != null && savedInstanceState.containsKey(MEMBERS_IN_PROGRESS)) { - final String members = savedInstanceState.getString(MEMBERS_IN_PROGRESS); - new Thread(new Runnable() { + findViewById(R.id.listLabel).setPadding(0, 0, 0, 0); + + if (actFmPreferenceService.isLoggedIn()) { + View activityContainer = findViewById(R.id.activityContainer); + activityContainer.setVisibility(View.VISIBLE); + + ImageView activity = (ImageView) findViewById(R.id.activity); + activity.setOnClickListener(new View.OnClickListener() { @Override - public void run() { - AndroidUtilities.sleepDeep(500); - runOnUiThread(new Runnable() { - @Override - public void run() { - updateMembers(members); - } - }); + public void onClick(View v) { + Intent intent = new Intent(TagViewActivity.this, TagUpdatesActivity.class); + intent.putExtra(EXTRA_TAG_DATA, tagData); + startActivity(intent); } - }).start(); - } - if(savedInstanceState != null && savedInstanceState.containsKey(TAB_IN_PROGRESS)) { - tabHost.setCurrentTab(savedInstanceState.getInt(TAB_IN_PROGRESS)); + }); } - onNewIntent(getIntent()); + originalFilter = filter; + showListSettingsPopover(); } + private final OnClickListener settingsListener = new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(TagViewActivity.this, TagSettingsActivity.class); + intent.putExtra(EXTRA_TAG_DATA, tagData); + startActivityForResult(intent, REQUEST_CODE_SETTINGS); + } + }; + /* (non-Javadoc) * @see com.todoroo.astrid.activity.TaskListActivity#getListBody(android.view.ViewGroup) */ - @SuppressWarnings("nls") @Override protected View getListBody(ViewGroup root) { - ViewGroup parent = (ViewGroup) getLayoutInflater().inflate(R.layout.task_list_body_tag, root, false); - ViewGroup tabContent = (ViewGroup) parent.findViewById(android.R.id.tabcontent); - - tabLabels = getResources().getStringArray(R.array.TVA_tabs); - tabHost = (TabHost) parent.findViewById(android.R.id.tabhost); - tabWidget = (TabWidget) parent.findViewById(android.R.id.tabs); - tabHost.setup(); + ViewGroup parent = (ViewGroup) getLayoutInflater().inflate(R.layout.task_list_body_tag_v2, root, false); taskListView = super.getListBody(parent); if(actFmPreferenceService.isLoggedIn()) ((TextView)taskListView.findViewById(android.R.id.empty)).setText(R.string.DLG_loading); - tabContent.addView(taskListView); - - addTab(taskListView.getId(), "tasks", tabLabels[0]); - - tabHost.setOnTabChangedListener(this); + parent.addView(taskListView); return parent; } - private void addTab(int contentId, String id, String label) { - TabHost.TabSpec spec = tabHost.newTabSpec(id); - spec.setContent(contentId); - TextView textIndicator = (TextView) getLayoutInflater().inflate(R.layout.gd_tab_indicator, tabWidget, false); - textIndicator.setText(label); - spec.setIndicator(textIndicator); - tabHost.addTab(spec); - } - - private void showListTabPopover() { + private void showListSettingsPopover() { if (!Preferences.getBoolean(R.string.p_showed_list_settings_help, false)) { - View tabView = tabWidget.getChildTabViewAt(tabWidget.getTabCount() - 1); + View tabView = findViewById(R.id.settings); HelpInfoPopover.showPopover(this, tabView, R.string.help_popover_list_settings); Preferences.setBoolean(R.string.p_showed_list_settings_help, true); } } - private void showCollaboratorsPopover() { - if (!Preferences.getBoolean(R.string.p_showed_collaborators_help, false)) { - View members = findViewById(R.id.members_container); - HelpInfoPopover.showPopover(this, members, R.string.help_popover_collaborators); - Preferences.setBoolean(R.string.p_showed_collaborators_help, true); - } - } - - @SuppressWarnings("nls") - @Override - public void onTabChanged(String tabId) { - if(tabId.equals("tasks")) - findViewById(R.id.taskListFooter).setVisibility(View.VISIBLE); - else - findViewById(R.id.taskListFooter).setVisibility(View.GONE); - - if(tabId.equals("updates")) - findViewById(R.id.updatesFooter).setVisibility(View.VISIBLE); - else - findViewById(R.id.updatesFooter).setVisibility(View.GONE); - - if(tabId.equals("settings")) - findViewById(R.id.membersFooter).setVisibility(View.VISIBLE); - else - findViewById(R.id.membersFooter).setVisibility(View.GONE); - - showPopovers(); - } - - @SuppressWarnings("nls") - private void showPopovers() { - if(tabHost.getCurrentTabTag().equals("settings")) - showCollaboratorsPopover(); - else - showListTabPopover(); - } - /** * Create options menu (displayed when user presses menu key) * @@ -289,97 +206,6 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList return true; } - protected void setUpSettingsPage() { - addTab(R.id.tab_settings, "settings", tabLabels[2]); //$NON-NLS-1$ - tagMembers = (PeopleContainer) findViewById(R.id.members_container); - tagName = (EditText) findViewById(R.id.tag_name); - picture = (AsyncImageView) findViewById(R.id.picture); - isSilent = (CheckBox) findViewById(R.id.tag_silenced); - - if(actFmPreferenceService.isLoggedIn()) { - picture.setVisibility(View.VISIBLE); - findViewById(R.id.listSettingsMore).setVisibility(View.VISIBLE); - } - - picture.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View arg0) { - ArrayAdapter adapter = new ArrayAdapter(TagViewActivity.this, - android.R.layout.simple_spinner_dropdown_item, new String[] { - getString(R.string.actfm_picture_camera), - getString(R.string.actfm_picture_gallery), - }); - - DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() { - @SuppressWarnings("nls") - @Override - public void onClick(DialogInterface d, int which) { - if(which == 0) { - Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); - startActivityForResult(intent, REQUEST_CODE_CAMERA); - } else { - Intent intent = new Intent(Intent.ACTION_GET_CONTENT); - intent.setType("image/*"); - startActivityForResult(Intent.createChooser(intent, - getString(R.string.actfm_TVA_tag_picture)), REQUEST_CODE_PICTURE); - } - } - }; - - // show a menu of available options - new AlertDialog.Builder(TagViewActivity.this) - .setAdapter(adapter, listener) - .show().setOwnerActivity(TagViewActivity.this); - } - }); - - findViewById(R.id.saveMembers).setOnClickListener(new OnClickListener() { - @Override - public void onClick(View arg0) { - saveSettings(); - } - }); - - refreshSettingsPage(); - } - - protected void setUpUpdateList() { - final ImageButton quickAddButton = (ImageButton) findViewById(R.id.commentButton); - addCommentField = (EditText) findViewById(R.id.commentField); - addCommentField.setOnEditorActionListener(new OnEditorActionListener() { - @Override - public boolean onEditorAction(TextView view, int actionId, KeyEvent event) { - if(actionId == EditorInfo.IME_NULL && addCommentField.getText().length() > 0) { - addComment(); - return true; - } - return false; - } - }); - addCommentField.addTextChangedListener(new TextWatcher() { - @Override - public void afterTextChanged(Editable s) { - quickAddButton.setVisibility((s.length() > 0) ? View.VISIBLE : View.GONE); - } - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - // - } - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - // - } - }); - quickAddButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - addComment(); - } - }); - - refreshUpdatesList(); - } - // --- data loading @Override @@ -392,14 +218,10 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList String tag = getIntent().getStringExtra(EXTRA_TAG_NAME); long remoteId = getIntent().getLongExtra(EXTRA_TAG_REMOTE_ID, 0); - boolean newTag = getIntent().getBooleanExtra(EXTRA_NEW_TAG, false); - if(tag == null && remoteId == 0 && !newTag) + if(tag == null && remoteId == 0) return; - if(newTag) - getIntent().putExtra(TOKEN_FILTER, Filter.emptyFilter(getString(R.string.tag_new_list))); - TodorooCursor cursor = tagDataService.query(Query.select(TagData.PROPERTIES).where(Criterion.or(TagData.NAME.eqCaseInsensitive(tag), Criterion.and(TagData.REMOTE_ID.gt(0), TagData.REMOTE_ID.eq(remoteId))))); try { @@ -425,32 +247,9 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList } } - super.onNewIntent(intent); - setUpUpdateList(); - setUpSettingsPage(); - } - - private void refreshUpdatesList() { - if(!actFmPreferenceService.isLoggedIn() || tagData.getValue(Task.REMOTE_ID) <= 0) - return; + setUpMembersGallery(); - if(!updatesTabAdded ) { - updatesTabAdded = true; - addTab(R.id.tab_updates, "updates", tabLabels[1]); //$NON-NLS-1$ - } - - if(updateAdapter == null) { - TodorooCursor currentCursor = tagDataService.getUpdates(tagData); - startManagingCursor(currentCursor); - - updateAdapter = new UpdateAdapter(this, R.layout.update_adapter_row, - currentCursor, false, null); - ((ListView)findViewById(R.id.tab_updates)).setAdapter(updateAdapter); - } else { - Cursor cursor = updateAdapter.getCursor(); - cursor.requery(); - startManagingCursor(cursor); - } + super.onNewIntent(intent); } @Override @@ -465,48 +264,6 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList } } - @SuppressWarnings("nls") - private void refreshSettingsPage() { - tagName.setText(tagData.getValue(TagData.NAME)); - picture.setUrl(tagData.getValue(TagData.PICTURE)); - setTitle(getString(R.string.tag_FEx_name, tagData.getValue(TagData.NAME))); - - TextView ownerLabel = (TextView) findViewById(R.id.tag_owner); - try { - if(tagData.getFlag(TagData.FLAGS, TagData.FLAG_EMERGENT)) { - ownerLabel.setText(String.format("<%s>", getString(R.string.actfm_TVA_tag_owner_none))); - } else if(tagData.getValue(TagData.USER_ID) == 0) { - ownerLabel.setText(Preferences.getStringValue(ActFmPreferenceService.PREF_NAME)); - } else { - JSONObject owner = new JSONObject(tagData.getValue(TagData.USER)); - ownerLabel.setText(owner.getString("name")); - } - } catch (JSONException e) { - Log.e("tag-view-activity", "json error refresh owner", e); - ownerLabel.setText(""); - System.err.println(tagData.getValue(TagData.USER)); - } - - String peopleJson = tagData.getValue(TagData.MEMBERS); - updateMembers(peopleJson); - } - - @SuppressWarnings("nls") - private void updateMembers(String peopleJson) { - tagMembers.removeAllViews(); - if(!TextUtils.isEmpty(peopleJson)) { - try { - JSONArray people = new JSONArray(peopleJson); - tagMembers.fromJSONArray(people); - } catch (JSONException e) { - System.err.println(peopleJson); - Log.e("tag-view-activity", "json error refresh members", e); - } - } - - tagMembers.addPerson(""); //$NON-NLS-1$ - } - // --------------------------------------------------------- refresh data /** refresh the list with latest data from the web */ @@ -533,7 +290,6 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList public void run() { if(noRemoteId && tagData.getValue(TagData.REMOTE_ID) > 0) refreshData(manual, true); - refreshSettingsPage(); } }); @@ -555,6 +311,7 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList if(noRemoteId) return; + setUpMembersGallery(); actFmSyncService.fetchTasksForTag(tagData, manual, new Runnable() { @Override public void run() { @@ -575,12 +332,137 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList runOnUiThread(new Runnable() { @Override public void run() { - refreshUpdatesList(); + //refreshUpdatesList(); DialogUtilities.dismissDialog(TagViewActivity.this, progressDialog); } }); } }); + + } + + private void setUpMembersGallery() { + LinearLayout membersView = (LinearLayout)findViewById(R.id.shared_with); + membersView.setOnClickListener(settingsListener); + try { + String membersString = tagData.getValue(TagData.MEMBERS); + JSONArray members = new JSONArray(membersString); + if (members.length() > 0) { + membersView.setOnClickListener(null); + membersView.removeAllViews(); + for (int i = 0; i < members.length(); i++) { + JSONObject member = members.getJSONObject(i); + addImageForMember(membersView, member); + } + // Handle creator + if(tagData.getValue(TagData.USER_ID) != 0) { + JSONObject owner = new JSONObject(tagData.getValue(TagData.USER)); + addImageForMember(membersView, owner); + } + } + } catch (JSONException e) { + e.printStackTrace(); + } + findViewById(R.id.filter_assigned).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + resetAssignedFilter(); + } + }); + } + + @SuppressWarnings("nls") + private void addImageForMember(LinearLayout membersView, JSONObject member) { + DisplayMetrics displayMetrics = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + AsyncImageView image = new AsyncImageView(this); + image.setLayoutParams(new LinearLayout.LayoutParams((int)(50 * displayMetrics.density), + (int)(50 * displayMetrics.density))); + image.setDefaultImageResource(R.drawable.ic_contact_picture_2); + image.setScaleType(ImageView.ScaleType.FIT_XY); + try { + final long id = member.getLong("id"); + if (id == ActFmPreferenceService.userId()) + member = ActFmPreferenceService.thisUser(); + final JSONObject memberToUse = member; + + final String memberName = displayName(memberToUse); + if (memberToUse.has("picture")) { + image.setUrl(memberToUse.getString("picture")); + } + image.setOnClickListener(listenerForImage(memberToUse, id, memberName)); + } catch (JSONException e) { + System.err.println("Unable to create listener"); + e.printStackTrace(); + } + membersView.addView(image); + } + + private OnClickListener listenerForImage(final JSONObject member, final long id, final String displayName) { + return new OnClickListener() { + @Override + public void onClick(View v) { + if (currentId == id) { + // Back to all + resetAssignedFilter(); + } else { + // New filter + currentId = id; + currentMember = member; + Criterion assigned = Criterion.and(TaskCriteria.activeAndVisible(), Task.USER_ID.eq(id)); + filter = TagFilterExposer.filterFromTag(TagViewActivity.this, new Tag(tagData), assigned); + TextView filterByAssigned = (TextView) findViewById(R.id.filter_assigned); + filterByAssigned.setVisibility(View.VISIBLE); + filterByAssigned.setText(getString(R.string.actfm_TVA_filtered_by_assign, displayName)); + setUpTaskList(); + } + } + }; + } + + @Override + protected Intent getOnClickQuickAddIntent(Task t) { + Intent intent = super.getOnClickQuickAddIntent(t); + // Customize extras + return intent; + } + + @Override + protected Intent getOnLongClickQuickAddIntent(Task t) { + Intent intent = super.getOnClickQuickAddIntent(t); + // Customize extras + return intent; + } + + private void resetAssignedFilter() { + currentId = -1; + currentMember = null; + filter = originalFilter; + findViewById(R.id.filter_assigned).setVisibility(View.GONE); + setUpTaskList(); + } + + @SuppressWarnings("nls") + private String displayName(JSONObject user) { + String name = user.optString("name"); + if (!TextUtils.isEmpty(name) && !"null".equals(name)) { + name = name.trim(); + int index = name.indexOf(' '); + if (index > 0) { + return name.substring(0, index); + } else { + return name; + } + } else { + String email = user.optString("email"); + email = email.trim(); + int index = email.indexOf('@'); + if (index > 0) { + return email.substring(0, index); + } else { + return email; + } + } } // --- receivers @@ -597,7 +479,7 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList runOnUiThread(new Runnable() { @Override public void run() { - refreshUpdatesList(); + //refreshUpdatesList(); } }); refreshData(false, true); @@ -622,79 +504,6 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList unregisterReceiver(notifyReceiver); } - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - - if(tagMembers.getChildCount() > 1) { - JSONArray members = tagMembers.toJSONArray(); - outState.putString(MEMBERS_IN_PROGRESS, members.toString()); - } - outState.putInt(TAB_IN_PROGRESS, tabHost.getCurrentTab()); - } - - // --- events - - private void saveSettings() { - String oldName = tagData.getValue(TagData.NAME); - String newName = tagName.getText().toString(); - - boolean nameChanged = !oldName.equals(newName); - TagService service = TagService.getInstance(); - if (nameChanged) { - if (oldName.equalsIgnoreCase(newName)) { // Change the capitalization of a list manually - tagData.setValue(TagData.NAME, newName); - service.renameCaseSensitive(oldName, newName); - tagData.setFlag(TagData.FLAGS, TagData.FLAG_EMERGENT, false); - } else { // Rename list--check for existing name - newName = service.getTagWithCase(newName); - tagName.setText(newName); - if (!newName.equals(oldName)) { - tagData.setValue(TagData.NAME, newName); - service.rename(oldName, newName); - tagData.setFlag(TagData.FLAGS, TagData.FLAG_EMERGENT, false); - } else { - nameChanged = false; - } - } - } - - if(newName.length() > 0 && oldName.length() == 0) { - tagDataService.save(tagData); - setUpNewTag(newName); - } - - JSONArray members = tagMembers.toJSONArray(); - if(members.length() > 0 && !actFmPreferenceService.isLoggedIn()) { - startActivityForResult(new Intent(this, ActFmLoginActivity.class), - REQUEST_ACTFM_LOGIN); - return; - } - - int oldMemberCount = tagData.getValue(TagData.MEMBER_COUNT); - if (members.length() > oldMemberCount) { - StatisticsService.reportEvent(StatisticsConstants.ACTFM_LIST_SHARED); - } - tagData.setValue(TagData.MEMBERS, members.toString()); - tagData.setValue(TagData.MEMBER_COUNT, members.length()); - tagData.setFlag(TagData.FLAGS, TagData.FLAG_SILENT, isSilent.isChecked()); - - if(actFmPreferenceService.isLoggedIn()) - Flags.set(Flags.TOAST_ON_SAVE); - else - Toast.makeText(this, R.string.tag_list_saved, Toast.LENGTH_LONG).show(); - - tagDataService.save(tagData); - - if (nameChanged) { - filter = TagFilterExposer.filterFromTagData(this, tagData); - taskAdapter = null; - loadTaskListContent(true); - } - - refreshSettingsPage(); - } - @Override protected Task quickAddTask(String title, boolean selectNewTask) { if(tagData.getValue(TagData.NAME).length() == 0) { @@ -704,89 +513,18 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList return super.quickAddTask(title, selectNewTask); } - private void setUpNewTag(String name) { - filter = TagFilterExposer.filterFromTag(this, new Tag(name, 0, 0), - TaskCriteria.activeAndVisible()); - getIntent().putExtra(TOKEN_FILTER, filter); - super.onNewIntent(getIntent()); - } - - @SuppressWarnings("nls") @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if(requestCode == REQUEST_CODE_CAMERA && resultCode == RESULT_OK) { - Bitmap bitmap = data.getParcelableExtra("data"); - if(bitmap != null) { - picture.setImageBitmap(bitmap); - uploadTagPicture(bitmap); - } - } else if(requestCode == REQUEST_CODE_PICTURE && resultCode == RESULT_OK) { - Uri uri = data.getData(); - String[] projection = { MediaStore.Images.Media.DATA }; - Cursor cursor = managedQuery(uri, projection, null, null, null); - String path; - - if(cursor != null) { - try { - int column_index = cursor - .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); - cursor.moveToFirst(); - path = cursor.getString(column_index); - } finally { - cursor.close(); - } - } else { - path = uri.getPath(); - } - - Bitmap bitmap = BitmapFactory.decodeFile(path); - if(bitmap != null) { - picture.setImageBitmap(bitmap); - uploadTagPicture(bitmap); - } - } else if(requestCode == REQUEST_ACTFM_LOGIN && resultCode == Activity.RESULT_OK) { - saveSettings(); + if (requestCode == REQUEST_CODE_SETTINGS && resultCode == RESULT_OK) { + tagData = tagDataService.fetchById(tagData.getId(), TagData.PROPERTIES); + filter = TagFilterExposer.filterFromTagData(this, tagData); + taskAdapter = null; + loadTaskListContent(true); } else { super.onActivityResult(requestCode, resultCode, data); } } - private void uploadTagPicture(final Bitmap bitmap) { - new Thread(new Runnable() { - @Override - public void run() { - try { - String url = actFmSyncService.setTagPicture(tagData.getValue(TagData.REMOTE_ID), bitmap); - tagData.setValue(TagData.PICTURE, url); - Flags.set(Flags.ACTFM_SUPPRESS_SYNC); - tagDataService.save(tagData); - } catch (IOException e) { - DialogUtilities.okDialog(TagViewActivity.this, e.toString(), null); - } - } - }).start(); - } - - @SuppressWarnings("nls") - private void addComment() { - if(tagData.getValue(TagData.REMOTE_ID) == 0L) - return; - - Update update = new Update(); - update.setValue(Update.MESSAGE, addCommentField.getText().toString()); - update.setValue(Update.ACTION_CODE, "tag_comment"); - update.setValue(Update.USER_ID, 0L); - update.setValue(Update.TAGS, "," + tagData.getValue(TagData.REMOTE_ID) + ","); - update.setValue(Update.CREATION_DATE, DateUtilities.now()); - Flags.checkAndClear(Flags.ACTFM_SUPPRESS_SYNC); - updateDao.createNew(update); - - addCommentField.setText(""); //$NON-NLS-1$ - refreshUpdatesList(); - - StatisticsService.reportEvent(StatisticsConstants.ACTFM_TAG_COMMENT); - } - @Override public boolean onMenuItemSelected(int featureId, final MenuItem item) { // handle my own menus diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmPreferenceService.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmPreferenceService.java index fe48fa7c3..06657d395 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmPreferenceService.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmPreferenceService.java @@ -103,7 +103,7 @@ public class ActFmPreferenceService extends SyncProviderUtilities { } @SuppressWarnings("nls") - private synchronized static JSONObject thisUser() { + public synchronized static JSONObject thisUser() { if(user == null) { user = new JSONObject(); try { diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java index 659f9b723..fa782e448 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java @@ -152,7 +152,7 @@ public final class ActFmSyncService { new Thread(new Runnable() { @Override public void run() { - pushUpdateOnSave(model, setValues); + pushUpdateOnSave(model, setValues, null); } }).start(); } @@ -227,7 +227,7 @@ public final class ActFmSyncService { /** * Synchronize with server when data changes */ - public void pushUpdateOnSave(Update update, ContentValues values) { + public void pushUpdateOnSave(Update update, ContentValues values, Bitmap imageData) { if(!values.containsKey(Update.MESSAGE.name)) return; @@ -243,13 +243,22 @@ public final class ActFmSyncService { if(update.getValue(Update.TASK) > 0) { params.add("task_id"); params.add(update.getValue(Update.TASK)); } + MultipartEntity picture = null; + if (imageData != null) { + picture = buildPictureData(imageData); + } if(!checkForToken()) return; try { params.add("token"); params.add(token); - JSONObject result = actFmInvoker.invoke("comment_add", params.toArray(new Object[params.size()])); + JSONObject result; + if (picture == null) + result = actFmInvoker.invoke("comment_add", params.toArray(new Object[params.size()])); + else + result = actFmInvoker.post("comment_add", picture, params.toArray(new Object[params.size()])); update.setValue(Update.REMOTE_ID, result.optLong("id")); + update.setValue(Update.PICTURE, result.optString("picture")); updateDao.saveExisting(update); } catch (IOException e) { if (notPermanentError(e)) @@ -394,7 +403,16 @@ public final class ActFmSyncService { */ public void pushUpdate(long updateId) { Update update = updateDao.fetch(updateId, Update.PROPERTIES); - pushUpdateOnSave(update, update.getMergedValues()); + pushUpdateOnSave(update, update.getMergedValues(), null); + } + + /** + * Push complete update with new image to server (used for new comments) + */ + + public void pushUpdate(long updateId, Bitmap imageData) { + Update update = updateDao.fetch(updateId, Update.PROPERTIES); + pushUpdateOnSave(update, update.getMergedValues(), imageData); } /** @@ -745,6 +763,12 @@ public final class ActFmSyncService { if(!checkForToken()) return null; + MultipartEntity data = buildPictureData(bitmap); + JSONObject result = actFmInvoker.post("tag_save", data, "id", tagId, "token", token); + return result.optString("picture"); + } + + private MultipartEntity buildPictureData(Bitmap bitmap) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); if(bitmap.getWidth() > 512 || bitmap.getHeight() > 512) { float scale = Math.min(512f / bitmap.getWidth(), 512f / bitmap.getHeight()); @@ -755,8 +779,7 @@ public final class ActFmSyncService { byte[] bytes = baos.toByteArray(); MultipartEntity data = new MultipartEntity(); data.addPart("picture", new ByteArrayBody(bytes, "image/jpg", "image.jpg")); - JSONObject result = actFmInvoker.post("tag_save", data, "id", tagId, "token", token); - return result.optString("picture"); + return data; } // --- generic invokation @@ -892,7 +915,7 @@ public final class ActFmSyncService { model.setValue(Update.MESSAGE, ""); else model.setValue(Update.MESSAGE, json.getString("message")); - model.setValue(Update.PICTURE, json.getString("picture")); + model.setValue(Update.PICTURE, json.optString("picture", "")); model.setValue(Update.CREATION_DATE, readDate(json, "created_at")); String tagIds = "," + json.optString("tag_ids", "") + ","; model.setValue(Update.TAGS, tagIds); diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/FilterByTagExposer.java b/astrid/plugin-src/com/todoroo/astrid/tags/FilterByTagExposer.java index 3ab5b1d83..977fbc49a 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/FilterByTagExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/FilterByTagExposer.java @@ -95,8 +95,7 @@ public class FilterByTagExposer extends BroadcastReceiver { Tag tag = new Tag(tags.get(which), 0, 0); String listTitle = tag.tag; - String title = ContextManager.getString( - R.string.tag_FEx_name, tag.tag); + String title = tag.tag; Criterion criterion = TaskCriteria.activeAndVisible(); QueryTemplate tagTemplate = tag.queryTemplate(criterion); ContentValues contentValues = new ContentValues(); diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java index ee6cf87f3..7c3c20682 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java @@ -63,7 +63,7 @@ public class TagFilterExposer extends BroadcastReceiver { /** Create filter from new tag object */ @SuppressWarnings("nls") public static FilterWithCustomIntent filterFromTag(Context context, Tag tag, Criterion criterion) { - String title = context.getString(R.string.tag_FEx_name, tag.tag); + String title = tag.tag; QueryTemplate tagTemplate = tag.queryTemplate(criterion); ContentValues contentValues = new ContentValues(); contentValues.put(Metadata.KEY.name, TagService.KEY); diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagsPlugin.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagsPlugin.java index 8e61f8999..32d19a880 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagsPlugin.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagsPlugin.java @@ -4,7 +4,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import com.todoroo.astrid.actfm.TagViewActivity; +import com.todoroo.astrid.actfm.TagSettingsActivity; import com.todoroo.astrid.api.Addon; import com.todoroo.astrid.api.AstridApiConstants; @@ -29,9 +29,7 @@ public class TagsPlugin extends BroadcastReceiver { * @param activity */ public static Intent newTagDialog(Context context) { - Intent intent = new Intent(context, TagViewActivity.class); - intent.putExtra(TagViewActivity.EXTRA_NEW_TAG, true); - intent.putExtra(TagViewActivity.EXTRA_START_TAB, "settings"); //$NON-NLS-1$ + Intent intent = new Intent(context, TagSettingsActivity.class); return intent; } diff --git a/astrid/res/drawable-hdpi/header_logo_new.png b/astrid/res/drawable-hdpi/header_logo_new.png new file mode 100644 index 0000000000000000000000000000000000000000..b9b33f305482c7aab19c2db83c29f86ae6165f25 GIT binary patch literal 11855 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 JPDHLkV1gPVDLMcE literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/header_background_pressed.png b/astrid/res/drawable/header_background_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..010269fbdd1cbf4bceb67158b788ddd8fea23920 GIT binary patch literal 2860 zcmV+{3)A$8P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00012Nkl + + + + + + + + + diff --git a/astrid/res/drawable/header_button_white.xml b/astrid/res/drawable/header_button_white.xml new file mode 100644 index 000000000..59f7bf0d3 --- /dev/null +++ b/astrid/res/drawable/header_button_white.xml @@ -0,0 +1,27 @@ + + + + + + + + + + diff --git a/astrid/res/drawable/header_logo_new.png b/astrid/res/drawable/header_logo_new.png new file mode 100644 index 0000000000000000000000000000000000000000..8c89e7c4eecae005b8ff2a78a3c19c63ebb40fdf GIT binary patch literal 7983 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 literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/header_settings_normal.png b/astrid/res/drawable/header_settings_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..e9556e2cf82f18707d2d69954adacdeda4d7b255 GIT binary patch literal 4106 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 literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/header_settings_pressed.png b/astrid/res/drawable/header_settings_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..ce47af1e144b603627bd100ad9e9500c460a9c45 GIT binary patch literal 4912 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 AKL7v# literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/icn_arrow_light.png b/astrid/res/drawable/icn_arrow_light.png new file mode 100644 index 0000000000000000000000000000000000000000..e4c4b49957da5cac2e4365326468357dd88a7291 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz5!3HE(wfP(cQk(@Ik;M!Q+`=Ht$S`Y;1W-`2 z#5JNMI6tkVJh3R1!7(L2DOJHUH!(dmC^a#qvhZZ84N%c0PZ!6Kid#tu3rv4}c{!Ou zz`P+NOR`L^`BZjKe-*=oH%~`d!r2Vb>@`}I$0h@A~zkFS8%gx z7)}w?<cCrJUz&v&SR@$iPj51+3O?=+bUlNotDnm{r-UW|IsRaR literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/icn_arrow_over.png b/astrid/res/drawable/icn_arrow_over.png new file mode 100644 index 0000000000000000000000000000000000000000..db06ba2e0a983b2ff83411e8f4583d491c355559 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz5!3HE(wfP(cQk(@Ik;M!Q+`=Ht$S`Y;1W-`2 z#5JNMI6tkVJh3R1!7(L2DOJHUH!(dmC^a#qvhZZ84N%cRPZ!6Kid#tu3ycz6#5=rB z3Nr+;I@l!MoZ~64VI+`sqfWt$;SsmP8;?~Bdn|aG87J|kIwhTVH|}9Pb)SE0PYSbi zqr_})4P{D!jAJ=n*%65l^a$ zNVbcF6o<(d#*1u1i7(h!c*dwp?*CI|4n{v1A2zR)78&qol`;+05;TU A3;+NC literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/icn_camera.png b/astrid/res/drawable/icn_camera.png new file mode 100644 index 0000000000000000000000000000000000000000..15134ddfed953f436aef416f6e435798187e43ab GIT binary patch literal 693 zcmV;m0!safP)=X7WgM)>Il}ZW=1_}lO3ZiNt zFfd>sU|@ICxpKY4brL5H=t-8_`kFkS&v$1tc9Wa1I~}FP;wgY`4sBdAoI=}fHmj^_ z*n16754vY)PK63iVCwtR&*Sm%(p)=Fa!HERDx&c^mR`OC;VO3FbY9 z#VGu&02(18X*iSKQ)(pJP-r;=B`bR5_vj88w>I=Kj57(?)>(DS0PI!*#if2F7z{Zt z_?;}ut&E#FkrIzscX(yds4Z+xFBTKatRhxMA}~%;(!sF@`oGt-Hc&|{6+D+B#~kz= z!G}|6e58u+ZDCW%GIa}{)O6KVE6W(v>lC(gu?$)>(fm)+)XHsP18K7rmwa4G96_(J zlmHk7{iOmJAy-252DSVA?@zzTM~AfZXuuEHsQZ7{N5X~2Ab{Q$&@z!3XD$U*agRKkr{KN;HhzhyY}_&Zh8h%`S7!xVoB z1`RQG5O)F4L5YMM^d3kF#IJZtb;rPfnJg#6!U$<_C;=TLh%Co~<`_^kfufAz-LkKPI2BaLq;~<7n2MwVp`%ee=;4q(Q z;Nt85P>!Iz-?R?4IW6e(Ex+ZhPJDb8)vu@^+XWS5iG@ErpQhG<}1+5TqjW!yGZJFeERX1 z;rjERV7YbYK7cVg;NxIs$aNNF(3IrB>lhgUV6Q`v6~?^)#E$5_4i+pOxeq``IRcsW zpxy`2G68c%E=aTU-dBv=2eM##j2uD7pn(NIT!`)%oVg6Dun>fy4gY+Q>lXf00009a7bBm000XU z000XU0RWnu7ytkO8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0Xs=V zK~#9!Vqh2rsDKff^Z);UUm)cK#9TD8?=2%EV-+?DCNxL*(9jVeAPlre4X;C>Au(Wp z1&NIu5|4p+IxraD(#s)CIK)@c(-G()f|979>81fl+0)Seg+LE4K*=>gOJ~Bf5+h?e zknaFw?x%US1p<6gLw7Lh5MmQ6F7N<~$pHdDY(OoC7y{GQ2XcK4%mC+cIfhh+BmfP& zKtYHoP%A|GM{~_+_9Xxcf%pOi_RYtYU`chz0t&P518O-Y$cEbBlcM?3%~hX)LU4FCif Y0IW$(9k`>mb^rhX07*qoM6N<$g1B&-zW@LL literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/icn_settings.png b/astrid/res/drawable/icn_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..453ca706aca1f122e9c6b7f4e41a6f9729cc078d GIT binary patch literal 578 zcmV-I0=@l-P)1DYN@FJu ziSEu)1eXxYIPX21%kQqt4tpIarKG+H__<_RHeT#)bTGC0Z|xqR`OcW6Wv;wrK+!FC z97&@`Z?2X#gPSK?*7RCo!y5Q%L-EmUu+hMLp~ssZv%<}+bpUv?r`kN<#Q>{v1i`hI zb7T^k7ZKr7asv7?nvxK^#`noPAP~2QgaI8f0YzB`8-^6oXx{^y_CV{(k@izq5-Bw_oiyHZn_2+CQvxJu+;}t|>#&?N@*S03X=y20~cR Q)&Kwi07*qoM6N<$f>Q+eM*si- literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/ios_fabric_480.png b/astrid/res/drawable/ios_fabric_480.png new file mode 100644 index 0000000000000000000000000000000000000000..baf66d279a6ca3d74633d6873fd491d8c9e9a0fa GIT binary patch literal 48471 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

`9R6n#7>$mTOM_^b*c!iblR>NrU*GTV_joHW{1 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 bQ5*grgwmdB9DB`~00000NkvXXu0mjfn#o2l literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/ios_fabric_480_dark.png b/astrid/res/drawable/ios_fabric_480_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7383e3fe659e6efb83132097421b9bc815d4cf34 GIT binary patch literal 49113 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

a8CrxNG{@_Fab~(V-al`;cy*erAw_Ca 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 + android:state_focused="false" android:drawable="@drawable/icn_arrow_light" /> + android:drawable="@drawable/icn_arrow_over" /> + android:state_focused="true" android:drawable="@drawable/icn_arrow_over" /> diff --git a/astrid/res/drawable/members_arrow_white.xml b/astrid/res/drawable/members_arrow_white.xml new file mode 100644 index 000000000..254a95923 --- /dev/null +++ b/astrid/res/drawable/members_arrow_white.xml @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/astrid/res/layout/filter_list_activity.xml b/astrid/res/layout/filter_list_activity.xml index 98bd850ba..1bff57e37 100644 --- a/astrid/res/layout/filter_list_activity.xml +++ b/astrid/res/layout/filter_list_activity.xml @@ -29,7 +29,7 @@ android:layout_weight="100" android:gravity="center" android:paddingRight="50dip" - android:src="@drawable/header_logo" + android:src="@drawable/header_logo_new" android:scaleType="center"/> diff --git a/astrid/res/layout/tag_settings_activity.xml b/astrid/res/layout/tag_settings_activity.xml new file mode 100644 index 000000000..638eace6e --- /dev/null +++ b/astrid/res/layout/tag_settings_activity.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/astrid/res/layout/tag_updates_activity.xml b/astrid/res/layout/tag_updates_activity.xml new file mode 100644 index 000000000..d31e173f3 --- /dev/null +++ b/astrid/res/layout/tag_updates_activity.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/astrid/res/layout/task_list_activity.xml b/astrid/res/layout/task_list_activity.xml index adb17188b..420236637 100644 --- a/astrid/res/layout/task_list_activity.xml +++ b/astrid/res/layout/task_list_activity.xml @@ -7,44 +7,98 @@ style="@style/Content" android:orientation="vertical"> + - + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/astrid/res/layout/task_list_body_tag_v2.xml b/astrid/res/layout/task_list_body_tag_v2.xml new file mode 100644 index 000000000..99140c619 --- /dev/null +++ b/astrid/res/layout/task_list_body_tag_v2.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/astrid/res/layout/update_adapter_row.xml b/astrid/res/layout/update_adapter_row.xml index 202731a93..cc0953e4d 100644 --- a/astrid/res/layout/update_adapter_row.xml +++ b/astrid/res/layout/update_adapter_row.xml @@ -1,57 +1,77 @@ - - + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + - - - - - - - - - - + - + diff --git a/astrid/res/values/attrs.xml b/astrid/res/values/attrs.xml index b9890b0ed..1add6c5d6 100644 --- a/astrid/res/values/attrs.xml +++ b/astrid/res/values/attrs.xml @@ -4,6 +4,7 @@ + @@ -12,9 +13,12 @@ + + + \ No newline at end of file diff --git a/astrid/res/values/strings-actfm.xml b/astrid/res/values/strings-actfm.xml index facb009c9..fa581a001 100644 --- a/astrid/res/values/strings-actfm.xml +++ b/astrid/res/values/strings-actfm.xml @@ -27,6 +27,9 @@ Pick from Gallery + + + Clear Picture Refresh Lists @@ -48,6 +51,12 @@ List Settings + + + %s\'s tasks. Tap for all. + + + Private: tap to share this list Refresh diff --git a/astrid/res/values/strings-core.xml b/astrid/res/values/strings-core.xml index 4ad3f8e78..cc3aa2e67 100644 --- a/astrid/res/values/strings-core.xml +++ b/astrid/res/values/strings-core.xml @@ -59,6 +59,10 @@ Dismiss + OK + + Cancel + @@ -118,6 +122,9 @@ Add to this list... + + Tap to assign %s a task + Notifications are muted. You won\'t be able to hear Astrid! diff --git a/astrid/res/values/strings-tags.xml b/astrid/res/values/strings-tags.xml index 871365d31..a9188275c 100644 --- a/astrid/res/values/strings-tags.xml +++ b/astrid/res/values/strings-tags.xml @@ -85,5 +85,11 @@ We\'ve noticed that you have some lists that have the same name with different capitalizations. We think you may have intended them to be the same list, so we\'ve combined the duplicates. Don\'t worry though: the original lists are simply renamed with numbers (e.g. Shopping_1, Shopping_2). If you don\'t want this, you can simply delete the new combined list! + + + Settings: %s + + + Activity: %s diff --git a/astrid/res/values/styles.xml b/astrid/res/values/styles.xml index 1dfc16e5e..18f598d92 100644 --- a/astrid/res/values/styles.xml +++ b/astrid/res/values/styles.xml @@ -8,6 +8,7 @@ @null @drawable/background_gradient @drawable/header_background + @drawable/header_button #ffffffff #ff777777 #ff7777aa @@ -15,6 +16,8 @@ #ff777777 #ffcccccc @drawable/edit_titlebar + @drawable/ios_fabric_480_dark + @drawable/members_arrow