diff --git a/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java b/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java index 9328831be..9bdcf9d1c 100755 --- a/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java @@ -19,20 +19,17 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; -import android.widget.FrameLayout; import android.widget.LinearLayout; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.UserActivityDao; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.TaskAttachment; import com.todoroo.astrid.data.UserActivity; import com.todoroo.astrid.files.AACRecordingActivity; import com.todoroo.astrid.files.FilesControlSet; -import com.todoroo.astrid.notes.EditNoteActivity; +import com.todoroo.astrid.notes.CommentsController; import com.todoroo.astrid.service.TaskDeleter; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.timers.TimerPlugin; @@ -45,7 +42,6 @@ import org.tasks.fragments.TaskEditControlSetFragmentManager; import org.tasks.injection.ForActivity; import org.tasks.injection.InjectingFragment; import org.tasks.notifications.NotificationManager; -import org.tasks.preferences.ActivityPreferences; import org.tasks.ui.MenuColorizer; import org.tasks.ui.TaskEditControlFragment; @@ -59,14 +55,6 @@ import butterknife.ButterKnife; import static android.app.Activity.RESULT_OK; import static org.tasks.date.DateTimeUtils.newDateTime; -/** - * This activity is responsible for creating new tasks and editing existing - * ones. It saves a task when it is paused (screen rotated, back button pressed) - * as long as the task has a title. - * - * @author timsu - * - */ public final class TaskEditFragment extends InjectingFragment implements Toolbar.OnMenuItemClickListener { public interface TaskEditFragmentCallbackHandler { @@ -80,41 +68,24 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar return taskEditFragment; } - public static final String TAG_TASKEDIT_FRAGMENT = "taskedit_fragment"; //$NON-NLS-1$ + public static final String TAG_TASKEDIT_FRAGMENT = "taskedit_fragment"; + public static final String TOKEN_VALUES = "v"; - // --- bundle tokens - - /** - * Content Values to set - */ - public static final String TOKEN_VALUES = "v"; //$NON-NLS-1$ - - /** - * Task in progress (during orientation change) - */ - private static final String EXTRA_TASK = "extra_task"; //$NON-NLS-1$ + private static final String EXTRA_TASK = "extra_task"; private static final String EXTRA_IS_NEW_TASK = "extra_is_new_task"; - - // --- request codes - - public static final int REQUEST_CODE_RECORD = 30; // TODO: move this to file control set + private static final int REQUEST_CODE_RECORD = 30; // TODO: move this to file control set @Inject TaskService taskService; - @Inject MetadataDao metadataDao; @Inject UserActivityDao userActivityDao; @Inject TaskDeleter taskDeleter; @Inject NotificationManager notificationManager; - @Inject ActivityPreferences preferences; @Inject DialogBuilder dialogBuilder; @Inject @ForActivity Context context; @Inject TaskEditControlSetFragmentManager taskEditControlSetFragmentManager; + @Inject CommentsController commentsController; - // --- UI components - - private EditNoteActivity editNotes; - - @Bind(R.id.edit_body) LinearLayout body; @Bind(R.id.toolbar) Toolbar toolbar; + @Bind(R.id.comments) LinearLayout comments; // --- other instance variables @@ -124,30 +95,8 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar /** task model */ Task model = null; - private boolean showEditComments; private TaskEditFragmentCallbackHandler callback; - /* - * ====================================================================== - * ======================================================= initialization - * ====================================================================== - */ - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // if we were editing a task already, restore it - if (savedInstanceState != null) { - model = savedInstanceState.getParcelable(EXTRA_TASK); - isNewTask = savedInstanceState.getBoolean(EXTRA_IS_NEW_TASK); - } - - showEditComments = preferences.getBoolean(R.string.p_show_task_edit_comments, true); - - getActivity().setResult(RESULT_OK); - } - @Override public void onAttach(Activity activity) { super.onAttach(activity); @@ -155,18 +104,16 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar callback = (TaskEditFragmentCallbackHandler) activity; } - /* - * ====================================================================== - * ==================================================== UI initialization - * ====================================================================== - */ - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_task_edit, container, false); ButterKnife.bind(this, view); + if (savedInstanceState != null) { + model = savedInstanceState.getParcelable(EXTRA_TASK); + isNewTask = savedInstanceState.getBoolean(EXTRA_IS_NEW_TASK); + } + Drawable drawable = DrawableCompat.wrap(getResources().getDrawable(R.drawable.ic_save_24dp)); DrawableCompat.setTint(drawable, getResources().getColor(android.R.color.white)); toolbar.setNavigationIcon(drawable); @@ -185,14 +132,12 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar notificationManager.cancel(model.getId()); - if (!showEditComments) { - // TODO: hide comment bar - } + commentsController.initialize(model, comments); + commentsController.reloadView(); return view; } - @Override public boolean onMenuItemClick(MenuItem item) { AndroidUtilities.hideKeyboard(getActivity()); @@ -209,30 +154,6 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar return false; } - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - - // Load task data in background - new TaskEditBackgroundLoader().start(); - } - - private void instantiateEditNotes() { - if (showEditComments) { - editNotes = new EditNoteActivity(metadataDao, userActivityDao, taskService, this, model.getId()); - editNotes.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); - body.addView(editNotes); - } - } - - private void loadMoreContainer() { - if (editNotes == null) { - instantiateEditNotes(); - } else { - editNotes.loadViewForTaskID(model.getId()); - } - } - public Task stopTimer() { TimerPlugin.stopTimer(notificationManager, taskService, context, model); String elapsedTime = DateUtils.formatElapsedTime(model.getElapsedSeconds()); @@ -255,42 +176,12 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar return model; } - /** - * Initialize task edit page in the background - * - * @author Tim Su - * - */ - private class TaskEditBackgroundLoader extends Thread { - - @Override - public void run() { - AndroidUtilities.sleepDeep(500L); - - Activity activity = getActivity(); - if (activity == null) { - return; - } - - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - if (getActivity() != null) { - // todo: is this necessary? - loadMoreContainer(); - } - } - }); - } - } - /* * ====================================================================== * =============================================== model reading / saving * ====================================================================== */ - /** Save task model from values in UI components */ public void save() { List fragments = taskEditControlSetFragmentManager.getFragmentsInPersistOrder(); @@ -392,10 +283,6 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (editNotes == null) { - instantiateEditNotes(); - } - if (requestCode == REQUEST_CODE_RECORD && resultCode == RESULT_OK) { String recordedAudioPath = data.getStringExtra(AACRecordingActivity.RESULT_OUTFILE); String recordedAudioName = data.getStringExtra(AACRecordingActivity.RESULT_FILENAME); @@ -437,6 +324,6 @@ public final class TaskEditFragment extends InjectingFragment implements Toolbar userActivity.setPicture(picture); } userActivityDao.createNew(userActivity); - editNotes.reloadView(); + commentsController.reloadView(); } } diff --git a/src/main/java/com/todoroo/astrid/notes/EditNoteActivity.java b/src/main/java/com/todoroo/astrid/notes/CommentsController.java similarity index 72% rename from src/main/java/com/todoroo/astrid/notes/EditNoteActivity.java rename to src/main/java/com/todoroo/astrid/notes/CommentsController.java index 6d4d1b75e..fddbe9df9 100644 --- a/src/main/java/com/todoroo/astrid/notes/EditNoteActivity.java +++ b/src/main/java/com/todoroo/astrid/notes/CommentsController.java @@ -5,110 +5,73 @@ */ package com.todoroo.astrid.notes; -import android.app.Fragment; +import android.app.Activity; import android.content.Intent; -import android.database.sqlite.SQLiteException; import android.graphics.Color; import android.net.Uri; import android.text.Html; import android.text.Spanned; -import android.text.TextUtils; import android.text.format.DateUtils; import android.text.util.Linkify; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.TextView; import com.todoroo.andlib.data.Callback; import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.astrid.activity.TaskListActivity; import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.UserActivityDao; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.UserActivity; -import com.todoroo.astrid.service.TaskService; import org.tasks.R; +import org.tasks.preferences.Preferences; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; -import timber.log.Timber; +import javax.inject.Inject; import static org.tasks.files.FileHelper.getPathFromUri; import static org.tasks.files.ImageHelper.sampleBitmap; -public class EditNoteActivity extends LinearLayout { - - private Task task; +public class CommentsController { private final MetadataDao metadataDao; private final UserActivityDao userActivityDao; - private final TaskService taskService; private final ArrayList items = new ArrayList<>(); - private int commentItems = 10; - private final Fragment fragment; + private final Activity activity; + private Preferences preferences; - private final TaskListActivity activity; + private int commentItems = 10; + private Task task; + private ViewGroup commentsContainer; - public EditNoteActivity( - MetadataDao metadataDao, - UserActivityDao userActivityDao, - TaskService taskService, - Fragment fragment, - long t) { - super(fragment.getActivity()); + @Inject + public CommentsController(MetadataDao metadataDao, UserActivityDao userActivityDao, + Activity activity, Preferences preferences) { this.metadataDao = metadataDao; this.userActivityDao = userActivityDao; - this.taskService = taskService; - - this.fragment = fragment; - - this.activity = (TaskListActivity) fragment.getActivity(); - - setOrientation(VERTICAL); - - loadViewForTaskID(t); + this.activity = activity; + this.preferences = preferences; } - private void fetchTask(long id) { - task = taskService.fetchById(id, Task.NOTES, Task.ID, Task.UUID, Task.TITLE); + public void initialize(Task task, ViewGroup commentsContainer) { + this.task = task; + this.commentsContainer = commentsContainer; } - public void loadViewForTaskID(long t){ - try { - fetchTask(t); - } catch (SQLiteException e) { - Timber.e(e, e.getMessage()); - } - if(task == null) { + public void reloadView() { + if (!preferences.getBoolean(R.string.p_show_task_edit_comments, true)) { return; } - setUpInterface(); - reloadView(); - } - - // --- UI preparation - - private void setUpInterface() { - if(!TextUtils.isEmpty(task.getNotes())) { - TextView notes = new TextView(activity); - notes.setLinkTextColor(Color.rgb(100, 160, 255)); - notes.setTextSize(18); - notes.setText(task.getNotes()); - notes.setPadding(5, 10, 5, 10); - Linkify.addLinks(notes, Linkify.ALL); - } - } - public void reloadView() { items.clear(); - this.removeAllViews(); + commentsContainer.removeAllViews(); metadataDao.byTaskAndKey(task.getId(), NoteMetadata.METADATA_KEY, new Callback() { @Override public void apply(Metadata metadata) { @@ -137,8 +100,8 @@ public class EditNoteActivity extends LinearLayout { }); for (int i = 0; i < Math.min(items.size(), commentItems); i++) { - View notesView = this.getUpdateNotes(items.get(i), this); - this.addView(notesView); + View notesView = this.getUpdateNotes(items.get(i), commentsContainer); + commentsContainer.addView(notesView); } if (items.size() > commentItems) { @@ -154,19 +117,18 @@ public class EditNoteActivity extends LinearLayout { reloadView(); } }); - this.addView(loadMore); + commentsContainer.addView(loadMore); } } - public View getUpdateNotes(NoteOrUpdate note, ViewGroup parent) { - View convertView = activity.getLayoutInflater().inflate( - R.layout.comment_adapter_row, parent, false); + private View getUpdateNotes(NoteOrUpdate note, ViewGroup parent) { + View convertView = activity.getLayoutInflater().inflate(R.layout.comment_adapter_row, parent, false); bindView(convertView, note); return convertView; } /** Helper method to set the contents and visibility of each field */ - public synchronized void bindView(View view, NoteOrUpdate item) { + private void bindView(View view, NoteOrUpdate item) { // name final TextView nameView = (TextView)view.findViewById(R.id.title); { nameView.setText(item.title); @@ -183,20 +145,20 @@ public class EditNoteActivity extends LinearLayout { // picture final ImageView commentPictureView = (ImageView)view.findViewById(R.id.comment_picture); - setupImagePopupForCommentView(view, commentPictureView, item.commentBitmap, fragment); + setupImagePopupForCommentView(view, commentPictureView, item.commentBitmap, activity); } private static void setupImagePopupForCommentView(View view, ImageView commentPictureView, final Uri updateBitmap, - final Fragment fragment) { - if (updateBitmap != null) { //$NON-NLS-1$ + final Activity activity) { + if (updateBitmap != null) { commentPictureView.setVisibility(View.VISIBLE); - String path = getPathFromUri(fragment.getActivity(), updateBitmap); + String path = getPathFromUri(activity, updateBitmap); commentPictureView.setImageBitmap(sampleBitmap(path, commentPictureView.getLayoutParams().width, commentPictureView.getLayoutParams().height)); - view.setOnClickListener(new OnClickListener() { + view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - fragment.startActivity(new Intent(Intent.ACTION_VIEW) {{ + activity.startActivity(new Intent(Intent.ACTION_VIEW) {{ setDataAndType(updateBitmap, "image/*"); }}); } diff --git a/src/main/java/org/tasks/fragments/CommentBarFragment.java b/src/main/java/org/tasks/fragments/CommentBarFragment.java index ad4e49183..0c7b45c6d 100644 --- a/src/main/java/org/tasks/fragments/CommentBarFragment.java +++ b/src/main/java/org/tasks/fragments/CommentBarFragment.java @@ -16,6 +16,7 @@ import android.view.inputmethod.EditorInfo; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageView; +import android.widget.LinearLayout; import com.google.common.base.Strings; import com.todoroo.andlib.utility.AndroidUtilities; @@ -28,6 +29,7 @@ import org.tasks.activities.CameraActivity; import org.tasks.dialogs.DialogBuilder; import org.tasks.injection.InjectingFragment; import org.tasks.preferences.Device; +import org.tasks.preferences.Preferences; import java.util.ArrayList; import java.util.List; @@ -61,10 +63,12 @@ public class CommentBarFragment extends InjectingFragment { @Inject Activity activity; @Inject DialogBuilder dialogBuilder; @Inject Device device; + @Inject Preferences preferences; @Bind(R.id.commentButton) View commentButton; @Bind(R.id.commentField) EditText commentField; @Bind(R.id.picture) ImageView pictureButton; + @Bind(R.id.updatesFooter) LinearLayout commentBar; private CommentBarFragmentCallback callback; private Uri pendingCommentPicture = null; @@ -92,6 +96,11 @@ public class CommentBarFragment extends InjectingFragment { commentField.setHorizontallyScrolling(false); commentField.setMaxLines(Integer.MAX_VALUE); + + if (!preferences.getBoolean(R.string.p_show_task_edit_comments, true)) { + commentBar.setVisibility(View.GONE); + } + return view; } diff --git a/src/main/res/layout/fragment_task_edit.xml b/src/main/res/layout/fragment_task_edit.xml index 17c3253a8..59d75f49a 100644 --- a/src/main/res/layout/fragment_task_edit.xml +++ b/src/main/res/layout/fragment_task_edit.xml @@ -21,7 +21,6 @@ android:overScrollMode="never"> + +