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