Move title edit to collapsing toolbar layout

pull/996/head
Alex Baker 4 years ago
parent 1d01c5d7b4
commit ac39ccb966

@ -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();

@ -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<TaskEditControlFragment> 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();
}

@ -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);
}
}
}

@ -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 <tim@todoroo.com>
*/
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);
}
}
}

@ -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:

@ -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);

@ -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

@ -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) {

@ -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);
}
}

@ -0,0 +1,5 @@
<vector android:autoMirrored="true" android:height="24dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
</vector>

@ -0,0 +1,5 @@
<vector android:autoMirrored="true" android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M12.5,8c-2.65,0 -5.05,0.99 -6.9,2.6L2,7v9h9l-3.62,-3.62c1.39,-1.16 3.16,-1.88 5.12,-1.88 3.54,0 6.55,2.31 7.6,5.5l2.37,-0.78C21.08,11.03 17.15,8 12.5,8z"/>
</vector>

@ -1,59 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><!--
** Copyright (c) 2012 Todoroo Inc
**
** See the file "LICENSE" for the full license governing this code.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
android:orientation="horizontal"
android:paddingStart="0dp"
android:paddingLeft="0dp"
android:paddingTop="@dimen/task_edit_drawable_padding_top_bottom"
android:paddingEnd="@dimen/keyline_first"
android:paddingRight="@dimen/keyline_first"
android:paddingBottom="@dimen/task_edit_drawable_padding_top_bottom">
<com.todoroo.astrid.ui.CheckableImageView
android:id="@+id/completeBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_gravity="top"
android:paddingStart="@dimen/keyline_first"
android:paddingEnd="@dimen/keyline_second"
android:paddingLeft="@dimen/keyline_first"
android:paddingRight="@dimen/keyline_second"
android:scaleType="center"/>
<EditText
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/completeBox"
android:layout_toRightOf="@id/completeBox"
android:background="@null"
android:freezesText="true"
android:gravity="start"
android:hint="@string/TEA_title_hint"
android:imeOptions="flagNoExtractUi"
android:inputType="textCapSentences|textAutoCorrect"
android:nextFocusLeft="@id/title"
android:nextFocusUp="@id/title"
android:scrollbars="vertical"
android:textAlignment="viewStart"/>
</RelativeLayout>
<View style="@style/horizontal_divider"/>
</LinearLayout>

@ -3,113 +3,176 @@
**
** See the file "LICENSE" for the full license governing this code.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
<androidx.core.widget.NestedScrollView
android:scrollbarStyle="outsideOverlay"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="100"
android:elevation="0dp"
android:overScrollMode="never">
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbarlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsingtoolbarlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:collapsedTitleTextAppearance="?attr/textAppearanceHeadline6"
app:expandedTitleGravity="top"
app:expandedTitleMarginTop="?attr/actionBarSize"
app:expandedTitleMarginStart="@dimen/keyline_first"
app:expandedTitleTextAppearance="?attr/textAppearanceHeadline5"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
<EditText
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="?attr/actionBarSize"
android:paddingLeft="@dimen/keyline_first"
android:paddingStart="@dimen/keyline_first"
android:paddingRight="@dimen/keyline_first"
android:paddingEnd="@dimen/keyline_first"
android:paddingBottom="@dimen/keyline_second"
android:layout_gravity="top"
android:background="@null"
android:gravity="start"
android:freezesText="true"
android:textAppearance="?attr/textAppearanceHeadline5"
android:hint="@string/TEA_title_hint"
android:imeOptions="flagNoExtractUi"
android:inputType="textCapSentences|textAutoCorrect"
android:scrollbars="vertical"
android:textAlignment="viewStart" />
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:elevation="@dimen/elevation_toolbar"
app:layout_collapseMode="pin"
android:theme="?attr/overlay_theme"
app:popupTheme="@style/popup_overlay"
app:titleTextColor="?attr/colorOnPrimary"
app:toolbarStyle="@style/Widget.MaterialComponents.Toolbar"
tools:ignore="UnusedAttribute" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
android:id="@+id/control_sets"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
<FrameLayout
android:id="@+id/row_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/row_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/row_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/row_3"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/row_4"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/row_5"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/row_6"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/row_7"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/row_8"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/row_9"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/row_10"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/row_11"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/row_12"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@+id/row_13"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<LinearLayout
android:id="@+id/comments"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/>
android:layout_height="fill_parent"
android:orientation="vertical"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
<androidx.core.widget.NestedScrollView
android:scrollbarStyle="outsideOverlay"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="100"
android:elevation="0dp"
android:overScrollMode="never">
<LinearLayout
android:id="@+id/control_sets"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
<FrameLayout
android:id="@+id/row_1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/row_2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/row_3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/row_4"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/row_5"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/row_6"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/row_7"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/row_8"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/row_9"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/row_10"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/row_11"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/row_12"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/row_13"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/comments"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<FrameLayout
android:id="@+id/comment_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="@dimen/elevation_toolbar" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<FrameLayout
android:id="@+id/comment_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="@dimen/elevation_toolbar"/>
</LinearLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/keyline_first"
android:src="@drawable/ic_check_black_24dp"
android:tint="?attr/colorOnSecondary"
android:background="?attr/colorSecondary"
app:layout_anchor="@id/appbarlayout"
app:layout_anchorGravity="bottom|right|end" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

@ -182,7 +182,6 @@
<item>@string/TEA_control_hidden_section</item>
</string-array>
<string name="TEA_ctrl_title_pref">TEA_ctrl_title_pref</string> <!-- Deprecated -->
<string name="TEA_ctrl_when_pref">TEA_ctrl_when_pref</string>
<string name="TEA_ctrl_repeat_pref">TEA_ctrl_repeat_pref</string>
<string name="TEA_ctrl_importance_pref">TEA_ctrl_importance_pref</string>

Loading…
Cancel
Save