diff --git a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java index 1632c739e..816483613 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java +++ b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.java @@ -69,7 +69,6 @@ import org.tasks.ui.TaskListViewModel; public class MainActivity extends InjectingAppCompatActivity implements TaskListFragment.TaskListFragmentCallbackHandler, - PriorityControlSet.OnPriorityChanged, RemoteListFragment.OnListChanged, TimerControlSet.TimerControlSetCallback, DeadlineControlSet.DueDateChangeListener, @@ -450,11 +449,6 @@ public class MainActivity extends InjectingAppCompatActivity getSupportFragmentManager().findFragmentByTag(TaskEditFragment.TAG_TASKEDIT_FRAGMENT); } - @Override - public void onPriorityChange(int priority) { - getTaskEditFragment().onPriorityChange(priority); - } - @Override public Task stopTimer() { return getTaskEditFragment().stopTimer(); diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java index 019fda1cc..66949c692 100755 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java @@ -9,23 +9,34 @@ package com.todoroo.astrid.activity; import static com.google.common.base.Predicates.not; import static com.google.common.collect.Iterables.filter; import static com.todoroo.andlib.utility.AndroidUtilities.assertNotMainThread; +import static com.todoroo.andlib.utility.AndroidUtilities.atLeastQ; +import static com.todoroo.andlib.utility.DateUtilities.now; import static org.tasks.date.DateTimeUtils.newDateTime; import static org.tasks.files.FileHelper.copyToUri; import android.app.Activity; import android.content.Context; +import android.graphics.Paint; +import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.os.Bundle; import android.text.format.DateUtils; +import android.text.method.ScrollingMovementMethod; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; +import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.content.ContextCompat; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; +import com.google.android.material.appbar.AppBarLayout; +import com.google.common.base.Strings; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.api.Filter; @@ -35,7 +46,6 @@ import com.todoroo.astrid.notes.CommentsController; import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.service.TaskDeleter; import com.todoroo.astrid.timers.TimerPlugin; -import com.todoroo.astrid.ui.EditTitleControlSet; import io.reactivex.Completable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; @@ -47,6 +57,7 @@ import org.tasks.data.UserActivity; import org.tasks.data.UserActivityDao; import org.tasks.databinding.FragmentTaskEditBinding; import org.tasks.dialogs.DialogBuilder; +import org.tasks.dialogs.Linkify; import org.tasks.fragments.TaskEditControlSetFragmentManager; import org.tasks.injection.ForActivity; import org.tasks.injection.FragmentComponent; @@ -63,6 +74,7 @@ public final class TaskEditFragment extends InjectingFragment static final String TAG_TASKEDIT_FRAGMENT = "taskedit_fragment"; private static final String EXTRA_TASK = "extra_task"; private static final String EXTRA_THEME = "extra_theme"; + private static final String EXTRA_COMPLETED = "extra_completed"; @Inject TaskDao taskDao; @Inject UserActivityDao userActivityDao; @@ -75,10 +87,14 @@ public final class TaskEditFragment extends InjectingFragment @Inject Preferences preferences; @Inject Tracker tracker; @Inject TimerPlugin timerPlugin; + @Inject Linkify linkify; Task model = null; - ThemeColor themeColor; + private ThemeColor themeColor; private TaskEditFragmentCallbackHandler callback; + private boolean showKeyboard; + private FragmentTaskEditBinding binding; + private boolean completed; static TaskEditFragment newTaskEditFragment(Task task, ThemeColor themeColor) { TaskEditFragment taskEditFragment = new TaskEditFragment(); @@ -96,6 +112,13 @@ public final class TaskEditFragment extends InjectingFragment callback = (TaskEditFragmentCallbackHandler) activity; } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + + outState.putBoolean(EXTRA_COMPLETED, completed); + } + @Override protected void inject(FragmentComponent component) { component.inject(this); @@ -104,14 +127,14 @@ public final class TaskEditFragment extends InjectingFragment @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - FragmentTaskEditBinding binding = FragmentTaskEditBinding.inflate(inflater); + binding = FragmentTaskEditBinding.inflate(inflater); View view = binding.getRoot(); Bundle arguments = getArguments(); model = arguments.getParcelable(EXTRA_TASK); themeColor = arguments.getParcelable(EXTRA_THEME); - Toolbar toolbar = binding.toolbar.toolbar; + Toolbar toolbar = binding.toolbar; final boolean backButtonSavesTask = preferences.backButtonSavesTask(); toolbar.setNavigationIcon( ContextCompat.getDrawable( @@ -130,8 +153,70 @@ public final class TaskEditFragment extends InjectingFragment if (!model.isNew()) { toolbar.inflateMenu(R.menu.menu_task_edit_fragment); } + if (savedInstanceState == null) { + showKeyboard = model.isNew() && Strings.isNullOrEmpty(model.getTitle()); + completed = model.isCompleted(); + } else { + completed = savedInstanceState.getBoolean(EXTRA_COMPLETED); + } + + CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) binding.appbarlayout.getLayoutParams(); + params.setBehavior(new AppBarLayout.Behavior()); + AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior(); + behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() { + @Override + public boolean canDrag(@NonNull AppBarLayout appBarLayout) { + return false; + } + }); toolbar.setOnMenuItemClickListener(this); - themeColor.apply(toolbar); + themeColor.apply(binding.collapsingtoolbarlayout, toolbar); + EditText title = binding.title; + title.setTextKeepState(model.getTitle()); + title.setHorizontallyScrolling(false); + title.setMovementMethod(new ScrollingMovementMethod()); + title.setLines(1); + title.setTextColor(themeColor.getColorOnPrimary()); + title.setHintTextColor(themeColor.getHintOnPrimary()); + title.setMaxLines(5); + if (completed) { + title.setPaintFlags(title.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + + binding.fab.setImageResource(R.drawable.ic_undo_24px); + } + binding.fab.setOnClickListener(v -> { + if (completed) { + completed = false; + title.setPaintFlags(title.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG); + binding.fab.setImageResource(R.drawable.ic_check_black_24dp); + } else { + completed = true; + save(); + } + }); + + if (atLeastQ()) { + title.setVerticalScrollbarThumbDrawable(new ColorDrawable(themeColor.getHintOnPrimary())); + } + binding.appbarlayout.addOnOffsetChangedListener( + (appBarLayout, verticalOffset) -> { + if (verticalOffset == 0) { + binding.fab.setVisibility(View.VISIBLE); + title.setVisibility(View.VISIBLE); + binding.collapsingtoolbarlayout.setTitleEnabled(false); + } else if (Math.abs(verticalOffset) >= appBarLayout.getTotalScrollRange()) { + binding.fab.setVisibility(View.INVISIBLE); + } else { + binding.fab.setVisibility(View.VISIBLE); + title.setVisibility(View.INVISIBLE); + binding.collapsingtoolbarlayout.setTitle(title.getText()); + binding.collapsingtoolbarlayout.setTitleEnabled(true); + } + }); + + if (preferences.getBoolean(R.string.p_linkify_task_edit, false)) { + linkify.linkify(title); + } if (!model.isNew()) { notificationManager.cancel(model.getId()); @@ -155,13 +240,25 @@ public final class TaskEditFragment extends InjectingFragment } fragmentTransaction.commit(); - for (int i = taskEditControlFragments.size() - 2; i > 1; i--) { + for (int i = taskEditControlFragments.size() - 1; i > 0; i--) { binding.controlSets.addView(inflater.inflate(R.layout.task_edit_row_divider, binding.controlSets, false), i); } return view; } + @Override + public void onResume() { + super.onResume(); + + if (showKeyboard) { + binding.title.requestFocus(); + InputMethodManager imm = + (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(binding.title, InputMethodManager.SHOW_IMPLICIT); + } + } + @Override public boolean onMenuItemClick(MenuItem item) { AndroidUtilities.hideKeyboard(getActivity()); @@ -206,6 +303,11 @@ public final class TaskEditFragment extends InjectingFragment if (hasChanges(fragments)) { boolean isNewTask = model.isNew(); TaskListFragment taskListFragment = ((MainActivity) getActivity()).getTaskListFragment(); + String title = getTitle(); + model.setTitle(Strings.isNullOrEmpty(title) ? getString(R.string.no_title) : title); + if (completed != model.isCompleted()) { + model.setCompletionDate(completed ? now() : 0); + } for (TaskEditControlFragment fragment : filter(fragments, not(TaskEditControlFragment::requiresId))) { fragment.apply(model); @@ -245,10 +347,6 @@ public final class TaskEditFragment extends InjectingFragment * ====================================================================== */ - private EditTitleControlSet getEditTitleControlSet() { - return getFragment(EditTitleControlSet.TAG); - } - private RepeatControlSet getRepeatControlSet() { return getFragment(RepeatControlSet.TAG); } @@ -262,7 +360,18 @@ public final class TaskEditFragment extends InjectingFragment return (T) getChildFragmentManager().findFragmentByTag(getString(tag)); } + private String getTitle() { + return binding.title.getText().toString().trim(); + } + private boolean hasChanges(List fragments) { + String newTitle = getTitle(); + if (!newTitle.equals(model.getTitle()) + || (!model.isNew() && completed != model.isCompleted()) + || (model.isNew() && !Strings.isNullOrEmpty(newTitle))) { + return true; + } + try { for (TaskEditControlFragment fragment : fragments) { if (fragment.hasChanges(model)) { @@ -315,20 +424,12 @@ public final class TaskEditFragment extends InjectingFragment .show(); } - void onPriorityChange(int priority) { - getEditTitleControlSet().setPriority(priority); - } - /* * ====================================================================== * ========================================== UI component helper classes * ====================================================================== */ - public void onRepeatChanged(boolean repeat) { - getEditTitleControlSet().repeatChanged(repeat); - } - void onDueDateChanged(long dueDate) { RepeatControlSet repeatControlSet = getRepeatControlSet(); if (repeatControlSet != null) { @@ -351,7 +452,7 @@ public final class TaskEditFragment extends InjectingFragment } userActivity.setMessage(message); userActivity.setTargetId(model.getUuid()); - userActivity.setCreated(DateUtilities.now()); + userActivity.setCreated(now()); userActivityDao.createNew(userActivity); commentsController.reloadView(); } diff --git a/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java b/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java index 6e567da49..275cfb8f4 100644 --- a/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java +++ b/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.java @@ -33,7 +33,6 @@ import butterknife.OnItemSelected; import com.google.common.base.Strings; import com.google.ical.values.RRule; import com.google.ical.values.WeekdayNum; -import com.todoroo.astrid.activity.TaskEditFragment; import com.todoroo.astrid.data.Task; import java.text.ParseException; import java.util.ArrayList; @@ -253,9 +252,5 @@ public class RepeatControlSet extends TaskEditControlFragment { displayView.setText(repeatRuleToString.toString(rrule)); repeatTypeContainer.setVisibility(View.VISIBLE); } - TaskEditFragment targetFragment = (TaskEditFragment) getParentFragment(); - if (targetFragment != null) { - targetFragment.onRepeatChanged(rrule != null); - } } } diff --git a/app/src/main/java/com/todoroo/astrid/ui/EditTitleControlSet.java b/app/src/main/java/com/todoroo/astrid/ui/EditTitleControlSet.java deleted file mode 100644 index 8a937e17a..000000000 --- a/app/src/main/java/com/todoroo/astrid/ui/EditTitleControlSet.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright (c) 2012 Todoroo Inc - * - * See the file "LICENSE" for the full license governing this code. - */ - -package com.todoroo.astrid.ui; - -import static com.todoroo.andlib.utility.DateUtilities.now; - -import android.content.Context; -import android.graphics.Paint; -import android.os.Bundle; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.inputmethod.InputMethodManager; -import android.widget.EditText; -import androidx.annotation.Nullable; -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; -import butterknife.OnTextChanged; -import com.google.common.base.Strings; -import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.service.TaskCompleter; -import javax.inject.Inject; -import org.tasks.R; -import org.tasks.dialogs.Linkify; -import org.tasks.injection.ForApplication; -import org.tasks.injection.FragmentComponent; -import org.tasks.preferences.Preferences; -import org.tasks.ui.CheckBoxProvider; -import org.tasks.ui.TaskEditControlFragment; - -/** - * Control set for mapping a Property to an EditText - * - * @author Tim Su - */ -public class EditTitleControlSet extends TaskEditControlFragment { - - public static final int TAG = R.string.TEA_ctrl_title_pref; - - private static final String EXTRA_COMPLETE = "extra_complete"; - private static final String EXTRA_TITLE = "extra_title"; - private static final String EXTRA_REPEATING = "extra_repeating"; - private static final String EXTRA_PRIORITY = "extra_priority"; - - @Inject @ForApplication Context context; - @Inject TaskCompleter taskCompleter; - @Inject Linkify linkify; - @Inject CheckBoxProvider checkBoxProvider; - @Inject Preferences preferences; - - @BindView(R.id.title) - EditText editText; - - @BindView(R.id.completeBox) - CheckableImageView completeBox; - - private boolean showKeyboard; - private boolean isComplete; - private boolean isRepeating; - private int importanceValue; - private String title; - - @Override - protected void inject(FragmentComponent component) { - component.inject(this); - } - - @Nullable - @Override - public View onCreateView( - LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(getLayout(), null); - ButterKnife.bind(this, view); - if (savedInstanceState == null) { - isComplete = task.isCompleted(); - title = task.getTitle(); - isRepeating = !TextUtils.isEmpty(task.getRecurrence()); - importanceValue = task.getPriority(); - showKeyboard = task.isNew() && Strings.isNullOrEmpty(title); - } else { - isComplete = savedInstanceState.getBoolean(EXTRA_COMPLETE); - title = savedInstanceState.getString(EXTRA_TITLE); - isRepeating = savedInstanceState.getBoolean(EXTRA_REPEATING); - importanceValue = savedInstanceState.getInt(EXTRA_PRIORITY); - } - completeBox.setChecked(isComplete); - editText.setTextKeepState(title); - editText.setHorizontallyScrolling(false); - editText.setLines(1); - editText.setMaxLines(Integer.MAX_VALUE); - - if (preferences.getBoolean(R.string.p_linkify_task_edit, false)) { - linkify.linkify(editText); - } - - updateCompleteBox(); - return view; - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - - outState.putBoolean(EXTRA_COMPLETE, isComplete); - outState.putString(EXTRA_TITLE, title); - outState.putBoolean(EXTRA_REPEATING, isRepeating); - outState.putInt(EXTRA_PRIORITY, importanceValue); - } - - @OnClick(R.id.completeBox) - void toggleComplete(View view) { - updateCompleteBox(); - } - - @Override - public void onResume() { - super.onResume(); - - if (showKeyboard) { - editText.requestFocus(); - InputMethodManager imm = - (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); - imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); - } - } - - @OnTextChanged(R.id.title) - void onTextChanged(CharSequence text) { - this.title = text.toString().trim(); - } - - public void setPriority(int priority) { - importanceValue = priority; - updateCompleteBox(); - } - - public void repeatChanged(boolean repeat) { - isRepeating = repeat; - updateCompleteBox(); - } - - private void updateCompleteBox() { - isComplete = completeBox.isChecked(); - - completeBox.setImageDrawable( - checkBoxProvider.getCheckBox(isComplete, isRepeating, importanceValue)); - - if (isComplete) { - editText.setPaintFlags(editText.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); - } else { - editText.setPaintFlags(editText.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG); - } - } - - @Override - protected int getLayout() { - return R.layout.control_set_title; - } - - @Override - public int getIcon() { - return -1; - } - - @Override - public int controlId() { - return TAG; - } - - @Override - public boolean hasChanges(Task original) { - return !title.equals(original.getTitle()) - || isComplete != original.isCompleted() - || (original.isNew() && !Strings.isNullOrEmpty(title)); - } - - @Override - public void apply(Task task) { - task.setTitle(Strings.isNullOrEmpty(title) ? getString(R.string.no_title) : title); - if (task.isNew()) { - task.setCompletionDate(isComplete ? now() : 0); - } else if (isComplete != task.isCompleted()) { - taskCompleter.setComplete(task, isComplete); - } - } -} diff --git a/app/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java b/app/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java index 0a63c7209..97b5a26c8 100644 --- a/app/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java +++ b/app/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java @@ -10,7 +10,6 @@ import com.todoroo.astrid.files.FilesControlSet; import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.tags.TagsControlSet; import com.todoroo.astrid.timers.TimerControlSet; -import com.todoroo.astrid.ui.EditTitleControlSet; import com.todoroo.astrid.ui.HideUntilControlSet; import com.todoroo.astrid.ui.ReminderControlSet; import java.util.ArrayList; @@ -36,7 +35,6 @@ public class TaskEditControlSetFragmentManager { public static final int[] TASK_EDIT_CONTROL_FRAGMENT_ROWS = new int[] { - R.id.row_title, R.id.comment_bar, R.id.row_1, R.id.row_2, @@ -55,7 +53,6 @@ public class TaskEditControlSetFragmentManager { private static final int[] TASK_EDIT_CONTROL_SET_FRAGMENTS = new int[] { - EditTitleControlSet.TAG, DeadlineControlSet.TAG, TimerControlSet.TAG, DescriptionControlSet.TAG, @@ -87,8 +84,7 @@ public class TaskEditControlSetFragmentManager { @Inject public TaskEditControlSetFragmentManager(@ForActivity Context context, Preferences preferences) { displayOrder = BeastModePreferences.constructOrderedControlList(preferences, context); - displayOrder.add(0, context.getString(EditTitleControlSet.TAG)); - displayOrder.add(1, context.getString(CommentBarFragment.TAG)); + displayOrder.add(0, context.getString(CommentBarFragment.TAG)); String hideAlwaysTrigger = context.getString(R.string.TEA_ctrl_hide_section_pref); for (numRows = 0; numRows < displayOrder.size(); numRows++) { if (displayOrder.get(numRows).equals(hideAlwaysTrigger)) { @@ -138,8 +134,6 @@ public class TaskEditControlSetFragmentManager { private TaskEditControlFragment createFragment(int fragmentId) { switch (fragmentId) { - case EditTitleControlSet.TAG: - return new EditTitleControlSet(); case DeadlineControlSet.TAG: return new DeadlineControlSet(); case PriorityControlSet.TAG: diff --git a/app/src/main/java/org/tasks/injection/FragmentComponent.java b/app/src/main/java/org/tasks/injection/FragmentComponent.java index edfadb061..1911fcd87 100644 --- a/app/src/main/java/org/tasks/injection/FragmentComponent.java +++ b/app/src/main/java/org/tasks/injection/FragmentComponent.java @@ -7,7 +7,6 @@ import com.todoroo.astrid.files.FilesControlSet; import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.tags.TagsControlSet; import com.todoroo.astrid.timers.TimerControlSet; -import com.todoroo.astrid.ui.EditTitleControlSet; import com.todoroo.astrid.ui.HideUntilControlSet; import com.todoroo.astrid.ui.ReminderControlSet; import dagger.Subcomponent; @@ -51,8 +50,6 @@ public interface FragmentComponent { void inject(CommentBarFragment commentBarFragment); - void inject(EditTitleControlSet editTitleControlSet); - void inject(FilesControlSet filesControlSet); void inject(TagsControlSet tagsControlSet); diff --git a/app/src/main/java/org/tasks/themes/CustomIcons.kt b/app/src/main/java/org/tasks/themes/CustomIcons.kt index 88fe9c0fb..4ee5cbb14 100644 --- a/app/src/main/java/org/tasks/themes/CustomIcons.kt +++ b/app/src/main/java/org/tasks/themes/CustomIcons.kt @@ -166,7 +166,9 @@ object CustomIcons { 1126 to R.drawable.ic_outline_palette_24px, 1127 to R.drawable.ic_outline_sd_storage_24px, 1128 to R.drawable.ic_baseline_lens_24px, - 1129 to R.drawable.ic_map_24px + 1129 to R.drawable.ic_map_24px, + 1130 to R.drawable.ic_check_black_24dp, + 1131 to R.drawable.ic_undo_24px ) @kotlin.jvm.JvmStatic diff --git a/app/src/main/java/org/tasks/themes/ThemeColor.java b/app/src/main/java/org/tasks/themes/ThemeColor.java index d8d23d8c1..e4da22a75 100644 --- a/app/src/main/java/org/tasks/themes/ThemeColor.java +++ b/app/src/main/java/org/tasks/themes/ThemeColor.java @@ -166,6 +166,7 @@ public class ThemeColor implements Pickable { private final int original; private final int colorOnPrimary; + private final int hintOnPrimary; private final int colorPrimary; private final int colorPrimaryVariant; private final boolean isDark; @@ -186,7 +187,13 @@ public class ThemeColor implements Pickable { double contrast = ColorUtils.calculateContrast(WHITE, colorPrimary); isDark = contrast < 3; - colorOnPrimary = isDark ? context.getResources().getColor(R.color.black_87) : WHITE; + if (isDark) { + colorOnPrimary = context.getResources().getColor(R.color.black_87); + hintOnPrimary = context.getResources().getColor(R.color.black_60); + } else { + colorOnPrimary = WHITE; + hintOnPrimary = context.getResources().getColor(R.color.white_87); + } } private ThemeColor(Parcel source) { @@ -195,6 +202,7 @@ public class ThemeColor implements Pickable { colorPrimaryVariant = source.readInt(); isDark = ParcelCompat.readBoolean(source); original = source.readInt(); + hintOnPrimary = source.readInt(); } public static ThemeColor getLauncherColor(Context context, int index) { @@ -255,6 +263,15 @@ public class ThemeColor implements Pickable { layout.setStatusBarScrimColor(colorPrimaryVariant); } + public void apply(CollapsingToolbarLayout layout, Toolbar toolbar) { + setStatusBarColor(layout); + layout.setBackgroundColor(colorPrimary); + layout.setCollapsedTitleTextColor(colorOnPrimary); + layout.setExpandedTitleColor(colorOnPrimary); + toolbar.setNavigationIcon(colorDrawable(toolbar.getNavigationIcon(), colorOnPrimary)); + colorMenu(toolbar.getMenu(), colorOnPrimary); + } + public void applyToStatusBarIcons(Activity activity) { if (atLeastMarshmallow()) { View decorView = activity.getWindow().getDecorView(); @@ -330,6 +347,10 @@ public class ThemeColor implements Pickable { return colorOnPrimary; } + public int getHintOnPrimary() { + return hintOnPrimary; + } + public void apply(Toolbar toolbar) { toolbar.setBackgroundColor(getPrimaryColor()); toolbar.setNavigationIcon(colorDrawable(toolbar.getNavigationIcon(), colorOnPrimary)); @@ -349,6 +370,7 @@ public class ThemeColor implements Pickable { dest.writeInt(colorPrimaryVariant); ParcelCompat.writeBoolean(dest, isDark); dest.writeInt(original); + dest.writeInt(hintOnPrimary); } public void colorMenu(Menu menu) { diff --git a/app/src/main/java/org/tasks/ui/PriorityControlSet.java b/app/src/main/java/org/tasks/ui/PriorityControlSet.java index 5a107a06c..83f473946 100644 --- a/app/src/main/java/org/tasks/ui/PriorityControlSet.java +++ b/app/src/main/java/org/tasks/ui/PriorityControlSet.java @@ -1,6 +1,5 @@ package org.tasks.ui; -import android.app.Activity; import android.content.Context; import android.content.res.ColorStateList; import android.os.Bundle; @@ -41,16 +40,8 @@ public class PriorityControlSet extends TaskEditControlFragment { @BindView(R.id.priority_none) AppCompatRadioButton priorityNone; - private OnPriorityChanged callback; private @Priority int priority; - @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - - callback = (OnPriorityChanged) activity; - } - @Override protected void inject(FragmentComponent component) { component.inject(this); @@ -59,7 +50,6 @@ public class PriorityControlSet extends TaskEditControlFragment { @OnClick({R.id.priority_high, R.id.priority_medium, R.id.priority_low, R.id.priority_none}) void onPriorityChanged(CompoundButton button) { priority = getPriority(); - callback.onPriorityChange(priority); } @Nullable @@ -143,9 +133,4 @@ public class PriorityControlSet extends TaskEditControlFragment { } return Priority.NONE; } - - public interface OnPriorityChanged { - - void onPriorityChange(int priority); - } } diff --git a/app/src/main/res/drawable/ic_check_black_24dp.xml b/app/src/main/res/drawable/ic_check_black_24dp.xml new file mode 100644 index 000000000..b006da99a --- /dev/null +++ b/app/src/main/res/drawable/ic_check_black_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_undo_24px.xml b/app/src/main/res/drawable/ic_undo_24px.xml new file mode 100644 index 000000000..f893a544a --- /dev/null +++ b/app/src/main/res/drawable/ic_undo_24px.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/control_set_title.xml b/app/src/main/res/layout/control_set_title.xml deleted file mode 100644 index 973e8175e..000000000 --- a/app/src/main/res/layout/control_set_title.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_task_edit.xml b/app/src/main/res/layout/fragment_task_edit.xml index 3d68587e3..4babb4140 100644 --- a/app/src/main/res/layout/fragment_task_edit.xml +++ b/app/src/main/res/layout/fragment_task_edit.xml @@ -3,113 +3,176 @@ ** ** See the file "LICENSE" for the full license governing this code. --> - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_height="fill_parent" + android:orientation="vertical" + app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index 61bbe6fa6..136218986 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -182,7 +182,6 @@ @string/TEA_control_hidden_section - TEA_ctrl_title_pref TEA_ctrl_when_pref TEA_ctrl_repeat_pref TEA_ctrl_importance_pref