diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml
index a693ac3ae..523d2e94b 100644
--- a/astrid/AndroidManifest.xml
+++ b/astrid/AndroidManifest.xml
@@ -247,6 +247,14 @@
+
+
+
+
+
+
+
diff --git a/astrid/res/layout/beast_mode_pref_activity.xml b/astrid/res/layout/beast_mode_pref_activity.xml
new file mode 100644
index 000000000..318e4fc19
--- /dev/null
+++ b/astrid/res/layout/beast_mode_pref_activity.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/astrid/res/layout/preference_draggable_row.xml b/astrid/res/layout/preference_draggable_row.xml
new file mode 100644
index 000000000..91419075c
--- /dev/null
+++ b/astrid/res/layout/preference_draggable_row.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
diff --git a/astrid/res/values/strings-core.xml b/astrid/res/values/strings-core.xml
index d040c4edb..ff398413b 100644
--- a/astrid/res/values/strings-core.xml
+++ b/astrid/res/values/strings-core.xml
@@ -346,6 +346,32 @@
- Specific Day/Time
+
+ Task Title
+ Who
+ When
+ More Section
+ Importance
+ Lists
+ Notes
+ Reminders
+ Timer Controls
+ Share With Friends
+
+
+
+ - @string/TEA_control_title
+ - @string/TEA_control_who
+ - @string/TEA_control_when
+ - @string/TEA_control_more_section
+ - @string/TEA_control_importance
+ - @string/TEA_control_lists
+ - @string/TEA_control_notes
+ - @string/TEA_control_reminders
+ - @string/TEA_control_timer
+ - @string/TEA_control_share
+
+
Show in my list
@@ -402,8 +428,8 @@
Show Notes In Task
Beast Mode
- Advanced task edit settings will start hidden
- Advanced task edit settings will show automatically
+ Customize the layout of the Task Edit Page
+ Reset to defaults
Notes will be displayed in quick action bar
diff --git a/astrid/res/xml/preferences.xml b/astrid/res/xml/preferences.xml
index 049ff6c80..ae19119c5 100644
--- a/astrid/res/xml/preferences.xml
+++ b/astrid/res/xml/preferences.xml
@@ -14,10 +14,7 @@
android:title="@string/EPr_fontSize_title"
android:summary="@string/EPr_fontSize_desc" />
-
+
adapter;
+
+ private ArrayList items;
+
+ public static final String BEAST_MODE_ORDER_PREF = "beast_mode_order"; //$NON-NLS-1$
+
+ public static final String BEAST_MODE_PREF_ITEM_SEPARATOR = ";"; //$NON-NLS-1$
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.beast_mode_pref_activity);
+ setTitle(R.string.EPr_beastMode_desc);
+
+ touchList = (TouchListView) getListView();
+ String order = Preferences.getStringValue(BEAST_MODE_ORDER_PREF);
+ String[] itemsArray;
+ if (order == null) {
+ itemsArray = getResources().getStringArray(R.array.TEA_control_sets);
+ } else {
+ itemsArray = order.split(BEAST_MODE_PREF_ITEM_SEPARATOR);
+ }
+
+ items = new ArrayList();
+ for (String s : itemsArray) {
+ items.add(s);
+ }
+
+ adapter = new ArrayAdapter(this, R.layout.preference_draggable_row, R.id.text, items);
+ touchList.setAdapter(adapter);
+ touchList.setOnTouchListener(new OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ return false;
+ }
+ });
+
+ touchList.setDropListener(new DropListener() {
+ @Override
+ public void drop(int from, int to) {
+ String s = items.remove(from);
+ items.add(to, s);
+ adapter.notifyDataSetChanged();
+ }
+ });
+
+ Button resetButton = (Button) findViewById(R.id.reset);
+ resetButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ resetToDefault();
+ }
+ });
+ }
+
+ private void resetToDefault() {
+ String[] itemsArray = getResources().getStringArray(R.array.TEA_control_sets);
+ while (items.size() > 0)
+ items.remove(0);
+ for (String s : itemsArray)
+ items.add(s);
+ adapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void finish() {
+ StringBuilder newSetting = new StringBuilder(30);
+ for (int i = 0; i < adapter.getCount(); i++) {
+ newSetting.append(adapter.getItem(i));
+ newSetting.append(BEAST_MODE_PREF_ITEM_SEPARATOR);
+ }
+ Preferences.setString(BEAST_MODE_ORDER_PREF, newSetting.toString());
+ super.finish();
+ }
+
+}
diff --git a/astrid/src/com/todoroo/astrid/activity/EditPreferences.java b/astrid/src/com/todoroo/astrid/activity/EditPreferences.java
index 489dfabbd..89bb58f56 100644
--- a/astrid/src/com/todoroo/astrid/activity/EditPreferences.java
+++ b/astrid/src/com/todoroo/astrid/activity/EditPreferences.java
@@ -62,6 +62,7 @@ public class EditPreferences extends TodorooPreferenceActivity {
private static final int ABOUT_PREFERENCE = 0; // see preferences.xml for order of prefs
private static final int HELP_PREFERENCE = 1;
+ private static final int APPEARANCE_PREFERENCE = 2;
private static final int POWER_PACK_PREFERENCE = 3;
public static final int RESULT_CODE_THEME_CHANGED = 1;
@@ -119,6 +120,17 @@ public class EditPreferences extends TodorooPreferenceActivity {
}
});
+ PreferenceCategory appearance = (PreferenceCategory) screen.getPreference(APPEARANCE_PREFERENCE);
+ Preference beastMode = appearance.getPreference(1);
+ beastMode.setTitle(r.getString(R.string.EPr_beastMode_title));
+ beastMode.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference p) {
+ showBeastMode();
+ return true;
+ }
+ });
+
addDebugPreferences();
addPreferenceListeners();
@@ -142,6 +154,12 @@ public class EditPreferences extends TodorooPreferenceActivity {
startActivity(intent);
}
+ private void showBeastMode() {
+ Intent intent = new Intent(this, BeastModePreferenceActivity.class);
+ intent.setAction(AstridApiConstants.ACTION_SETTINGS);
+ startActivity(intent);
+ }
+
private void addPluginPreferences(PreferenceScreen screen) {
Intent queryIntent = new Intent(AstridApiConstants.ACTION_SETTINGS);
PackageManager pm = getPackageManager();
@@ -272,11 +290,6 @@ public class EditPreferences extends TodorooPreferenceActivity {
preference.setSummary(getString(R.string.EPr_theme_desc,
r.getStringArray(R.array.EPr_themes)[index]));
}
- } else if (r.getString(R.string.p_beastMode).equals(preference.getKey())) {
- if (value != null && !(Boolean)value)
- preference.setSummary(R.string.EPr_beastMode_desc_disabled);
- else
- preference.setSummary(R.string.EPr_beastMode_desc_enabled);
}
// statistics service
else if (r.getString(R.string.p_statistics).equals(preference.getKey())) {
diff --git a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java
index 6a913e27d..ea607e4f2 100755
--- a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java
+++ b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java
@@ -21,6 +21,7 @@ package com.todoroo.astrid.activity;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import android.app.Activity;
@@ -258,21 +259,25 @@ public final class TaskEditActivity extends Activity {
constructWhenDialog(whenDialogView);
+ HashMap controlSetMap = new HashMap();
+
// populate control set
EditTitleControlSet editTitle = new EditTitleControlSet(this, R.layout.control_set_title, Task.TITLE, R.id.title);
title = (EditText) editTitle.getView().findViewById(R.id.title);
controls.add(editTitle);
- basicControls.addView(editTitle.getView());
+ //basicControls.addView(editTitle.getDisplayView());
+ controlSetMap.put(getString(R.string.TEA_control_title), editTitle);
TimerActionControlSet timerAction = new TimerActionControlSet(this, editTitle.getView());
controls.add(timerAction);
controls.add(peopleControlSet = new EditPeopleControlSet(TaskEditActivity.this, R.layout.control_set_assigned, R.layout.control_set_assigned_display, R.string.actfm_EPA_assign_label, REQUEST_LOG_IN));
- basicControls.addView(peopleControlSet.getDisplayView());
+ //basicControls.addView(peopleControlSet.getDisplayView());
+ controlSetMap.put(getString(R.string.TEA_control_who), peopleControlSet);
UrgencyControlSet urgencyControl = new UrgencyControlSet(TaskEditActivity.this, R.layout.control_set_urgency, R.id.when_header, R.id.aux_date, R.id.when_label, R.id.when_image);
controls.add(urgencyControl);
- whenControls.addView(urgencyControl.getView());
+ whenControls.addView(urgencyControl.getDisplayView());
RepeatControlSet repeatControls = new RepeatControlSet(TaskEditActivity.this, R.layout.control_set_repeat, R.layout.control_set_repeat_display, R.string.repeat_enabled);
@@ -290,27 +295,32 @@ public final class TaskEditActivity extends Activity {
ImportanceControlSet importanceControl = new ImportanceControlSet(TaskEditActivity.this, R.layout.control_set_importance);
controls.add(importanceControl);
importanceControl.addListener(editTitle);
- moreControls.addView(importanceControl.getView());
+ //moreControls.addView(importanceControl.getDisplayView());
+ controlSetMap.put(getString(R.string.TEA_control_importance), importanceControl);
TagsControlSet tagsControl = new TagsControlSet(TaskEditActivity.this, R.layout.control_set_tags, R.layout.control_set_tags_display, R.string.TEA_tags_label);
controls.add(tagsControl);
- moreControls.addView(tagsControl.getDisplayView());
+ //moreControls.addView(tagsControl.getDisplayView());
+ controlSetMap.put(getString(R.string.TEA_control_lists), tagsControl);
notesControlSet = new EditNotesControlSet(TaskEditActivity.this, R.layout.control_set_notes, R.layout.control_set_notes_display);
notesEditText = (EditText) notesControlSet.getView().findViewById(R.id.notes);
controls.add(notesControlSet);
- moreControls.addView(notesControlSet.getDisplayView());
+ //moreControls.addView(notesControlSet.getDisplayView());
+ controlSetMap.put(getString(R.string.TEA_control_notes), notesControlSet);
ReminderControlSet reminderControl = new ReminderControlSet(TaskEditActivity.this, R.layout.control_set_reminders, R.layout.control_set_reminders_display);
controls.add(reminderControl);
- moreControls.addView(reminderControl.getDisplayView());
+ //moreControls.addView(reminderControl.getDisplayView());
+ controlSetMap.put(getString(R.string.TEA_control_reminders), reminderControl);
TimerControlSet timerControl = new TimerControlSet(TaskEditActivity.this, R.layout.control_set_timers, R.layout.control_set_timers_extras_display, R.string.TEA_timer_controls);
timerAction.setListener(timerControl);
controls.add(timerControl);
- moreControls.addView(timerControl.getDisplayView());
+ //moreControls.addView(timerControl.getDisplayView());
+ controlSetMap.put(getString(R.string.TEA_control_timer), timerControl);
- moreControls.addView(peopleControlSet.getSharedWithRow());
+ //moreControls.addView(peopleControlSet.getSharedWithRow());
try {
if(ProducteevUtilities.INSTANCE.isLoggedIn()) {
@@ -336,14 +346,38 @@ public final class TaskEditActivity extends Activity {
Log.e("astrid-error", "loading-control-set", e); //$NON-NLS-1$ //$NON-NLS-2$
}
- boolean beastMode = Preferences.getBoolean(R.string.p_beastMode, false);
- if (beastMode) {
- LinearLayout moreHeader = (LinearLayout) findViewById(R.id.more_header);
- moreHeader.setVisibility(View.GONE);
- whenControls.setVisibility(View.VISIBLE);
- moreControls.setVisibility(View.VISIBLE);
+ String[] itemOrder;
+ String orderPreference = Preferences.getStringValue(BeastModePreferenceActivity.BEAST_MODE_ORDER_PREF);
+ if (orderPreference != null)
+ itemOrder = orderPreference.split(BeastModePreferenceActivity.BEAST_MODE_PREF_ITEM_SEPARATOR);
+ else
+ itemOrder = getResources().getStringArray(R.array.TEA_control_sets);
+ String moreSectionTrigger = getString(R.string.TEA_control_more_section);
+ String whenViewDescriptor = getString(R.string.TEA_control_when);
+ View whenView = findViewById(R.id.when_container);
+ String shareViewDescriptor = getString(R.string.TEA_control_share);
+ LinearLayout section = basicControls;
+ for (int i = 0; i < itemOrder.length; i++) {
+ String item = itemOrder[i];
+ if (item.equals(moreSectionTrigger)) {
+ section = moreControls;
+ } else {
+ TaskEditControlSet curr = controlSetMap.get(item);
+ if (item.equals(shareViewDescriptor))
+ section.addView(peopleControlSet.getSharedWithRow());
+ else if (item.equals(whenViewDescriptor)) {
+ LinearLayout parent = (LinearLayout) whenView.getParent();
+ parent.removeView(whenView);
+ section.addView(whenView);
+ } else if (curr != null)
+ section.addView(curr.getDisplayView());
+ }
}
+ if (moreControls.getChildCount() == 0)
+ findViewById(R.id.more_header).setVisibility(View.GONE);
+
+
// Load task data in background
new TaskEditBackgroundLoader().start();
diff --git a/astrid/src/com/todoroo/astrid/helper/TaskEditControlSet.java b/astrid/src/com/todoroo/astrid/helper/TaskEditControlSet.java
index cfd7ba594..da25fac87 100644
--- a/astrid/src/com/todoroo/astrid/helper/TaskEditControlSet.java
+++ b/astrid/src/com/todoroo/astrid/helper/TaskEditControlSet.java
@@ -26,6 +26,10 @@ public abstract class TaskEditControlSet {
return view;
}
+ public View getDisplayView() {
+ return getView();
+ }
+
/**
* Read data from model to update the control set
*/