From 607cb2afdb8822135e938152b7cebd37dc753726 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 2 Feb 2016 23:05:30 -0600 Subject: [PATCH] Dual toolbars --- .../astrid/gtasks/GtasksListFragment.java | 7 +- .../todoroo/astrid/actfm/TagViewFragment.java | 3 - .../astrid/activity/TaskEditFragment.java | 97 +++--- .../astrid/activity/TaskEditViewPager.java | 19 +- .../astrid/activity/TaskListActivity.java | 271 ++------------- .../astrid/activity/TaskListFragment.java | 321 ++++++++++++++---- .../todoroo/astrid/adapter/TaskAdapter.java | 19 -- .../astrid/subtasks/SubtasksListFragment.java | 6 +- .../subtasks/SubtasksTagListFragment.java | 7 +- .../astrid/ui/EditTitleControlSet.java | 3 +- .../astrid/voice/VoiceInputAssistant.java | 51 ++- src/main/java/org/tasks/ui/CheckBoxes.java | 7 + .../org/tasks/ui/EmptyTaskEditFragment.java | 18 + .../task_list_activity.xml} | 18 +- .../res/layout-w820dp/task_list_wrapper.xml | 53 --- src/main/res/layout/control_set_deadline.xml | 5 +- .../res/layout/control_set_description.xml | 1 - src/main/res/layout/control_set_title.xml | 46 ++- ...it_fragment.xml => fragment_task_edit.xml} | 82 ++--- .../res/layout/fragment_task_edit_empty.xml | 13 + src/main/res/layout/fragment_task_list.xml | 59 ++++ .../res/layout/task_adapter_row_simple.xml | 23 -- src/main/res/layout/task_list_activity.xml | 43 +-- .../res/layout/task_list_body_standard.xml | 6 +- .../res/layout/task_list_body_subtasks.xml | 4 +- src/main/res/layout/toolbar.xml | 2 +- src/main/res/layout/toolbar_separator.xml | 1 + src/main/res/menu/task_edit_fragment.xml | 6 - ...st_activity.xml => task_list_fragment.xml} | 0 src/main/res/values-ar/strings.xml | 2 - src/main/res/values-bg-rBG/strings.xml | 1 - src/main/res/values-ca/strings.xml | 2 - src/main/res/values-cs/strings.xml | 2 - src/main/res/values-da/strings.xml | 2 - src/main/res/values-de/strings.xml | 2 - src/main/res/values-el/strings.xml | 2 - src/main/res/values-es/strings.xml | 2 - src/main/res/values-fa/strings.xml | 2 - src/main/res/values-fi/strings.xml | 2 - src/main/res/values-fr/strings.xml | 2 - src/main/res/values-hu/strings.xml | 2 - src/main/res/values-it/strings.xml | 2 - src/main/res/values-iw/strings.xml | 2 - src/main/res/values-ja/strings.xml | 2 - src/main/res/values-ko/strings.xml | 2 - src/main/res/values-nb/strings.xml | 1 - src/main/res/values-nl/strings.xml | 2 - src/main/res/values-pl/strings.xml | 2 - src/main/res/values-pt-rBR/strings.xml | 2 - src/main/res/values-pt/strings.xml | 2 - src/main/res/values-ru/strings.xml | 2 - src/main/res/values-sk/strings.xml | 2 - src/main/res/values-sl-rSI/strings.xml | 2 - src/main/res/values-sv/strings.xml | 2 - src/main/res/values-th/strings.xml | 1 - src/main/res/values-tr/strings.xml | 2 - src/main/res/values-uk/strings.xml | 2 - src/main/res/values-v21/dimens.xml | 4 + src/main/res/values-v21/styles.xml | 7 +- src/main/res/values-w820dp/styles.xml | 8 + src/main/res/values-zh-rCN/strings.xml | 2 - src/main/res/values-zh-rTW/strings.xml | 2 - src/main/res/values/dimens.xml | 4 + src/main/res/values/strings.xml | 6 - src/main/res/values/styles.xml | 20 +- 65 files changed, 566 insertions(+), 731 deletions(-) create mode 100644 src/main/java/org/tasks/ui/EmptyTaskEditFragment.java rename src/main/res/{layout/task_list_wrapper.xml => layout-w820dp/task_list_activity.xml} (55%) delete mode 100644 src/main/res/layout-w820dp/task_list_wrapper.xml rename src/main/res/layout/{task_edit_fragment.xml => fragment_task_edit.xml} (70%) create mode 100644 src/main/res/layout/fragment_task_edit_empty.xml create mode 100644 src/main/res/layout/fragment_task_list.xml rename src/main/res/menu/{task_list_activity.xml => task_list_fragment.xml} (100%) create mode 100644 src/main/res/values-v21/dimens.xml create mode 100644 src/main/res/values-w820dp/styles.xml diff --git a/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksListFragment.java b/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksListFragment.java index a220126ac..d15dc728c 100644 --- a/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksListFragment.java +++ b/src/googleplay/java/com/todoroo/astrid/gtasks/GtasksListFragment.java @@ -68,9 +68,6 @@ public class GtasksListFragment extends SubtasksListFragment { @Override protected void initiateAutomaticSyncImpl() { - if (!isCurrentTaskListFragment()) { - return; - } if (list != null && syncThrottle.canSync(list.getId())) { refreshData(false); } @@ -95,13 +92,13 @@ public class GtasksListFragment extends SubtasksListFragment { } @Override - public boolean onOptionsItemSelected(MenuItem item) { + public boolean onMenuItemClick(MenuItem item) { switch(item.getItemId()) { case R.id.menu_clear_completed: clearCompletedTasks(); return true; default: - return super.onOptionsItemSelected(item); + return super.onMenuItemClick(item); } } diff --git a/src/main/java/com/todoroo/astrid/actfm/TagViewFragment.java b/src/main/java/com/todoroo/astrid/actfm/TagViewFragment.java index 50daf30bf..70c29c924 100644 --- a/src/main/java/com/todoroo/astrid/actfm/TagViewFragment.java +++ b/src/main/java/com/todoroo/astrid/actfm/TagViewFragment.java @@ -80,9 +80,6 @@ public class TagViewFragment extends TaskListFragment { @Override protected void initiateAutomaticSyncImpl() { - if (!isCurrentTaskListFragment()) { - return; - } if (tagData != null) { long lastAutosync = tagData.getLastAutosync(); if(DateUtilities.now() - lastAutosync > AUTOSYNC_INTERVAL) { diff --git a/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java b/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java index e20ddce25..a60d1d19d 100755 --- a/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java @@ -9,13 +9,15 @@ import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.Handler; +import android.support.v4.graphics.drawable.DrawableCompat; import android.support.v4.view.ViewPager; +import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.MeasureSpec; @@ -70,7 +72,7 @@ import static android.app.Activity.RESULT_OK; * @author timsu * */ -public final class TaskEditFragment extends InjectingFragment implements EditNoteActivity.UpdatesChangedListener { +public final class TaskEditFragment extends InjectingFragment implements EditNoteActivity.UpdatesChangedListener, Toolbar.OnMenuItemClickListener { public interface TaskEditFragmentCallbackHandler { void taskEditFinished(); @@ -108,10 +110,6 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot public static final int REQUEST_CODE_RECORD = 30; // TODO: move this to file control set public static final int REQUEST_CODE_CAMERA = 60; - // --- services - - public static final int TAB_VIEW_UPDATES = 0; - @Inject TaskService taskService; @Inject MetadataDao metadataDao; @Inject UserActivityDao userActivityDao; @@ -130,6 +128,7 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot @Bind(R.id.updatesFooter) View commentsBar; @Bind(R.id.edit_scroll) ScrollView scrollView; @Bind(R.id.commentField) EditText commentField; + @Bind(R.id.toolbar) Toolbar toolbar; public static final int[] rowIds = new int[] { R.id.row_1, @@ -193,9 +192,25 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.task_edit_fragment, container, false); + View view = inflater.inflate(R.layout.fragment_task_edit, container, false); ButterKnife.bind(this, view); + Drawable drawable = DrawableCompat.wrap(getResources().getDrawable(R.drawable.ic_save_24dp)); + DrawableCompat.setTint(drawable, getResources().getColor(android.R.color.white)); + toolbar.setNavigationIcon(drawable); + toolbar.setNavigationOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + save(); + } + }); + toolbar.inflateMenu(R.menu.task_edit_fragment); + Menu menu = toolbar.getMenu(); + for (int i = 0 ; i < menu.size() ; i++) { + MenuColorizer.colorMenuItem(menu.getItem(i), getResources().getColor(android.R.color.white)); + } + toolbar.setOnMenuItemClickListener(this); + notificationManager.cancel(model.getId()); if (!showEditComments) { @@ -206,13 +221,26 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot } + @Override + public boolean onMenuItemClick(MenuItem item) { + hideKeyboard(); + + switch (item.getItemId()) { + case R.id.menu_record_note: + startRecordingAudio(); + return true; + case R.id.menu_delete: + deleteButtonClick(); + return true; + } + + return false; + } + @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - // We have a menu item to show in action bar. - setHasOptionsMenu(true); - // Load task data in background new TaskEditBackgroundLoader().start(); } @@ -229,12 +257,6 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot } private void loadMoreContainer() { - int tabStyle = TaskEditViewPager.TAB_SHOW_ACTIVITY; - - if (!showEditComments) { - tabStyle &= ~TaskEditViewPager.TAB_SHOW_ACTIVITY; - } - if (editNotes == null) { instantiateEditNotes(); } else { @@ -249,16 +271,16 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot editNotes.addListener(this); } - if (tabStyle == 0) { + if (!showEditComments) { return; } - TaskEditViewPager adapter = new TaskEditViewPager(getActivity(), tabStyle); + TaskEditViewPager adapter = new TaskEditViewPager(); adapter.parent = this; mPager.setAdapter(adapter); - setCurrentTab(TAB_VIEW_UPDATES); + setCurrentTab(0); setPagerHeightForPosition(); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @@ -444,40 +466,6 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot startActivityForResult(recordAudio, REQUEST_CODE_RECORD); } - @Override - public boolean onOptionsItemSelected(MenuItem item) { - hideKeyboard(); - - switch (item.getItemId()) { - case R.id.menu_save: - save(); - return true; - case R.id.menu_record_note: - startRecordingAudio(); - return true; - case R.id.menu_delete: - deleteButtonClick(); - return true; - case android.R.id.home: - save(); - return true; - } - - return super.onOptionsItemSelected(item); - } - - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - menu.clear(); - inflater.inflate(R.menu.task_edit_fragment, menu); - for (int i = 0 ; i < menu.size() ; i++) { - MenuColorizer.colorMenuItem(menu.getItem(i), getResources().getColor(android.R.color.white)); - } - if (getResources().getBoolean(R.bool.two_pane_layout)) { - menu.findItem(R.id.menu_save).setVisible(true); - } - } - @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (editNotes == null) { @@ -538,7 +526,7 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot // EditNoteActivity Listener when there are new updates/comments @Override public void updatesChanged() { - if (mPager != null && mPager.getCurrentItem() == TAB_VIEW_UPDATES) { + if (mPager != null) { setPagerHeightForPosition(); } } @@ -546,7 +534,6 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot // EditNoteActivity Lisener when there are new updates/comments @Override public void commentAdded() { - setCurrentTab(TAB_VIEW_UPDATES); setPagerHeightForPosition(); scrollToView(editNotes); } diff --git a/src/main/java/com/todoroo/astrid/activity/TaskEditViewPager.java b/src/main/java/com/todoroo/astrid/activity/TaskEditViewPager.java index 3a40998db..a043a45dc 100644 --- a/src/main/java/com/todoroo/astrid/activity/TaskEditViewPager.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskEditViewPager.java @@ -5,35 +5,18 @@ */ package com.todoroo.astrid.activity; -import android.content.Context; import android.os.Parcelable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.View; -import org.tasks.R; - -import java.util.ArrayList; - public class TaskEditViewPager extends PagerAdapter { - private final String[] titles; public TaskEditFragment parent; - public static final int TAB_SHOW_ACTIVITY = 1; - - public TaskEditViewPager(Context context, int tabStyleMask) { - ArrayList titleList = new ArrayList<>(); - if ((tabStyleMask & TAB_SHOW_ACTIVITY) > 0) { - titleList.add(context.getString(R.string.TEA_tab_activity)); - } - - titles = titleList.toArray(new String[titleList.size()]); - } - @Override public int getCount() { - return titles.length; + return 1; } @Override diff --git a/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java b/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java index 3dd374e2d..ae5f657b9 100644 --- a/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskListActivity.java @@ -11,65 +11,40 @@ import android.app.FragmentTransaction; import android.content.ContentValues; import android.content.Intent; import android.content.IntentFilter; -import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.support.v4.graphics.drawable.DrawableCompat; -import android.support.v4.view.MenuItemCompat; import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBar; -import android.support.v7.widget.SearchView; -import android.support.v7.widget.Toolbar; -import android.view.Menu; -import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; -import com.todoroo.andlib.data.Callback; -import com.todoroo.andlib.sql.Criterion; -import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.utility.AndroidUtilities; -import com.todoroo.astrid.actfm.FilterSettingsActivity; import com.todoroo.astrid.actfm.TagSettingsActivity; -import com.todoroo.astrid.actfm.TagViewFragment; import com.todoroo.astrid.api.AstridApiConstants; -import com.todoroo.astrid.api.CustomFilter; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.api.FilterWithCustomIntent; import com.todoroo.astrid.api.PermaSql; import com.todoroo.astrid.core.BuiltInFilterExposer; -import com.todoroo.astrid.dao.TagDataDao; -import com.todoroo.astrid.data.RemoteModel; -import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.files.FilesControlSet; -import com.todoroo.astrid.gtasks.GtasksListFragment; import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.service.StartupService; -import com.todoroo.astrid.service.TaskCreator; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.UpgradeActivity; import com.todoroo.astrid.subtasks.SubtasksHelper; -import com.todoroo.astrid.subtasks.SubtasksListFragment; -import com.todoroo.astrid.subtasks.SubtasksTagListFragment; -import com.todoroo.astrid.tags.TagFilterExposer; 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 com.todoroo.astrid.voice.VoiceInputAssistant; -import com.todoroo.astrid.widget.TasksWidget; import org.tasks.R; -import org.tasks.activities.SortActivity; import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.preferences.ActivityPreferences; import org.tasks.receivers.RepeatConfirmationReceiver; import org.tasks.ui.CalendarControlSet; import org.tasks.ui.DeadlineControlSet; import org.tasks.ui.DescriptionControlSet; -import org.tasks.ui.MenuColorizer; +import org.tasks.ui.EmptyTaskEditFragment; import org.tasks.ui.NavigationDrawerFragment; import org.tasks.ui.PriorityControlSet; import org.tasks.ui.TaskEditControlFragment; @@ -81,36 +56,25 @@ import java.util.Map; import javax.inject.Inject; -import butterknife.Bind; -import butterknife.ButterKnife; import timber.log.Timber; import static com.todoroo.astrid.activity.TaskEditFragment.newTaskEditFragment; -import static com.todoroo.astrid.voice.VoiceInputAssistant.voiceInputAvailable; import static org.tasks.ui.NavigationDrawerFragment.OnFilterItemClickedListener; public class TaskListActivity extends InjectingAppCompatActivity implements OnFilterItemClickedListener, - TaskListFragment.OnTaskListItemClickedListener, + TaskListFragment.TaskListFragmentCallbackHandler, PriorityControlSet.OnPriorityChanged, TimerControlSet.TimerControlSetCallback, RepeatControlSet.RepeatChangedListener, TaskEditFragment.TaskEditFragmentCallbackHandler { - @Inject TagDataDao tagDataDao; @Inject ActivityPreferences preferences; - @Inject VoiceInputAssistant voiceInputAssistant; @Inject StartupService startupService; @Inject SubtasksHelper subtasksHelper; @Inject TaskService taskService; - @Inject TaskCreator taskCreator; - - @Bind(R.id.toolbar) Toolbar toolbar; public static final int REQUEST_UPGRADE = 505; - private static final int REQUEST_EDIT_TAG = 11543; - private static final int REQUEST_EDIT_FILTER = 11544; - private static final int REQUEST_SORT = 11545; private final RepeatConfirmationReceiver repeatConfirmationReceiver = new RepeatConfirmationReceiver(this); private final Map controlSetFragments = new HashMap<>(); @@ -132,23 +96,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements startupService.onStartupApplication(this); preferences.applyTheme(); - setContentView(R.layout.task_list_wrapper); - ButterKnife.bind(this); - - setSupportActionBar(toolbar); - updateToolbar(R.drawable.ic_menu_24dp, true); - toolbar.setNavigationOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - TaskEditFragment taskEditFragment = getTaskEditFragment(); - if (isDoublePaneLayout() || taskEditFragment == null) { - hideKeyboard(); - navigationDrawer.openDrawer(); - } else { - taskEditFragment.save(); - } - } - }); + setContentView(R.layout.task_list_activity); navigationDrawer = getNavigationDrawerFragment(); DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); @@ -224,14 +172,18 @@ public class TaskListActivity extends InjectingAppCompatActivity implements loadTaskListFragment(true, taskListFragment); + if (isDoublePaneLayout()) { + getFragmentManager().beginTransaction() + .replace(R.id.detail_dual, new EmptyTaskEditFragment()) + .commit(); + } + if (taskEditFragment != null) { loadTaskEditFragment(true, taskEditFragment, taskEditControlFragments); } } private void loadTaskListFragment(boolean onCreate, TaskListFragment taskListFragment) { - Filter filter = taskListFragment.getFilter(); - getSupportActionBar().setTitle(filter.listingTitle); FragmentManager fragmentManager = getFragmentManager(); if (onCreate) { fragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); @@ -245,9 +197,6 @@ public class TaskListActivity extends InjectingAppCompatActivity implements } private void loadTaskEditFragment(boolean onCreate, TaskEditFragment taskEditFragment, List taskEditControlFragments) { - if (isSinglePaneLayout()) { - updateToolbar(R.drawable.ic_save_24dp, false); - } FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .replace(isDoublePaneLayout() ? R.id.detail_dual : R.id.single_pane, taskEditFragment, TaskEditFragment.TAG_TASKEDIT_FRAGMENT) @@ -289,74 +238,6 @@ public class TaskListActivity extends InjectingAppCompatActivity implements AndroidUtilities.tryUnregisterReceiver(this, repeatConfirmationReceiver); } - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.task_list_activity, menu); - MenuColorizer.colorMenu(this, menu, getResources().getColor(android.R.color.white)); - TaskListFragment tlf = getTaskListFragment(); - MenuItem hidden = menu.findItem(R.id.menu_show_hidden); - if (preferences.getBoolean(R.string.p_show_hidden_tasks, false)) { - hidden.setChecked(true); - } - MenuItem completed = menu.findItem(R.id.menu_show_completed); - if (preferences.getBoolean(R.string.p_show_completed_tasks, false)) { - completed.setChecked(true); - } - if (tlf instanceof GtasksListFragment) { - menu.findItem(R.id.menu_clear_completed).setVisible(true); - menu.findItem(R.id.menu_sort).setVisible(false); - completed.setChecked(true); - completed.setEnabled(false); - } else if(tlf instanceof TagViewFragment) { - menu.findItem(R.id.menu_tag_settings).setVisible(true); - } else if (tlf != null) { - Filter filter = tlf.getFilter(); - if(filter != null && filter instanceof CustomFilter && ((CustomFilter) filter).getId() > 0) { - menu.findItem(R.id.menu_filter_settings).setVisible(true); - } - } - - if (tlf instanceof SubtasksTagListFragment || tlf instanceof SubtasksListFragment) { - hidden.setChecked(true); - hidden.setEnabled(false); - } - - menu.findItem(R.id.menu_voice_add).setVisible(voiceInputAvailable(this)); - final MenuItem item = menu.findItem(R.id.menu_search); - final SearchView actionView = (SearchView) MenuItemCompat.getActionView(item); - actionView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextSubmit(String query) { - query = query.trim(); - String title = getString(R.string.FLA_search_filter, query); - Filter savedFilter = new Filter(title, - new QueryTemplate().where - (Criterion.or(Task.NOTES. - like( - "%" + //$NON-NLS-1$ - query + "%" - ), - Task.TITLE. - like( - "%" + //$NON-NLS-1$ - query + "%" - ) - ) - ), null); - - onFilterItemClicked(savedFilter); - MenuItemCompat.collapseActionView(item); - return true; - } - - @Override - public boolean onQueryTextChange(String query) { - return false; - } - }); - return true; - } - protected Filter getDefaultFilter() { return BuiltInFilterExposer.getMyTasksFilter(getResources()); } @@ -477,6 +358,12 @@ public class TaskListActivity extends InjectingAppCompatActivity implements loadTaskEditFragment(false, taskEditFragment, taskEditControlFragments); } + @Override + public void onNavigationIconClicked() { + hideKeyboard(); + navigationDrawer.openDrawer(); + } + private void registerFragment(int resId) { controlSetFragments.put(getString(resId), resId); } @@ -531,21 +418,6 @@ public class TaskListActivity extends InjectingAppCompatActivity implements @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { - Callback quickAddTask = new Callback() { - @Override - public void apply(String title) { - TaskListFragment taskListFragment = getTaskListFragment(); - Task task = taskListFragment.addTask(title); - taskCreator.addToCalendar(task); - onTaskListItemClicked(task.getId()); - taskListFragment.loadTaskListContent(); - taskListFragment.onTaskCreated(task.getId(), task.getUUID()); - } - }; - if (voiceInputAssistant.handleActivityResult(requestCode, resultCode, data, quickAddTask)) { - return; - } - if ((requestCode == NavigationDrawerFragment.REQUEST_NEW_LIST || requestCode == TaskListFragment.ACTIVITY_REQUEST_NEW_FILTER) && resultCode == Activity.RESULT_OK) { @@ -560,59 +432,6 @@ public class TaskListActivity extends InjectingAppCompatActivity implements } navigationDrawer.refresh(); - } else if (requestCode == REQUEST_EDIT_TAG) { - if (resultCode == RESULT_OK) { - String action = data.getAction(); - String uuid = data.getStringExtra(TagViewFragment.EXTRA_TAG_UUID); - TaskListFragment tlf = getTaskListFragment(); - if (AstridApiConstants.BROADCAST_EVENT_TAG_RENAMED.equals(action)) { - if (tlf != null) { - TagData td = tlf.getActiveTagData(); - if (td != null && td.getUuid().equals(uuid)) { - td = tagDataDao.fetch(uuid, TagData.PROPERTIES); - if (td != null) { - Filter filter = TagFilterExposer.filterFromTagData(this, td); - onFilterItemClicked(filter); - } - } else { - tlf.refresh(); - } - } - } else if (AstridApiConstants.BROADCAST_EVENT_TAG_DELETED.equals(action)) { - if (tlf != null) { - TagData tagData = tlf.getActiveTagData(); - String activeUuid = RemoteModel.NO_UUID; - if (tagData != null) { - activeUuid = tagData.getUuid(); - } - if (activeUuid.equals(uuid)) { - onFilterItemClicked(BuiltInFilterExposer.getMyTasksFilter(getResources())); - navigationDrawer.clear(); // Should auto refresh - } else { - tlf.refresh(); - } - } - } - - navigationDrawer.refresh(); - } - } else if (requestCode == REQUEST_EDIT_FILTER) { - if (resultCode == RESULT_OK) { - String action = data.getAction(); - if (AstridApiConstants.BROADCAST_EVENT_FILTER_RENAMED.equals(action)) { - CustomFilter customFilter = data.getParcelableExtra(FilterSettingsActivity.TOKEN_FILTER); - onFilterItemClicked(customFilter); - } else if(AstridApiConstants.BROADCAST_EVENT_FILTER_DELETED.equals(action)) { - onFilterItemClicked(BuiltInFilterExposer.getMyTasksFilter(getResources())); - } - - navigationDrawer.refresh(); - } - } else if (requestCode == REQUEST_SORT) { - if (resultCode == RESULT_OK) { - TasksWidget.updateWidgets(this); - onFilterItemClicked(getTaskListFragment().getFilter()); - } } else if (requestCode == REQUEST_UPGRADE) { if (resultCode == RESULT_OK) { if (data != null && data.getBooleanExtra(UpgradeActivity.EXTRA_RESTART, false)) { @@ -626,6 +445,14 @@ public class TaskListActivity extends InjectingAppCompatActivity implements } } + public void refreshNavigationDrawer() { + navigationDrawer.refresh(); + } + + public void clearNavigationDrawer() { + navigationDrawer.clear(); + } + protected void tagsChanged() { tagsChanged(false); } @@ -642,44 +469,6 @@ public class TaskListActivity extends InjectingAppCompatActivity implements navigationDrawer.refreshFilterCount(); } - @Override - public boolean onOptionsItemSelected(MenuItem item) { - final TaskListFragment tlf = getTaskListFragment(); - switch(item.getItemId()) { - case R.id.menu_voice_add: - voiceInputAssistant.startVoiceRecognitionActivity(R.string.voice_create_prompt); - return true; - case R.id.menu_sort: - startActivityForResult(new Intent(this, SortActivity.class) {{ - putExtra(SortActivity.EXTRA_MANUAL_ENABLED, tlf.hasDraggableOption()); - }}, REQUEST_SORT); - return true; - case R.id.menu_tag_settings: - startActivityForResult(new Intent(this, TagSettingsActivity.class) {{ - putExtra(TagSettingsActivity.EXTRA_TAG_DATA, getTaskListFragment().getActiveTagData()); - }}, REQUEST_EDIT_TAG); - return true; - case R.id.menu_show_hidden: - item.setChecked(!item.isChecked()); - preferences.setBoolean(R.string.p_show_hidden_tasks, item.isChecked()); - tlf.reconstructCursor(); - TasksWidget.updateWidgets(this); - return true; - case R.id.menu_show_completed: - item.setChecked(!item.isChecked()); - preferences.setBoolean(R.string.p_show_completed_tasks, item.isChecked()); - tlf.reconstructCursor(); - TasksWidget.updateWidgets(this); - return true; - case R.id.menu_filter_settings: - startActivityForResult(new Intent(this, FilterSettingsActivity.class) {{ - putExtra(FilterSettingsActivity.TOKEN_FILTER, tlf.getFilter()); - }}, REQUEST_EDIT_FILTER); - default: - return super.onOptionsItemSelected(item); - } - } - public TaskListFragment getTaskListFragment() { return (TaskListFragment) getFragmentManager() .findFragmentByTag(TaskListFragment.TAG_TASKLIST_FRAGMENT); @@ -690,17 +479,6 @@ public class TaskListActivity extends InjectingAppCompatActivity implements .findFragmentByTag(TaskEditFragment.TAG_TASKEDIT_FRAGMENT); } - protected void updateToolbar(int drawableResId, boolean showTitle) { - ActionBar supportActionBar = getSupportActionBar(); - if (supportActionBar != null) { - supportActionBar.setDisplayHomeAsUpEnabled(true); - supportActionBar.setDisplayShowTitleEnabled(showTitle); - Drawable drawable = DrawableCompat.wrap(getResources().getDrawable(drawableResId)); - DrawableCompat.setTint(drawable, getResources().getColor(android.R.color.white)); - supportActionBar.setHomeAsUpIndicator(drawable); - } - } - protected Bundle configureIntentAndExtrasWithFilter(Intent intent, Filter filter) { Bundle extras; if(filter instanceof FilterWithCustomIntent) { @@ -781,9 +559,6 @@ public class TaskListActivity extends InjectingAppCompatActivity implements @Override public void taskEditFinished() { getFragmentManager().popBackStack(TaskEditFragment.TAG_TASKEDIT_FRAGMENT, FragmentManager.POP_BACK_STACK_INCLUSIVE); - if (isSinglePaneLayout()) { - updateToolbar(R.drawable.ic_menu_24dp, true); - } hideKeyboard(); } diff --git a/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java b/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java index 6c9e2a4f4..2142c7048 100644 --- a/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java +++ b/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java @@ -11,11 +11,15 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; -import android.content.res.Resources; import android.database.Cursor; import android.database.sqlite.SQLiteException; +import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.support.v4.graphics.drawable.DrawableCompat; +import android.support.v4.view.MenuItemCompat; import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.SearchView; +import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; @@ -24,7 +28,6 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.view.View.OnClickListener; import android.view.View.OnKeyListener; import android.view.ViewGroup; import android.widget.AdapterView; @@ -32,47 +35,68 @@ import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; +import com.todoroo.andlib.data.Callback; import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Field; import com.todoroo.andlib.sql.Join; +import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.utility.AndroidUtilities; +import com.todoroo.astrid.actfm.FilterSettingsActivity; +import com.todoroo.astrid.actfm.TagSettingsActivity; +import com.todoroo.astrid.actfm.TagViewFragment; import com.todoroo.astrid.adapter.TaskAdapter; import com.todoroo.astrid.adapter.TaskAdapter.OnCompletedTaskListener; import com.todoroo.astrid.adapter.TaskAdapter.ViewHolder; import com.todoroo.astrid.api.AstridApiConstants; +import com.todoroo.astrid.api.CustomFilter; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.core.BuiltInFilterExposer; import com.todoroo.astrid.core.SortHelper; +import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TaskAttachmentDao; import com.todoroo.astrid.data.Metadata; +import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.TaskAttachment; +import com.todoroo.astrid.gtasks.GtasksListFragment; import com.todoroo.astrid.gtasks.GtasksPreferenceService; import com.todoroo.astrid.helper.SyncActionHelper; +import com.todoroo.astrid.service.TaskCreator; import com.todoroo.astrid.service.TaskDeleter; import com.todoroo.astrid.service.TaskDuplicator; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.subtasks.SubtasksListFragment; import com.todoroo.astrid.subtasks.SubtasksTagListFragment; +import com.todoroo.astrid.tags.TagFilterExposer; import com.todoroo.astrid.tags.TaskToTagMetadata; import com.todoroo.astrid.timers.TimerPlugin; +import com.todoroo.astrid.voice.VoiceInputAssistant; +import com.todoroo.astrid.widget.TasksWidget; import org.tasks.R; +import org.tasks.activities.SortActivity; import org.tasks.dialogs.DialogBuilder; import org.tasks.injection.ForActivity; import org.tasks.injection.InjectingListFragment; import org.tasks.notifications.NotificationManager; import org.tasks.preferences.ActivityPreferences; +import org.tasks.ui.CheckBoxes; +import org.tasks.ui.MenuColorizer; import java.util.concurrent.atomic.AtomicReference; import javax.inject.Inject; +import butterknife.Bind; +import butterknife.ButterKnife; +import butterknife.OnClick; import timber.log.Timber; +import static com.todoroo.astrid.voice.VoiceInputAssistant.voiceInputAvailable; + /** * Primary activity for the Bente application. Shows a list of upcoming tasks * and a user's coaches. @@ -80,17 +104,21 @@ import timber.log.Timber; * @author Tim Su * */ -public class TaskListFragment extends InjectingListFragment implements SwipeRefreshLayout.OnRefreshListener { +public class TaskListFragment extends InjectingListFragment implements SwipeRefreshLayout.OnRefreshListener, Toolbar.OnMenuItemClickListener { private static final String EXTRA_FILTER = "extra_filter"; private static final String EXTRA_EXTRAS = "extra_extras"; public static final String TAG_TASKLIST_FRAGMENT = "tasklist_fragment"; //$NON-NLS-1$ + public static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; + private static final int REQUEST_EDIT_TAG = 11543; + private static final int REQUEST_EDIT_FILTER = 11544; + private static final int REQUEST_SORT = 11545; + // --- activities public static final long AUTOSYNC_INTERVAL = 90000L; - private static final long WAIT_BEFORE_AUTOSYNC = 2000L; public static final int ACTIVITY_REQUEST_NEW_FILTER = 5; // --- menu codes @@ -117,12 +145,18 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr @Inject GtasksPreferenceService gtasksPreferenceService; @Inject DialogBuilder dialogBuilder; @Inject SyncActionHelper syncActionHelper; + @Inject CheckBoxes checkBoxes; + @Inject VoiceInputAssistant voiceInputAssistant; + @Inject TaskCreator taskCreator; + @Inject TagDataDao tagDataDao; + + @Bind(R.id.swipe_layout) SwipeRefreshLayout swipeRefreshLayout; + @Bind(R.id.swipe_layout_empty) SwipeRefreshLayout emptyView; + @Bind(R.id.toolbar) Toolbar toolbar; private TaskAdapter taskAdapter = null; private RefreshReceiver refreshReceiver = new RefreshReceiver(); - private OnTaskListItemClickedListener mListener; - private SwipeRefreshLayout listView; - private SwipeRefreshLayout emptyView; + private TaskListFragmentCallbackHandler callbacks; protected final AtomicReference sqlQueryTemplate = new AtomicReference<>(); protected Filter filter; @@ -142,7 +176,7 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr } public void setSyncOngoing(boolean ongoing) { - listView.setRefreshing(ongoing); + swipeRefreshLayout.setRefreshing(ongoing); emptyView.setRefreshing(ongoing); } @@ -150,15 +184,17 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr * Container Activity must implement this interface and we ensure that it * does during the onAttach() callback */ - public interface OnTaskListItemClickedListener { + public interface TaskListFragmentCallbackHandler { void onTaskListItemClicked(long taskId); + + void onNavigationIconClicked(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); - mListener = (OnTaskListItemClickedListener) activity; + callbacks = (TaskListFragmentCallbackHandler) activity; } /** @@ -166,9 +202,8 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr * elements, a view with id android:id/empty and a list view with id * android:id/list. It should NOT be attached to root */ - protected View getListBody(ViewGroup root) { - return getActivity().getLayoutInflater().inflate( - R.layout.task_list_body_standard, root, false); + protected int getListBody() { + return R.layout.task_list_body_standard; } /** Called when loading up the activity */ @@ -207,25 +242,141 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - ViewGroup parent = (ViewGroup) getActivity().getLayoutInflater().inflate( - R.layout.task_list_activity, container, false); - parent.findViewById(R.id.fab).setOnClickListener(new OnClickListener() { + View parent = inflater.inflate(R.layout.fragment_task_list, container, false); + ((ViewGroup) parent.findViewById(R.id.task_list_body)).addView(inflater.inflate(getListBody(), null), 0); + ButterKnife.bind(this, parent); + setupRefresh(swipeRefreshLayout); + setupRefresh(emptyView); + ListView listView = (ListView) swipeRefreshLayout.findViewById(android.R.id.list); + listView.setEmptyView(emptyView); + + toolbar.setTitle(filter.listingTitle); + Drawable drawable = DrawableCompat.wrap(getResources().getDrawable(R.drawable.ic_menu_24dp)); + DrawableCompat.setTint(drawable, getResources().getColor(android.R.color.white)); + toolbar.setNavigationIcon(drawable); + toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Task task = addTask(""); - onTaskListItemClicked(task.getId()); + callbacks.onNavigationIconClicked(); } }); - View body = getListBody(parent); - listView = (SwipeRefreshLayout) body.findViewById(R.id.swipe_layout); - emptyView = (SwipeRefreshLayout) parent.findViewById(R.id.swipe_layout_empty); - setupRefresh(listView); - setupRefresh(emptyView); - ((ListView) listView.findViewById(android.R.id.list)).setEmptyView(emptyView); - ((ViewGroup) parent.findViewById(R.id.task_list_body)).addView(body, 0); + toolbar.inflateMenu(R.menu.task_list_fragment); + Menu menu = toolbar.getMenu(); + for (int i = 0 ; i < menu.size() ; i++) { + MenuColorizer.colorMenuItem(menu.getItem(i), getResources().getColor(android.R.color.white)); + } + toolbar.setOnMenuItemClickListener(this); + setupMenu(menu); + return parent; } + private void setupMenu(Menu menu) { + TaskListFragment tlf = this; + MenuItem hidden = menu.findItem(R.id.menu_show_hidden); + if (preferences.getBoolean(R.string.p_show_hidden_tasks, false)) { + hidden.setChecked(true); + } + MenuItem completed = menu.findItem(R.id.menu_show_completed); + if (preferences.getBoolean(R.string.p_show_completed_tasks, false)) { + completed.setChecked(true); + } + if (tlf instanceof GtasksListFragment) { + menu.findItem(R.id.menu_clear_completed).setVisible(true); + menu.findItem(R.id.menu_sort).setVisible(false); + completed.setChecked(true); + completed.setEnabled(false); + } else if(tlf instanceof TagViewFragment) { + menu.findItem(R.id.menu_tag_settings).setVisible(true); + } else { + if(filter instanceof CustomFilter && ((CustomFilter) filter).getId() > 0) { + menu.findItem(R.id.menu_filter_settings).setVisible(true); + } + } + + if (tlf instanceof SubtasksTagListFragment || tlf instanceof SubtasksListFragment) { + hidden.setChecked(true); + hidden.setEnabled(false); + } + + menu.findItem(R.id.menu_voice_add).setVisible(voiceInputAvailable(getActivity())); + final MenuItem item = menu.findItem(R.id.menu_search); + final SearchView actionView = (SearchView) MenuItemCompat.getActionView(item); + actionView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + query = query.trim(); + String title = getString(R.string.FLA_search_filter, query); + Filter savedFilter = new Filter(title, + new QueryTemplate().where + (Criterion.or(Task.NOTES. + like( + "%" + //$NON-NLS-1$ + query + "%" + ), + Task.TITLE. + like( + "%" + //$NON-NLS-1$ + query + "%" + ) + ) + ), null); + + ((TaskListActivity) getActivity()).onFilterItemClicked(savedFilter); + MenuItemCompat.collapseActionView(item); + return true; + } + + @Override + public boolean onQueryTextChange(String query) { + return false; + } + }); + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + switch(item.getItemId()) { + case R.id.menu_voice_add: + voiceInputAssistant.startVoiceRecognitionActivity(R.string.voice_create_prompt); + return true; + case R.id.menu_sort: + startActivityForResult(new Intent(getActivity(), SortActivity.class) {{ + putExtra(SortActivity.EXTRA_MANUAL_ENABLED, hasDraggableOption()); + }}, REQUEST_SORT); + return true; + case R.id.menu_tag_settings: + startActivityForResult(new Intent(getActivity(), TagSettingsActivity.class) {{ + putExtra(TagSettingsActivity.EXTRA_TAG_DATA, getActiveTagData()); + }}, REQUEST_EDIT_TAG); + return true; + case R.id.menu_show_hidden: + item.setChecked(!item.isChecked()); + preferences.setBoolean(R.string.p_show_hidden_tasks, item.isChecked()); + reconstructCursor(); + TasksWidget.updateWidgets(getActivity()); + return true; + case R.id.menu_show_completed: + item.setChecked(!item.isChecked()); + preferences.setBoolean(R.string.p_show_completed_tasks, item.isChecked()); + reconstructCursor(); + TasksWidget.updateWidgets(getActivity()); + return true; + case R.id.menu_filter_settings: + startActivityForResult(new Intent(getActivity(), FilterSettingsActivity.class) {{ + putExtra(FilterSettingsActivity.TOKEN_FILTER, filter); + }}, REQUEST_EDIT_FILTER); + default: + return super.onOptionsItemSelected(item); + } + } + + @OnClick(R.id.fab) + void createNewTask() { + Task task = addTask(""); + onTaskListItemClicked(task.getId()); + } + public Task addTask(String title) { return taskService.createWithValues(filter.valuesForNewTasks, title); } @@ -241,19 +392,13 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr private void setupRefresh(SwipeRefreshLayout layout) { layout.setOnRefreshListener(this); - Resources resources = getResources(); - layout.setColorSchemeColors( - resources.getColor(R.color.importance_1), - resources.getColor(R.color.importance_2), - resources.getColor(R.color.importance_3), - resources.getColor(R.color.importance_4)); + layout.setColorSchemeColors(checkBoxes.getPriorityColorsArray()); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // We have a menu item to show in action bar. - setHasOptionsMenu(true); final ListView listView = getListView(); registerForContextMenu(listView); @@ -346,50 +491,17 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr refreshFilterCount(); - initiateAutomaticSync(); + initiateAutomaticSyncImpl(); refresh(); } - protected boolean isCurrentTaskListFragment() { - TaskListActivity activity = (TaskListActivity) getActivity(); - if (activity != null) { - return activity.getTaskListFragment() == this; - } - return false; - } - - public final void initiateAutomaticSync() { - final TaskListActivity activity = (TaskListActivity) getActivity(); - if (activity == null) { - return; - } - if (activity.isDoublePaneLayout()) { - initiateAutomaticSyncImpl(); - } else { - // In single fragment case, we're using swipe between lists, - // so wait a couple seconds before initiating the autosync. - new Thread() { - @Override - public void run() { - AndroidUtilities.sleepDeep(WAIT_BEFORE_AUTOSYNC); - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - initiateAutomaticSyncImpl(); - } - }); - } - }.start(); - } - } - /** * Implementation of initiation automatic sync. Subclasses should override this method; * the above method takes care of calling it in the correct way */ protected void initiateAutomaticSyncImpl() { - if (isCurrentTaskListFragment() && BuiltInFilterExposer.isInbox(context, filter)) { + if (BuiltInFilterExposer.isInbox(context, filter)) { syncActionHelper.initiateAutomaticSync(); } } @@ -620,6 +732,75 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr } } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == VOICE_RECOGNITION_REQUEST_CODE) { + if (resultCode == Activity.RESULT_OK) { + Callback quickAddTask = new Callback() { + @Override + public void apply(String title) { + Task task = addTask(title); + taskCreator.addToCalendar(task); + onTaskListItemClicked(task.getId()); + loadTaskListContent(); + onTaskCreated(task.getId(), task.getUUID()); + } + }; + voiceInputAssistant.handleActivityResult(data, quickAddTask); + } + } else if (requestCode == REQUEST_EDIT_TAG) { + if (resultCode == Activity.RESULT_OK) { + String action = data.getAction(); + String uuid = data.getStringExtra(TagViewFragment.EXTRA_TAG_UUID); + if (AstridApiConstants.BROADCAST_EVENT_TAG_RENAMED.equals(action)) { + TagData td = getActiveTagData(); + if (td != null && td.getUuid().equals(uuid)) { + td = tagDataDao.fetch(uuid, TagData.PROPERTIES); + if (td != null) { + Filter filter = TagFilterExposer.filterFromTagData(getActivity(), td); + ((TaskListActivity) getActivity()).onFilterItemClicked(filter); + } + } else { + refresh(); + } + } else if (AstridApiConstants.BROADCAST_EVENT_TAG_DELETED.equals(action)) { + TagData tagData = getActiveTagData(); + String activeUuid = RemoteModel.NO_UUID; + if (tagData != null) { + activeUuid = tagData.getUuid(); + } + if (activeUuid.equals(uuid)) { + ((TaskListActivity) getActivity()).onFilterItemClicked(BuiltInFilterExposer.getMyTasksFilter(getResources())); + ((TaskListActivity) getActivity()).clearNavigationDrawer(); // Should auto refresh + } else { + refresh(); + } + } + + ((TaskListActivity) getActivity()).refreshNavigationDrawer(); + } + } else if (requestCode == REQUEST_EDIT_FILTER) { + if (resultCode == Activity.RESULT_OK) { + String action = data.getAction(); + if (AstridApiConstants.BROADCAST_EVENT_FILTER_RENAMED.equals(action)) { + CustomFilter customFilter = data.getParcelableExtra(FilterSettingsActivity.TOKEN_FILTER); + ((TaskListActivity) getActivity()).onFilterItemClicked(customFilter); + } else if(AstridApiConstants.BROADCAST_EVENT_FILTER_DELETED.equals(action)) { + ((TaskListActivity) getActivity()).onFilterItemClicked(BuiltInFilterExposer.getMyTasksFilter(getResources())); + } + + ((TaskListActivity) getActivity()).refreshNavigationDrawer(); + } + } else if (requestCode == REQUEST_SORT) { + if (resultCode == Activity.RESULT_OK) { + TasksWidget.updateWidgets(getActivity()); + ((TaskListActivity) getActivity()).onFilterItemClicked(filter); + } + } else { + super.onActivityResult(requestCode, resultCode, data); + } + } + @Override public boolean onContextItemSelected(android.view.MenuItem item) { return onOptionsItemSelected(item); @@ -629,10 +810,6 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr public boolean onOptionsItemSelected(final MenuItem item) { long itemId; - if (!isCurrentTaskListFragment()) { - return false; - } - switch (item.getItemId()) { // --- context menu items @@ -677,7 +854,7 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr } public void onTaskListItemClicked(long taskId) { - mListener.onTaskListItemClicked(taskId); + callbacks.onTaskListItemClicked(taskId); } protected boolean hasDraggableOption() { diff --git a/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.java b/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.java index bd4d282c9..bdc1eaf8a 100644 --- a/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.java +++ b/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.java @@ -185,8 +185,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable { viewHolder.completeBox = (CheckableImageView)view.findViewById(R.id.completeBox); viewHolder.dueDate = (TextView)view.findViewById(R.id.dueDate); viewHolder.tagsView = (TextView)view.findViewById(R.id.tagsDisplay); - viewHolder.details1 = (TextView)view.findViewById(R.id.details1); - viewHolder.details2 = (TextView)view.findViewById(R.id.details2); viewHolder.taskActionContainer = view.findViewById(R.id.taskActionContainer); viewHolder.taskActionIcon = (ImageView)view.findViewById(R.id.taskActionIcon); @@ -202,9 +200,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable { for(int i = 0; i < view.getChildCount(); i++) { view.getChildAt(i).setTag(viewHolder); } - if(viewHolder.details1 != null) { - viewHolder.details1.setTag(viewHolder); - } // add UI component listeners addListeners(view); @@ -256,7 +251,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable { public CheckableImageView completeBox; public TextView dueDate; public TextView tagsView; - public TextView details1, details2; public View taskActionContainer; public ImageView taskActionIcon; public String tagsString; // From join query, not part of the task model @@ -276,8 +270,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable { viewHolder.completeBox.setMinimumHeight(minRowHeight); } - viewHolder.view.setBackgroundColor(resources.getColor(android.R.color.transparent)); - // name final TextView nameView = viewHolder.nameView; { String nameValue = task.getTitle(); @@ -294,11 +286,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable { setupDueDateAndTags(viewHolder, task); - if(viewHolder.details1 != null) { - viewHolder.details1.setVisibility(View.GONE); - viewHolder.details2.setVisibility(View.GONE); - } - // Task action ImageView taskAction = viewHolder.taskActionIcon; if (taskAction != null) { @@ -457,12 +444,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable { setupDueDateAndTags(viewHolder, task); float detailTextSize = Math.max(10, fontSize * 14 / 20); - if(viewHolder.details1 != null) { - viewHolder.details1.setTextSize(detailTextSize); - } - if(viewHolder.details2 != null) { - viewHolder.details2.setTextSize(detailTextSize); - } if(viewHolder.dueDate != null) { viewHolder.dueDate.setTextSize(detailTextSize); viewHolder.dueDate.setTypeface(null, 0); diff --git a/src/main/java/com/todoroo/astrid/subtasks/SubtasksListFragment.java b/src/main/java/com/todoroo/astrid/subtasks/SubtasksListFragment.java index c157f99fc..a9773d921 100644 --- a/src/main/java/com/todoroo/astrid/subtasks/SubtasksListFragment.java +++ b/src/main/java/com/todoroo/astrid/subtasks/SubtasksListFragment.java @@ -9,8 +9,6 @@ import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.text.TextUtils; -import android.view.View; -import android.view.ViewGroup; import android.widget.ListView; import com.todoroo.andlib.data.TodorooCursor; @@ -62,8 +60,8 @@ public class SubtasksListFragment extends TaskListFragment { } @Override - protected View getListBody(ViewGroup root) { - return getActivity().getLayoutInflater().inflate(R.layout.task_list_body_subtasks, root, false); + protected int getListBody() { + return R.layout.task_list_body_subtasks; } @Override diff --git a/src/main/java/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java b/src/main/java/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java index 358602ab3..dc6d5f517 100644 --- a/src/main/java/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java +++ b/src/main/java/com/todoroo/astrid/subtasks/SubtasksTagListFragment.java @@ -8,8 +8,6 @@ package com.todoroo.astrid.subtasks; import android.app.Activity; import android.content.Context; import android.os.Bundle; -import android.view.View; -import android.view.ViewGroup; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.astrid.actfm.TagViewFragment; @@ -51,9 +49,8 @@ public class SubtasksTagListFragment extends TagViewFragment { } @Override - protected View getListBody(ViewGroup root) { - return getActivity().getLayoutInflater().inflate( - R.layout.task_list_body_subtasks, root, false); + protected int getListBody() { + return R.layout.task_list_body_subtasks; } @Override diff --git a/src/main/java/com/todoroo/astrid/ui/EditTitleControlSet.java b/src/main/java/com/todoroo/astrid/ui/EditTitleControlSet.java index 43969de1c..761d18a44 100644 --- a/src/main/java/com/todoroo/astrid/ui/EditTitleControlSet.java +++ b/src/main/java/com/todoroo/astrid/ui/EditTitleControlSet.java @@ -155,7 +155,8 @@ public class EditTitleControlSet extends TaskEditControlFragment { @Override public boolean hasChanges(Task original) { - return !getTitle().equals(original.getTitle()); + return !getTitle().equals(original.getTitle()) || + completeBox.isChecked() != original.isCompleted(); } @Override diff --git a/src/main/java/com/todoroo/astrid/voice/VoiceInputAssistant.java b/src/main/java/com/todoroo/astrid/voice/VoiceInputAssistant.java index 5408910f0..f27879d77 100644 --- a/src/main/java/com/todoroo/astrid/voice/VoiceInputAssistant.java +++ b/src/main/java/com/todoroo/astrid/voice/VoiceInputAssistant.java @@ -5,7 +5,7 @@ */ package com.todoroo.astrid.voice; -import android.app.Activity; +import android.app.Fragment; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; @@ -13,6 +13,7 @@ import android.content.pm.ResolveInfo; import android.speech.RecognizerIntent; import com.todoroo.andlib.data.Callback; +import com.todoroo.astrid.activity.TaskListFragment; import java.util.ArrayList; import java.util.List; @@ -35,7 +36,6 @@ import javax.inject.Singleton; public class VoiceInputAssistant { /** requestcode for activityresult from voicerecognizer-intent */ - public static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; /** * Call this to see if your phone supports voiceinput in its current configuration. @@ -57,17 +57,15 @@ public class VoiceInputAssistant { * Use the mightier constructor to specify your own requestCode in this case for every additional use on an fragment. * If you only use one microphone-button on an fragment, you can leave it to its default, VOICE_RECOGNITION_REQUEST_CODE. */ - private int requestCode = VOICE_RECOGNITION_REQUEST_CODE; - private Activity activity; + private Fragment fragment; /** * This constructor can be called from a widget with a voice-button calling a dummy-activity. * - * @param activity dummy-activity that starts the voice-request. */ @Inject - public VoiceInputAssistant(Activity activity) { - this.activity = activity; + public VoiceInputAssistant(Fragment fragment) { + this.fragment = fragment; } /** @@ -80,8 +78,8 @@ public class VoiceInputAssistant { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1); - intent.putExtra(RecognizerIntent.EXTRA_PROMPT, activity.getString(prompt)); - activity.startActivityForResult(intent, requestCode); + intent.putExtra(RecognizerIntent.EXTRA_PROMPT, fragment.getString(prompt)); + fragment.startActivityForResult(intent, TaskListFragment.VOICE_RECOGNITION_REQUEST_CODE); } /** @@ -94,31 +92,22 @@ public class VoiceInputAssistant { * If this method returns false, then it wasnt a request with a RecognizerIntent, so you can handle * these other requests as you need. * - * @param activityRequestCode if this equals the requestCode specified by constructor, then results of voice-recognition */ - public boolean handleActivityResult(int activityRequestCode, int resultCode, Intent data, Callback onVoiceRecognition) { - boolean result = false; + public void handleActivityResult(Intent data, Callback onVoiceRecognition) { // handle the result of voice recognition, put it into the textfield - if (activityRequestCode == this.requestCode) { - // this was handled here, even if voicerecognition fails for any reason - // so your program flow wont get chaotic if you dont explicitly state - // your own requestCodes. - result = true; - if (resultCode == Activity.RESULT_OK) { - // Fill the quickAddBox-view with the string the recognizer thought it could have heard - ArrayList match = data.getStringArrayListExtra( - RecognizerIntent.EXTRA_RESULTS); - // make sure we only do this if there is SomeThing (tm) returned - if (match != null && match.size() > 0 && match.get(0).length() > 0) { - String recognizedSpeech = match.get(0); - recognizedSpeech = recognizedSpeech.substring(0, 1).toUpperCase() + - recognizedSpeech.substring(1).toLowerCase(); + // this was handled here, even if voicerecognition fails for any reason + // so your program flow wont get chaotic if you dont explicitly state + // your own requestCodes. + // Fill the quickAddBox-view with the string the recognizer thought it could have heard + ArrayList match = data.getStringArrayListExtra( + RecognizerIntent.EXTRA_RESULTS); + // make sure we only do this if there is SomeThing (tm) returned + if (match != null && match.size() > 0 && match.get(0).length() > 0) { + String recognizedSpeech = match.get(0); + recognizedSpeech = recognizedSpeech.substring(0, 1).toUpperCase() + + recognizedSpeech.substring(1).toLowerCase(); - onVoiceRecognition.apply(recognizedSpeech); - } - } + onVoiceRecognition.apply(recognizedSpeech); } - - return result; } } diff --git a/src/main/java/org/tasks/ui/CheckBoxes.java b/src/main/java/org/tasks/ui/CheckBoxes.java index 60f839200..b44f91a45 100644 --- a/src/main/java/org/tasks/ui/CheckBoxes.java +++ b/src/main/java/org/tasks/ui/CheckBoxes.java @@ -6,6 +6,7 @@ import android.graphics.drawable.Drawable; import android.support.v4.graphics.drawable.DrawableCompat; import com.google.common.collect.ImmutableList; +import com.google.common.primitives.Ints; import org.tasks.R; import org.tasks.injection.ForApplication; @@ -25,6 +26,7 @@ public class CheckBoxes { private static List repeatingCheckboxes; private static List completedCheckboxes; private static List priorityColors; + private static int[] priorityColorsArray; @Inject public CheckBoxes(@ForApplication Context context) { @@ -38,6 +40,7 @@ public class CheckBoxes { context.getResources().getColor(R.color.importance_2), context.getResources().getColor(R.color.importance_3), context.getResources().getColor(R.color.importance_4)); + priorityColorsArray = Ints.toArray(priorityColors); initialized = true; } } @@ -46,6 +49,10 @@ public class CheckBoxes { return priorityColors; } + public int[] getPriorityColorsArray() { + return priorityColorsArray; + } + List getCheckBoxes() { return checkboxes; } diff --git a/src/main/java/org/tasks/ui/EmptyTaskEditFragment.java b/src/main/java/org/tasks/ui/EmptyTaskEditFragment.java new file mode 100644 index 000000000..40065e550 --- /dev/null +++ b/src/main/java/org/tasks/ui/EmptyTaskEditFragment.java @@ -0,0 +1,18 @@ +package org.tasks.ui; + +import android.app.Fragment; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.tasks.R; + +public class EmptyTaskEditFragment extends Fragment { + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_task_edit_empty, container, false); + } +} diff --git a/src/main/res/layout/task_list_wrapper.xml b/src/main/res/layout-w820dp/task_list_activity.xml similarity index 55% rename from src/main/res/layout/task_list_wrapper.xml rename to src/main/res/layout-w820dp/task_list_activity.xml index 5a5970a08..013b23cb8 100644 --- a/src/main/res/layout/task_list_wrapper.xml +++ b/src/main/res/layout-w820dp/task_list_activity.xml @@ -7,17 +7,23 @@ + android:background="?attr/asContentBackground" + android:orientation="horizontal" + android:baselineAligned="false"> - - - + + + + android:layout_weight="40" /> diff --git a/src/main/res/layout-w820dp/task_list_wrapper.xml b/src/main/res/layout-w820dp/task_list_wrapper.xml deleted file mode 100644 index 625cd0b8c..000000000 --- a/src/main/res/layout-w820dp/task_list_wrapper.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/res/layout/control_set_deadline.xml b/src/main/res/layout/control_set_deadline.xml index 4703d6461..53e67f40c 100644 --- a/src/main/res/layout/control_set_deadline.xml +++ b/src/main/res/layout/control_set_deadline.xml @@ -3,10 +3,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="top" - android:orientation="horizontal"> + android:orientation="horizontal" + android:baselineAligned="false"> diff --git a/src/main/res/layout/control_set_description.xml b/src/main/res/layout/control_set_description.xml index cf7d25ce9..ac0d5fe11 100644 --- a/src/main/res/layout/control_set_description.xml +++ b/src/main/res/layout/control_set_description.xml @@ -1,6 +1,5 @@ + android:orientation="horizontal"> - + android:paddingRight="@dimen/task_edit_drawable_padding_left_right" + android:paddingEnd="@dimen/task_edit_drawable_padding_left_right" + android:scaleType="center" /> - + - + - + diff --git a/src/main/res/layout/task_edit_fragment.xml b/src/main/res/layout/fragment_task_edit.xml similarity index 70% rename from src/main/res/layout/task_edit_fragment.xml rename to src/main/res/layout/fragment_task_edit.xml index 0313e839e..179a0d437 100644 --- a/src/main/res/layout/task_edit_fragment.xml +++ b/src/main/res/layout/fragment_task_edit.xml @@ -1,94 +1,86 @@ - - + android:background="?attr/asContentBackground" + android:orientation="vertical"> + + + + + android:layout_height="0dp" + android:layout_weight="100" + android:overScrollMode="never"> + android:gravity="center_horizontal" + android:orientation="vertical"> + android:layout_height="wrap_content" /> + android:layout_height="wrap_content" /> + android:layout_height="wrap_content" /> + android:layout_height="wrap_content" /> + android:layout_height="wrap_content" /> + android:layout_height="wrap_content" /> + android:layout_height="wrap_content" /> + android:layout_height="wrap_content" /> + android:layout_height="wrap_content" /> + android:layout_height="wrap_content" /> + android:layout_height="wrap_content" /> + android:orientation="vertical" /> - - + android:background="?attr/asToolbarSeparator" /> @@ -128,32 +117,31 @@ android:layout_height="39dip" android:layout_marginRight="3dip" android:layout_weight="1" + android:background="@android:color/transparent" android:paddingBottom="2dip" android:scaleType="centerInside" - android:background="@android:color/transparent" android:src="@drawable/ic_camera_alt_white_24dp" /> @@ -165,9 +153,9 @@ android:layout_marginLeft="3dip" android:layout_weight="1" android:background="@android:color/transparent" - android:tint="@android:color/white" - android:src="@drawable/ic_add_24dp" android:scaleType="center" + android:src="@drawable/ic_add_24dp" + android:tint="@android:color/white" android:visibility="gone" /> diff --git a/src/main/res/layout/fragment_task_edit_empty.xml b/src/main/res/layout/fragment_task_edit_empty.xml new file mode 100644 index 000000000..2b1d36b82 --- /dev/null +++ b/src/main/res/layout/fragment_task_edit_empty.xml @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/src/main/res/layout/fragment_task_list.xml b/src/main/res/layout/fragment_task_list.xml new file mode 100644 index 000000000..f56e49694 --- /dev/null +++ b/src/main/res/layout/fragment_task_list.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/res/layout/task_adapter_row_simple.xml b/src/main/res/layout/task_adapter_row_simple.xml index 3a5d8ca48..a90eef696 100644 --- a/src/main/res/layout/task_adapter_row_simple.xml +++ b/src/main/res/layout/task_adapter_row_simple.xml @@ -97,29 +97,6 @@ - - - - - - - - - + - + android:layout_height="match_parent" + android:background="?attr/asContentBackground" /> - + - + - - - diff --git a/src/main/res/layout/task_list_body_standard.xml b/src/main/res/layout/task_list_body_standard.xml index 612d9a8ff..d7eee015b 100644 --- a/src/main/res/layout/task_list_body_standard.xml +++ b/src/main/res/layout/task_list_body_standard.xml @@ -1,12 +1,14 @@ + android:layout_height="fill_parent" + android:elevation="@dimen/elevation_task_list"> + android:layout_height="fill_parent" /> diff --git a/src/main/res/layout/task_list_body_subtasks.xml b/src/main/res/layout/task_list_body_subtasks.xml index 3127b2694..33bc26447 100644 --- a/src/main/res/layout/task_list_body_subtasks.xml +++ b/src/main/res/layout/task_list_body_subtasks.xml @@ -1,7 +1,9 @@ + android:layout_height="wrap_content" + android:elevation="@dimen/elevation_task_list" > diff --git a/src/main/res/layout/toolbar_separator.xml b/src/main/res/layout/toolbar_separator.xml index a7767a9a4..e119f473e 100644 --- a/src/main/res/layout/toolbar_separator.xml +++ b/src/main/res/layout/toolbar_separator.xml @@ -1,4 +1,5 @@ diff --git a/src/main/res/menu/task_edit_fragment.xml b/src/main/res/menu/task_edit_fragment.xml index b31e94370..9d9481d2e 100644 --- a/src/main/res/menu/task_edit_fragment.xml +++ b/src/main/res/menu/task_edit_fragment.xml @@ -2,12 +2,6 @@ - إخفاء حتى... وصف كم من الوقت ستأخذ؟ - حفظ التغيرات - نشاط التاريخ المحدد الوقت المحدد يوم قبل الموعد diff --git a/src/main/res/values-bg-rBG/strings.xml b/src/main/res/values-bg-rBG/strings.xml index 9baecaea3..cc42cb409 100644 --- a/src/main/res/values-bg-rBG/strings.xml +++ b/src/main/res/values-bg-rBG/strings.xml @@ -61,7 +61,6 @@ Описание Колко време ще отнеме? Време, което вече е отделено - Запази промените Запази Приблизително %s Изминали %s diff --git a/src/main/res/values-ca/strings.xml b/src/main/res/values-ca/strings.xml index 2c88ff435..8744a67c9 100644 --- a/src/main/res/values-ca/strings.xml +++ b/src/main/res/values-ca/strings.xml @@ -50,8 +50,6 @@ Notes Quant temps us portarà? Temps que ja s\'ha invertit en la Tasca - Desa els canvis - Activitat cap hora Al finalitzar la data límit El dia abans del venciment diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml index d8ee30973..67850feaf 100644 --- a/src/main/res/values-cs/strings.xml +++ b/src/main/res/values-cs/strings.xml @@ -53,8 +53,6 @@ Poznámky Kolik času asi zabere? Jak dlouho už na úkolu pracujete - Uložit změny - Činnost Zal. %s Uplynutí %s Bez času diff --git a/src/main/res/values-da/strings.xml b/src/main/res/values-da/strings.xml index 7069c145d..b9b6834a4 100644 --- a/src/main/res/values-da/strings.xml +++ b/src/main/res/values-da/strings.xml @@ -47,8 +47,6 @@ Noter Hvor lang tid tager det? Tid allerede brugt på denne opgave - Gem ændringer - Aktivitet Vigtighed Noter Filer diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index f3d591b1a..3e6106ed6 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -56,9 +56,7 @@ Beschreibung Wie lange wird es dauern? Zeit, die schon für die Aufgabe gebraucht wurde - Änderungen speichern Speichern - Aktivität Geschätzt %s %s verstrichen Ohne Uhrzeit diff --git a/src/main/res/values-el/strings.xml b/src/main/res/values-el/strings.xml index a998e5e4a..ae5462c9d 100644 --- a/src/main/res/values-el/strings.xml +++ b/src/main/res/values-el/strings.xml @@ -52,8 +52,6 @@ Περιγραφή Πόσο θα διαρκέσει? Χρόνος που ήδη πέρασε - Αποθήκευση αλλαγών - Δραστηριότητα Εκτιμώμενο %s Πέρασε %s Χωρίς ώρα diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index d47aedfbc..e61d3897b 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -57,9 +57,7 @@ Descripción ¿Cuanto tiempo llevará? Tiempo ya empleado en la tarea - Guardar cambios Guardar - Actividad Transcurrido %s Sin horario Fecha de vencimiento diff --git a/src/main/res/values-fa/strings.xml b/src/main/res/values-fa/strings.xml index 0986f9e14..d81d7f55b 100644 --- a/src/main/res/values-fa/strings.xml +++ b/src/main/res/values-fa/strings.xml @@ -39,9 +39,7 @@ توضیحات این چقدر طول میکشد ؟ زمان سپری شده - ذخیره تغییرات ذخیره - فعالیت بدون زمان تاریخ موعود زمان موعود diff --git a/src/main/res/values-fi/strings.xml b/src/main/res/values-fi/strings.xml index 32802eaa3..a6a43692c 100644 --- a/src/main/res/values-fi/strings.xml +++ b/src/main/res/values-fi/strings.xml @@ -21,8 +21,6 @@ Kuvaus Kuinka pitkään se kestää? Aika on jo käytetty - Tallenna muutokset - Toiminta Uh oh! It looks like you may have a corrupted database. If you see this error regularly, we suggest you clear all data (Settings->Sync and backup->Manage old tasks->Clear all data) and restore diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index daef88d6e..4cfd617a0 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -56,9 +56,7 @@ Masquer jusqu\'à %s Combien de temps cela va-t-il prendre ? Temps déjà passé sur la tâche - Sauvegarder les modifications Sauvegarder - Activité Restant %s Passé %s Pas d\'heure diff --git a/src/main/res/values-hu/strings.xml b/src/main/res/values-hu/strings.xml index 9b9af630b..e91c60cb4 100644 --- a/src/main/res/values-hu/strings.xml +++ b/src/main/res/values-hu/strings.xml @@ -30,8 +30,6 @@ Leírás Meddig fog tartani? Már eltöltött idő - Módosítások mentése - Tevékenység Prioritás Leírás Fájlok diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml index d1f4ff976..01d99f50a 100644 --- a/src/main/res/values-it/strings.xml +++ b/src/main/res/values-it/strings.xml @@ -58,9 +58,7 @@ Descrizione Quanto tempo impiegherà? Tempo già speso per l\'attività - Salva le modifiche Salva - Attività Stima %s Trascorso %s Senza ora diff --git a/src/main/res/values-iw/strings.xml b/src/main/res/values-iw/strings.xml index 615f09c7c..9b441ca18 100644 --- a/src/main/res/values-iw/strings.xml +++ b/src/main/res/values-iw/strings.xml @@ -53,8 +53,6 @@ תיאור כמה זמן תיקח המשימה? זמן שכבר הושקע במשימה - שמירת השינויים - פעילות זמן שעבר %s ללא שעה מסויימת עד ה diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml index 9e5635907..fd30cc81c 100644 --- a/src/main/res/values-ja/strings.xml +++ b/src/main/res/values-ja/strings.xml @@ -58,9 +58,7 @@ 概要 所要時間は? 既にタスクに費やした時間 - 変更の保存 保存 - 活動 予定 %s 経過時間 %s 時間がありません diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml index 678217168..e9f39a02e 100644 --- a/src/main/res/values-ko/strings.xml +++ b/src/main/res/values-ko/strings.xml @@ -60,9 +60,7 @@ 설명 일정 완료 예상 시간은? 일정에 이미 소모한 시간 - 변경사항 저장 저장 - 활동 내역 동부표준시 %s 경과 시간: %s 시한 없음 diff --git a/src/main/res/values-nb/strings.xml b/src/main/res/values-nb/strings.xml index 5823aa208..7324eb7df 100644 --- a/src/main/res/values-nb/strings.xml +++ b/src/main/res/values-nb/strings.xml @@ -45,7 +45,6 @@ Notater Hvor lang tid vil det ta? Tid brukt på oppgaven til nå - Lagre endringer Viktighet Notater Filer diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index ebb89838d..2261d09b5 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -58,9 +58,7 @@ Omschrijving Tijdsduur Bestede tijd tot nu toe - Wijzigingen opslaan Opslaan - Activiteit Gesch. %s Verstreken %s Geen tijd diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index 51e5cb68f..7ce79ec0b 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -53,8 +53,6 @@ Opis Jak długo to zajmie? Czas dotychczas spędzony nad tym zadaniem - Zapisz zmiany - Aktywność Minęło %s Bez godziny W terminie diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index ad35333cc..7d63f2b74 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -52,8 +52,6 @@ Descrição Quanto tempo isto vai levar? Tempo já gasto na tarefa - Salvar alterações - Atividades Decorrido %s Sem horário Data de vencimento diff --git a/src/main/res/values-pt/strings.xml b/src/main/res/values-pt/strings.xml index c85e8c6dd..9d154c8b6 100644 --- a/src/main/res/values-pt/strings.xml +++ b/src/main/res/values-pt/strings.xml @@ -58,9 +58,7 @@ Descrição Quanto tempo irá durar? Tempo já gasto - Gravar alterações Guardar - Atividade Decorrido %s Sem tempo Data limite diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml index d93e41b38..0c1da0cbb 100644 --- a/src/main/res/values-ru/strings.xml +++ b/src/main/res/values-ru/strings.xml @@ -58,9 +58,7 @@ Описание Требуемое время Затраченное время - Сохранить изменения Сохранить - Действия Ост. %s Прошло %s Без времени diff --git a/src/main/res/values-sk/strings.xml b/src/main/res/values-sk/strings.xml index f47a21f35..c54d5bfbf 100644 --- a/src/main/res/values-sk/strings.xml +++ b/src/main/res/values-sk/strings.xml @@ -55,9 +55,7 @@ Popis Ako dlho to bude trvať? Ako dlho už pracujete na úlohe - Uložiť zmeny Uložiť - Aktivita Spolu %s Uplynulo %s Bez času diff --git a/src/main/res/values-sl-rSI/strings.xml b/src/main/res/values-sl-rSI/strings.xml index 0402fe8ba..51a749cb3 100644 --- a/src/main/res/values-sl-rSI/strings.xml +++ b/src/main/res/values-sl-rSI/strings.xml @@ -56,8 +56,6 @@ Opis Kako dolgo bo trajalo? Porabljen čas - Shrani spremembe - Dejavnost Cca. %s %s je potekel Čas ni določen diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml index cb67ac9b7..c5d58824f 100644 --- a/src/main/res/values-sv/strings.xml +++ b/src/main/res/values-sv/strings.xml @@ -53,8 +53,6 @@ Beskrivning Hur lång tid kommer det att ta? Tid redan spenderad på uppgiften - Spara ändringar - Aktivitet Ung. %s Förfluten %s Ingen tid diff --git a/src/main/res/values-th/strings.xml b/src/main/res/values-th/strings.xml index c27647aa2..6f328c308 100644 --- a/src/main/res/values-th/strings.xml +++ b/src/main/res/values-th/strings.xml @@ -23,7 +23,6 @@ สรุปแผนงาน ความสำคัญ บันทึกย่อ - บันทึกการเปลี่ยนแปลง ความสำคัญ บันทึกย่อ รูปโฉม diff --git a/src/main/res/values-tr/strings.xml b/src/main/res/values-tr/strings.xml index 39918e294..5feb71576 100644 --- a/src/main/res/values-tr/strings.xml +++ b/src/main/res/values-tr/strings.xml @@ -45,8 +45,6 @@ Açıklama Ne kadar sürecek? Görev üzerinde çalışılan zaman - Değişiklikleri Kaydet - Etkinlik Zaman yok Ne Zaman Açıklama diff --git a/src/main/res/values-uk/strings.xml b/src/main/res/values-uk/strings.xml index 920af0e1f..734ee14a3 100644 --- a/src/main/res/values-uk/strings.xml +++ b/src/main/res/values-uk/strings.xml @@ -56,8 +56,6 @@ Опис Як довго це триватиме? Час вже потрачео - Зберегти зміни - Активність Зал. %s Час, що минув %s Без часу diff --git a/src/main/res/values-v21/dimens.xml b/src/main/res/values-v21/dimens.xml new file mode 100644 index 000000000..c17f09161 --- /dev/null +++ b/src/main/res/values-v21/dimens.xml @@ -0,0 +1,4 @@ + + + 3dp + \ No newline at end of file diff --git a/src/main/res/values-v21/styles.xml b/src/main/res/values-v21/styles.xml index 823073c0c..b0abd755e 100644 --- a/src/main/res/values-v21/styles.xml +++ b/src/main/res/values-v21/styles.xml @@ -1,10 +1,13 @@ - - \ No newline at end of file diff --git a/src/main/res/values-w820dp/styles.xml b/src/main/res/values-w820dp/styles.xml new file mode 100644 index 000000000..0bb3904e1 --- /dev/null +++ b/src/main/res/values-w820dp/styles.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index 50ddf7003..159957a56 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -45,8 +45,6 @@ 描述 要花多久时间? 已用于任务的时间 - 保存更改 - 活动 没有时间 时间 描述 diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml index 2fc67dd43..79a563c2d 100644 --- a/src/main/res/values-zh-rTW/strings.xml +++ b/src/main/res/values-zh-rTW/strings.xml @@ -51,8 +51,6 @@ 描述 要花多久時間? 已經用掉的時間 - 儲存變更 - 活動 已經過 %s 沒有時間 時間 diff --git a/src/main/res/values/dimens.xml b/src/main/res/values/dimens.xml index 07f85fb97..ac0055d72 100644 --- a/src/main/res/values/dimens.xml +++ b/src/main/res/values/dimens.xml @@ -17,4 +17,8 @@ 0.54 0.38 0.12 + + 8dp + 6dp + 0dp \ No newline at end of file diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 99a8f197c..f2692b8ff 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -194,14 +194,8 @@ File %1$s contained %2$s.\n\n Time already spent - - Save Changes - Save - - Activity - Est. %s Elapsed %s diff --git a/src/main/res/values/styles.xml b/src/main/res/values/styles.xml index 6291473c9..2f45ecc13 100644 --- a/src/main/res/values/styles.xml +++ b/src/main/res/values/styles.xml @@ -36,10 +36,6 @@ ?attr/asTextColor - - + + + +