Merge remote-tracking branch 'upstream/master' into 120712_sb_in_app_billing

pull/14/head
Sam Bosley 13 years ago
commit 12cab2e912

@ -289,7 +289,15 @@ public class TagUpdatesFragment extends ListFragment {
return;
MenuItem item;
if(actFmPreferenceService.isLoggedIn()) {
boolean showCommentsRefresh = actFmPreferenceService.isLoggedIn();
if (showCommentsRefresh) {
Activity activity = getActivity();
if (activity instanceof TaskListActivity) {
TaskListActivity tla = (TaskListActivity) activity;
showCommentsRefresh = tla.getTaskEditFragment() == null;
}
}
if(showCommentsRefresh) {
item = menu.add(Menu.NONE, MENU_REFRESH_ID, Menu.NONE,
R.string.ENA_refresh_comments);
item.setIcon(R.drawable.icn_menu_refresh_dark);

@ -123,6 +123,7 @@ public class TagViewFragment extends TaskListFragment {
((EditText) getView().findViewById(R.id.quickAddText)).setOnTouchListener(onTouch);
View membersEdit = getView().findViewById(R.id.members_edit);
if (membersEdit != null)
membersEdit.setOnClickListener(settingsListener);
originalFilter = filter;
@ -165,6 +166,7 @@ public class TagViewFragment extends TaskListFragment {
if (!Preferences.getBoolean(R.string.p_showed_list_settings_help, false)) {
Preferences.setBoolean(R.string.p_showed_list_settings_help, true);
View tabView = getView().findViewById(R.id.members_edit);
if (tabView != null)
HelpInfoPopover.showPopover(getActivity(), tabView,
R.string.help_popover_list_settings, null);
}
@ -214,10 +216,10 @@ public class TagViewFragment extends TaskListFragment {
}
postLoadTagData();
setUpMembersGallery();
super.initializeData();
setUpMembersGallery();
if (extras.getBoolean(TOKEN_START_ACTIVITY, false)) {
extras.remove(TOKEN_START_ACTIVITY);
activity.showComments();
@ -334,7 +336,10 @@ public class TagViewFragment extends TaskListFragment {
} catch (JSONException e) {
e.printStackTrace();
}
getView().findViewById(R.id.filter_assigned).setOnClickListener(new OnClickListener() {
View filterAssigned = getView().findViewById(R.id.filter_assigned);
if (filterAssigned != null)
filterAssigned.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
resetAssignedFilter();
@ -395,11 +400,13 @@ public class TagViewFragment extends TaskListFragment {
Criterion assigned = Criterion.and(TaskCriteria.activeAndVisible(), assignedCriterion);
filter = TagFilterExposer.filterFromTag(getActivity(), new Tag(tagData), assigned);
TextView filterByAssigned = (TextView) getView().findViewById(R.id.filter_assigned);
if (filterByAssigned != null) {
filterByAssigned.setVisibility(View.VISIBLE);
if (id == Task.USER_ID_UNASSIGNED)
filterByAssigned.setText(getString(R.string.actfm_TVA_filter_by_unassigned));
else
filterByAssigned.setText(getString(R.string.actfm_TVA_filtered_by_assign, displayName));
}
setUpTaskList();
}
}
@ -416,7 +423,9 @@ public class TagViewFragment extends TaskListFragment {
private void resetAssignedFilter() {
currentId = Task.USER_ID_IGNORE;
filter = originalFilter;
getView().findViewById(R.id.filter_assigned).setVisibility(View.GONE);
View filterAssigned = getView().findViewById(R.id.filter_assigned);
if (filterAssigned != null)
filterAssigned.setVisibility(View.GONE);
setUpTaskList();
}

@ -17,10 +17,14 @@ import android.view.View;
import android.view.ViewGroup.OnHierarchyChangeListener;
import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.andlib.utility.TodorooPreferenceActivity;
import com.todoroo.astrid.actfm.ActFmLoginActivity;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
/**
* Displays synchronization preferences and an action panel so users can
@ -37,6 +41,9 @@ public class BackupPreferences extends TodorooPreferenceActivity {
private int statusColor = Color.BLACK;
@Autowired
private ActFmPreferenceService actFmPreferenceService;
@Override
public int getPreferenceResource() {
return R.xml.preferences_backup;
@ -45,6 +52,7 @@ public class BackupPreferences extends TodorooPreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DependencyInjectionService.getInstance().inject(this);
getListView().setOnHierarchyChangeListener(new OnHierarchyChangeListener() {
@Override
@ -68,6 +76,14 @@ public class BackupPreferences extends TodorooPreferenceActivity {
return false;
}
});
findPreference(getString(R.string.backup_BAc_cloud)).setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
initiateCloudBackup();
return false;
}
});
}
@Override
@ -133,4 +149,14 @@ public class BackupPreferences extends TodorooPreferenceActivity {
}
private void initiateCloudBackup() {
if (actFmPreferenceService.isLoggedIn()) {
DialogUtilities.okDialog(this, getString(R.string.DLG_information_title), 0,
getString(R.string.backup_BPr_cloud_already_logged_in), null);
} else {
Intent intent = new Intent(this, ActFmLoginActivity.class);
startActivity(intent);
}
}
}

@ -56,4 +56,9 @@ public class PeopleFilterMode implements FilterModeSpec {
TaskListFragment.MENU_ADDONS_ID,
MainMenuPopover.MAIN_MENU_ITEM_FRIENDS
};
@Override
public boolean showComments() {
return false;
}
}

@ -3,6 +3,8 @@ package com.todoroo.astrid.tags.reusable;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.todoroo.astrid.adapter.FilterAdapter;
@ -34,4 +36,23 @@ public class FeaturedListFilterAdapter extends FilterAdapter {
public void unregisterRecevier() {
activity.unregisterReceiver(filterReceiver);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
ViewHolder viewHolder = (ViewHolder) v.getTag();
viewHolder.size.setVisibility(View.GONE);
viewHolder.name.setSingleLine(false);
viewHolder.name.setLines(2);
viewHolder.name.setMaxLines(2);
int right = (int) (metrics.density * 10);
int top = (int) (metrics.density * 2);
viewHolder.name.setPadding(0, top, right, 0);
viewHolder.name.setTextSize(14);
viewHolder.name.setLineSpacing(0.0f, 1.2f);
return v;
}
}

@ -48,6 +48,9 @@ public class FeaturedListFilterMode implements FilterModeSpec {
//
}
@Override
public boolean showComments() {
return false;
}
}

@ -2,8 +2,15 @@ package com.todoroo.astrid.tags.reusable;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.res.Resources;
import android.support.v4.view.Menu;
import android.support.v4.view.MenuItem;
import android.text.TextUtils;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;
@ -13,16 +20,24 @@ import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.AsyncImageView;
import com.todoroo.astrid.service.TagDataService;
import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.tags.TagService.Tag;
import com.todoroo.astrid.utility.Flags;
public class FeaturedTaskListFragment extends TagViewFragment {
@Autowired private TagDataService tagDataService;
private static final int MENU_CLONE_LIST = R.string.actfm_feat_list_clone;
@Override
protected TaskAdapter createTaskAdapter(TodorooCursor<Task> cursor) {
return new ReusableTaskAdapter(this, R.layout.reusable_task_adapter_row,
@ -46,13 +61,58 @@ public class FeaturedTaskListFragment extends TagViewFragment {
return R.layout.task_list_body_featured_list;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
MenuItem item = menu.add(Menu.NONE, MENU_CLONE_LIST, 0, R.string.actfm_feat_list_clone);
item.setIcon(R.drawable.ic_menu_list_copy);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
@Override
public boolean handleOptionsMenuItemSelected(int id, Intent intent) {
if (id == MENU_CLONE_LIST) {
cloneList();
return true;
}
return super.handleOptionsMenuItemSelected(id, intent);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// Do nothing
}
@Override
protected void setUpMembersGallery() {
// Repurposed this method to set up listener for clone list button
View clone = getView().findViewById(R.id.clone_list);
clone.setOnClickListener(new OnClickListener() {
// Repurposed this method to set up the description view
AsyncImageView imageView = (AsyncImageView) getView().findViewById(R.id.url_image);
String imageUrl = tagData.getValue(TagData.PICTURE);
if (!TextUtils.isEmpty(imageUrl)) {
imageView.setVisibility(View.VISIBLE);
imageView.setDefaultImageResource(R.drawable.default_list_0);
imageView.setUrl(imageUrl);
} else {
imageView.setVisibility(View.GONE);
}
final String description = tagData.getValue(TagData.TAG_DESCRIPTION);
final Resources r = getActivity().getResources();
TextView desc = (TextView) getView().findViewById(R.id.feat_list_desc);
desc.setText(description);
desc.setLines(4);
desc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogUtilities.okDialog(getActivity(), r.getString(R.string.DLG_information_title),
0, description, null);
}
});
}
private void cloneList() {
// Clone list
if (taskAdapter == null || taskAdapter.getCount() == 0) {
Toast.makeText(getActivity(), R.string.actfm_feat_list_clone_empty, Toast.LENGTH_LONG).show();
@ -79,7 +139,7 @@ public class FeaturedTaskListFragment extends TagViewFragment {
new Thread(new Runnable() {
@Override
public void run() {
TodorooCursor<Task> tasks = taskService.fetchFiltered(taskAdapter.getQuery(), null, Task.PROPERTIES);
final TodorooCursor<Task> tasks = taskService.fetchFiltered(taskAdapter.getQuery(), null, Task.PROPERTIES);
try {
Task t = new Task();
for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) {
@ -87,21 +147,34 @@ public class FeaturedTaskListFragment extends TagViewFragment {
taskService.cloneReusableTask(t,
localName, finalRemoteId);
}
Activity activity = getActivity();
final Activity activity = getActivity();
if (activity != null) {
DialogUtilities.dismissDialog(activity, pd);
DialogUtilities.okDialog(activity, getString(R.string.actfm_feat_list_clone_success), null);
}
Flags.set(Flags.REFRESH);
if (activity instanceof TaskListActivity) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
TaskListActivity tla = (TaskListActivity) activity;
tla.setFilterMode(TaskListActivity.FILTER_MODE_NORMAL);
Filter clonedFilter;
Tag tag = new Tag(localName, tasks.getCount(), finalRemoteId);
clonedFilter = TagFilterExposer.filterFromTag(activity, tag, TaskCriteria.activeAndVisible());
tla.onFilterItemClicked(clonedFilter);
}
});
}
} finally {
tasks.close();
}
}
}).start();
}
});
}
@Override
protected void refresh() {

Binary file not shown.

After

Width:  |  Height:  |  Size: 695 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 B

@ -9,46 +9,30 @@
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="43dip"
android:layout_weight="1"
android:gravity="center"
android:background="?attr/asMembersHeaderBackground">
android:background="?attr/asMembersHeaderBackground"
android:padding="15dip"
android:gravity="center_vertical">
<com.todoroo.astrid.helper.AsyncImageView
android:id="@+id/url_image"
android:layout_width="75dip"
android:layout_height="75dip"
android:scaleType="fitCenter"/>
<TextView
android:id="@+id/clone_list"
android:id="@+id/feat_list_desc"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:gravity="left"
android:paddingLeft="15dip"
style="@style/TextAppearance"
android:textStyle="bold"
android:textColor="#333333"
android:text="@string/actfm_feat_list_clone"/>
<ImageView
android:id="@+id/members_edit"
android:layout_width="43dip"
android:layout_height="43dip"
android:padding="5dip"
android:layout_weight="1"
android:src="@drawable/list_settings"
android:scaleType="fitCenter"
android:visibility="gone"/>
</LinearLayout>
<TextView
android:id="@+id/filter_assigned"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:paddingTop="3dip"
android:paddingBottom="3dip"
style="@style/TextAppearance"
android:background="@android:color/darker_gray"
android:visibility="gone"/>
android:singleLine="false"
android:lines="4"
android:ellipsize="end"/>
<!-- For some reason this degrades to two lines on
pre-ICS phones. May be an OS bug with ellipsize-->
</LinearLayout>
<!-- List body goes here -->

@ -273,7 +273,7 @@
<!-- ================================================ Featured Lists -->
<string name="actfm_feat_list_clone">Copy this list</string>
<string name="actfm_feat_list_clone">Copy list</string>
<string name="actfm_feat_list_suffix">(Copy)</string>

@ -40,6 +40,8 @@
<!-- Preference screen Restoring Tasks Help Dialog Text-->
<string name="backup_BPr_how_to_restore_dialog">You need to add the Astrid Power Pack to manage and restore your backups. As a favor, Astrid also automatically backs up your tasks, just in case.</string>
<string name="backup_BPr_cloud_already_logged_in">You already have cloud backup on Astrid.com!</string>
<!-- ================================================= BackupActivity == -->
<!-- slide 48c: backup activity label -->
@ -54,6 +56,9 @@
<!-- backup activity export button -->
<string name="backup_BAc_export">Export Tasks</string>
<!-- backup activity cloud (Astrid.com) option -->
<string name="backup_BAc_cloud">Click for free cloud backup on Astrid.com</string>
<!-- ============================================== Importer / Exporter == -->
<!-- Message displayed when error occurs -->

@ -34,4 +34,10 @@
android:textSize="24sp"
android:gravity="center"/>
<com.todoroo.astrid.ui.MultilinePreference
android:key="@string/backup_BAc_cloud"
android:title="@string/backup_BAc_cloud"
android:textSize="24sp"
android:gravity="center" />
</PreferenceScreen>

@ -303,6 +303,7 @@ public class AstridActivity extends FragmentActivity
final FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentByTag(tag);
if(fragment == null || replace) {
Fragment oldFragment = fragment;
try {
fragment = cls.newInstance();
} catch (InstantiationException e) {
@ -312,8 +313,11 @@ public class AstridActivity extends FragmentActivity
}
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
if (container == 0)
if (container == 0) {
if (oldFragment != null && replace)
ft.remove(oldFragment);
ft.add(fragment, tag);
}
else
ft.replace(container, fragment, tag);
ft.commit();

@ -39,4 +39,9 @@ public class DefaultFilterMode implements FilterModeSpec {
//
}
@Override
public boolean showComments() {
return true;
}
}

@ -13,5 +13,6 @@ public interface FilterModeSpec {
public Filter getDefaultFilter(Context context);
public int getMainMenuIconAttr();
public void onFilterItemClickedCallback(FilterListItem item);
public boolean showComments();
}

@ -46,6 +46,7 @@ import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.core.CustomFilterExposer;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.AsyncImageView;
import com.todoroo.astrid.people.PeopleFilterMode;
@ -76,9 +77,10 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
public static final String OPEN_TASK = "openTask"; //$NON-NLS-1$
private static final String FILTER_MODE = "filterMode"; //$NON-NLS-1$
private static final int FILTER_MODE_NORMAL = 0;
private static final int FILTER_MODE_PEOPLE = 1;
private static final int FILTER_MODE_FEATURED = 2;
public static final int FILTER_MODE_NORMAL = 0;
public static final int FILTER_MODE_PEOPLE = 1;
public static final int FILTER_MODE_FEATURED = 2;
@Autowired private ABTestEventReportingService abTestEventReportingService;
@ -260,6 +262,14 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
}
}
@Override
protected Bundle configureIntentAndExtrasWithFilter(Intent intent,
Filter filter) {
Bundle extras = super.configureIntentAndExtrasWithFilter(intent, filter);
getIntent().putExtra(FILTER_MODE, filterMode);
return extras;
}
/**
*
* @param actionBar
@ -377,6 +387,21 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
return result;
}
@Override
public void setupActivityFragment(TagData tagData) {
super.setupActivityFragment(tagData);
int visibility = (filterModeSpec.showComments() ? View.VISIBLE : View.GONE);
if (fragmentLayout != LAYOUT_TRIPLE) {
commentsButton.setVisibility(visibility);
} else {
View container = findViewById(R.id.taskedit_fragment_container);
if (container != null)
container.setVisibility(visibility);
}
}
private void setListsDropdownSelected(boolean selected) {
int oldTextColor = lists.getTextColors().getDefaultColor();
int textStyle = (selected ? R.style.TextAppearance_ActionBar_ListsHeader_Selected :
@ -678,9 +703,10 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
tlf.handleOptionsMenuItemSelected(item, customIntent);
}
private void setFilterMode(int mode) {
public void setFilterMode(int mode) {
filterMode = mode;
updateFilterModeSpec(mode);
getIntent().putExtra(FILTER_MODE, mode);
refreshMainMenu();
if (fragmentLayout == LAYOUT_SINGLE) {
@ -703,7 +729,6 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
onFilterItemClicked(getDefaultFilter());
if (fragmentLayout == LAYOUT_SINGLE)
listsNav.performClick();
getIntent().putExtra(FILTER_MODE, mode);
}
public void refreshMainMenu() {

@ -428,8 +428,11 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
return;
boolean isTablet = AstridPreferences.useTabletLayout(activity);
if (activity instanceof TaskListActivity)
((TaskListActivity) activity).getMainMenuPopover().clear();
TaskListActivity tla = null;
if (activity instanceof TaskListActivity) {
tla = (TaskListActivity) activity;
tla.getMainMenuPopover().clear();
}
// --- sort
if (allowResorting()) {
@ -438,6 +441,7 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
}
// --- sync
if (tla == null || tla.getTaskEditFragment() == null)
addSyncRefreshMenuItem(menu, isTablet ? ThemeService.FLAG_INVERT : 0);
// --- new filter

@ -80,7 +80,7 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
protected ListView listView;
/** display metrics for scaling icons */
private final DisplayMetrics metrics = new DisplayMetrics();
protected final DisplayMetrics metrics = new DisplayMetrics();
/** receiver for new filters */
protected final FilterReceiver filterReceiver = new FilterReceiver();

@ -150,7 +150,8 @@ public class SyncActionHelper {
// --- sync logic
protected void performSyncServiceV2Sync(boolean manual) {
syncService.synchronizeActiveTasks(manual, syncResultCallback);
boolean syncOccurred = syncService.synchronizeActiveTasks(manual, syncResultCallback);
if (syncOccurred)
Preferences.setLong(PREF_LAST_AUTO_SYNC, DateUtilities.now());
}

@ -59,10 +59,14 @@ public class SyncV2Service {
*
* @param manual if manual sync
* @param callback result callback
* @return true if any servide was logged in and initiated a sync
*/
public void synchronizeActiveTasks(final boolean manual, final SyncResultCallback callback) {
public boolean synchronizeActiveTasks(final boolean manual, final SyncResultCallback callback) {
final List<SyncV2Provider> active = activeProviders();
if (active.size() == 0)
return false;
if (active.size() > 1) {
SyncResultCallback newCallback = new SyncResultCallback() {
private int next = 1;
@ -94,6 +98,8 @@ public class SyncV2Service {
} else if (active.size() == 1) {
active.get(0).synchronizeActiveTasks(manual, callback);
}
return true;
}
/**

Loading…
Cancel
Save