diff --git a/astrid/res/drawable-land/widget_frame.9.png b/astrid/res/drawable-land/widget_frame.9.png
deleted file mode 100644
index 4b5885165..000000000
Binary files a/astrid/res/drawable-land/widget_frame.9.png and /dev/null differ
diff --git a/astrid/res/drawable/widget_frame.9.png b/astrid/res/drawable/widget_frame.9.png
deleted file mode 100644
index 6637f942c..000000000
Binary files a/astrid/res/drawable/widget_frame.9.png and /dev/null differ
diff --git a/astrid/res/layout-land/widget_initialized.xml b/astrid/res/layout-land/widget_initialized.xml
index 42d533799..46cdbcfcb 100644
--- a/astrid/res/layout-land/widget_initialized.xml
+++ b/astrid/res/layout-land/widget_initialized.xml
@@ -5,134 +5,52 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:background="@drawable/widget_frame">
+ android:background="@android:color/transparent">
-
+ android:padding="3dp"
+ android:background="@color/widget_header_light">
+ android:maxLines="2"
+ android:layout_weight="1"
+ android:gravity="left|center_vertical"
+ android:ellipsize="end" />
+ android:layout_width="33dip"
+ android:layout_height="39dip"
+ android:layout_gravity="right|center_vertical"
+ android:background="@android:color/transparent"
+ android:src="@drawable/plus_button_dark_blue"
+ android:scaleType="fitCenter"/>
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/astrid/res/layout-xlarge-land/widget_initialized.xml b/astrid/res/layout-xlarge-land/widget_initialized.xml
index ca7715e26..9c7f2cc67 100644
--- a/astrid/res/layout-xlarge-land/widget_initialized.xml
+++ b/astrid/res/layout-xlarge-land/widget_initialized.xml
@@ -5,132 +5,51 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:background="@drawable/widget_frame">
+ android:background="@android:color/transparent">
-
+ android:padding="3dp"
+ android:background="@color/widget_header_light">
+ android:maxLines="2"
+ android:layout_weight="1"
+ android:gravity="left|center_vertical"
+ android:ellipsize="end" />
+ android:layout_width="33dip"
+ android:layout_height="39dip"
+ android:layout_gravity="right|center_vertical"
+ android:background="@android:color/transparent"
+ android:src="@drawable/plus_button_dark_blue"
+ android:scaleType="fitCenter"/>
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/astrid/res/layout/widget_initialized.xml b/astrid/res/layout/widget_initialized.xml
index 0a8f8c2ff..318d8876a 100644
--- a/astrid/res/layout/widget_initialized.xml
+++ b/astrid/res/layout/widget_initialized.xml
@@ -5,136 +5,51 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:background="@drawable/widget_frame">
+ android:background="@android:color/transparent">
+ android:padding="3dp"
+ android:background="@color/widget_header_light">
+ android:maxLines="2"
+ android:layout_weight="1"
+ android:gravity="left|center_vertical"
+ android:ellipsize="end" />
+ android:id="@+id/widget_button"
+ android:layout_width="33dip"
+ android:layout_height="39dip"
+ android:layout_gravity="right|center_vertical"
+ android:background="@android:color/transparent"
+ android:src="@drawable/plus_button_dark_blue"
+ android:scaleType="fitCenter"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
+
diff --git a/astrid/res/layout/widget_loading.xml b/astrid/res/layout/widget_loading.xml
index 2c930b744..d2182cead 100644
--- a/astrid/res/layout/widget_loading.xml
+++ b/astrid/res/layout/widget_loading.xml
@@ -1,29 +1,65 @@
-
+ android:background="@android:color/transparent">
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
diff --git a/astrid/res/layout/widget_row.xml b/astrid/res/layout/widget_row.xml
new file mode 100644
index 000000000..602623a82
--- /dev/null
+++ b/astrid/res/layout/widget_row.xml
@@ -0,0 +1,14 @@
+
+
+
+
\ No newline at end of file
diff --git a/astrid/res/layout/widget_separator.xml b/astrid/res/layout/widget_separator.xml
new file mode 100644
index 000000000..1702d0bab
--- /dev/null
+++ b/astrid/res/layout/widget_separator.xml
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file
diff --git a/astrid/res/values/colors.xml b/astrid/res/values/colors.xml
index 341e18b5d..29d486624 100644
--- a/astrid/res/values/colors.xml
+++ b/astrid/res/values/colors.xml
@@ -32,6 +32,14 @@
#292929
#000000
#262626
+
+ #535353
+ #ffffff
+ #dde0e0e0
+ #dd000000
+ #ddffffff
+ #dd000000
+
diff --git a/astrid/res/values/styles.xml b/astrid/res/values/styles.xml
index 53f5dabd4..2cdf5d88f 100644
--- a/astrid/res/values/styles.xml
+++ b/astrid/res/values/styles.xml
@@ -395,8 +395,8 @@
diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java
index 4ce42846f..58be1895d 100644
--- a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java
+++ b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java
@@ -703,6 +703,9 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
R.anim.slide_right_in, R.anim.slide_right_out);
}
getActivity().startActivity(getActivity().getIntent());
+ ContextManager.getContext().startService(
+ new Intent(ContextManager.getContext(),
+ TasksWidget.WidgetUpdateService.class));
} else if (resultCode == SyncProviderPreferences.RESULT_CODE_SYNCHRONIZE) {
Preferences.setLong(SyncActionHelper.PREF_LAST_AUTO_SYNC, 0); // Forces autosync to occur after login
}
diff --git a/astrid/src/com/todoroo/astrid/widget/TasksWidget.java b/astrid/src/com/todoroo/astrid/widget/TasksWidget.java
index c88365f3c..90dc387dd 100644
--- a/astrid/src/com/todoroo/astrid/widget/TasksWidget.java
+++ b/astrid/src/com/todoroo/astrid/widget/TasksWidget.java
@@ -8,7 +8,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.graphics.Color;
+import android.content.res.Resources;
import android.os.Bundle;
import android.os.IBinder;
import android.util.DisplayMetrics;
@@ -39,6 +39,7 @@ import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.AstridDependencyInjector;
import com.todoroo.astrid.service.TaskService;
+import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.utility.AstridPreferences;
import com.todoroo.astrid.utility.Constants;
@@ -48,11 +49,6 @@ public class TasksWidget extends AppWidgetProvider {
AstridDependencyInjector.initialize();
}
- public final static int[] TEXT_IDS = { R.id.task_1, R.id.task_2,
- R.id.task_3, R.id.task_4, R.id.task_5 };
- public final static int[] SEPARATOR_IDS = { R.id.separator_1,
- R.id.separator_2, R.id.separator_3, R.id.separator_4 };
-
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
@@ -152,18 +148,16 @@ public class TasksWidget extends AppWidgetProvider {
views = new RemoteViews(context.getPackageName(),
R.layout.widget_initialized);
- int[] textIDs = TEXT_IDS;
- int[] separatorIDs = SEPARATOR_IDS;
- int numberOfTasks = 5;
+ applyThemeToWidget(views);
- for(int i = 0; i < textIDs.length; i++)
- views.setTextViewText(textIDs[i], "");
+ int numberOfTasks = getNumberOfTasks();
TodorooCursor cursor = null;
Filter filter = null;
try {
filter = getFilter(widgetId);
views.setTextViewText(R.id.widget_title, filter.title);
+ views.removeAllViews(R.id.taskbody);
SharedPreferences publicPrefs = AstridPreferences.getPublicPrefs(this);
int flags = publicPrefs.getInt(SortHelper.PREF_SORT_FLAGS, 0);
@@ -174,12 +168,14 @@ public class TasksWidget extends AppWidgetProvider {
database.openForReading();
cursor = taskService.fetchFiltered(query, null, Task.ID, Task.TITLE, Task.DUE_DATE, Task.COMPLETION_DATE);
Task task = new Task();
- for (int i = 0; i < cursor.getCount() && i < numberOfTasks; i++) {
+ int i = 0;
+ for (i = 0; i < cursor.getCount() && i < numberOfTasks; i++) {
cursor.moveToPosition(i);
task.readFromCursor(cursor);
String textContent = "";
- int textColor = Color.WHITE;
+ int textColor = context.getResources()
+ .getColor(isDarkTheme() ? R.color.widget_text_color_dark : R.color.widget_text_color_light);
textContent = task.getValue(Task.TITLE);
@@ -188,16 +184,22 @@ public class TasksWidget extends AppWidgetProvider {
else if(task.hasDueDate() && task.getValue(Task.DUE_DATE) < DateUtilities.now())
textColor = context.getResources().getColor(R.color.task_list_overdue);
- if(i > 0)
- views.setViewVisibility(separatorIDs[i-1], View.VISIBLE);
- views.setTextViewText(textIDs[i], textContent);
- views.setTextColor(textIDs[i], textColor);
- }
+ RemoteViews row = new RemoteViews(Constants.PACKAGE, R.layout.widget_row);
+
+ row.setTextViewText(R.id.text, textContent);
+ row.setTextColor(R.id.text, textColor);
+
+ views.addView(R.id.taskbody, row);
- for(int i = cursor.getCount() - 1; i < separatorIDs.length; i++) {
- if(i >= 0)
- views.setViewVisibility(separatorIDs[i], View.INVISIBLE);
+ RemoteViews separator = new RemoteViews(Constants.PACKAGE, R.layout.widget_separator);
+ views.addView(R.id.taskbody, separator);
}
+ for (; i < numberOfTasks; i++) {
+ RemoteViews row = new RemoteViews(Constants.PACKAGE, R.layout.widget_row);
+ row.setViewVisibility(R.id.text, View.INVISIBLE);
+ views.addView(R.id.taskbody, row);
+ }
+
} catch (Exception e) {
// can happen if database is not ready
Log.e("WIDGET-UPDATE", "Error updating widget", e);
@@ -206,8 +208,6 @@ public class TasksWidget extends AppWidgetProvider {
cursor.close();
}
- updateForScreenSize(views);
-
Intent listIntent = new Intent(context, TaskListActivity.class);
String customIntent = Preferences.getStringValue(WidgetConfigActivity.PREF_CUSTOM_INTENT
+ widgetId);
@@ -255,17 +255,58 @@ public class TasksWidget extends AppWidgetProvider {
return views;
}
- private void updateForScreenSize(RemoteViews views) {
+ private boolean isDarkTheme() {
+ int theme = ThemeService.getTheme();
+ return (theme == R.style.Theme || theme == R.style.Theme_Transparent);
+ }
+
+ @SuppressWarnings("nls")
+ private void applyThemeToWidget(RemoteViews views) {
+ int theme = ThemeService.getTheme();
+ Resources r = getResources();
+ int headerColor;
+ int titleColor;
+ int bodyColor;
+ int buttonDrawable;
+ int separatorColor;
+ if (isDarkTheme()) {
+ headerColor = r.getColor(R.color.widget_header_dark);
+ titleColor = r.getColor(R.color.widget_text_color_dark);
+ bodyColor = r.getColor(R.color.widget_body_dark);
+ buttonDrawable = R.drawable.plus_button_blue;
+ separatorColor = r.getColor(R.color.blue_theme_color);
+ } else if (theme == R.style.Theme_White) {
+ headerColor = r.getColor(R.color.widget_header_light);
+ titleColor = r.getColor(R.color.widget_text_color_light);
+ bodyColor = r.getColor(R.color.widget_body_light);
+ buttonDrawable = R.drawable.plus_button_red;
+ separatorColor = r.getColor(R.color.red_theme_color);
+ } else {
+ headerColor = r.getColor(R.color.widget_header_light);
+ titleColor = r.getColor(R.color.widget_text_color_light);
+ bodyColor = r.getColor(R.color.widget_body_light);
+ buttonDrawable = R.drawable.plus_button_dark_blue;
+ separatorColor = r.getColor(R.color.dark_blue_theme_color);
+ }
+
+ views.setInt(R.id.widget_header, "setBackgroundColor", headerColor);
+ views.setTextColor(R.id.widget_title, titleColor);
+ views.setInt(R.id.taskbody, "setBackgroundColor", bodyColor);
+ views.setInt(R.id.widget_button, "setImageResource", buttonDrawable);
+ views.setInt(R.id.widget_header_separator, "setBackgroundColor", separatorColor);
+ }
+
+ private int getNumberOfTasks() {
Display display = ((WindowManager) this.getSystemService(
Context.WINDOW_SERVICE)).getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
- if(metrics.density <= 0.75) {
- views.setViewVisibility(SEPARATOR_IDS[3], View.INVISIBLE);
- views.setViewVisibility(TEXT_IDS[4], View.INVISIBLE);
- }
+ if(metrics.density <= 0.75)
+ return 4;
+ else
+ return 5;
}
private Filter getFilter(int widgetId) {