Remove unused code

* Replace isLoggedIn with false
* Replace isPremiumUser with true
* Remove sync logging
Alex Baker 13 years ago
parent 64ee000362
commit 35b00140c2

@ -32,7 +32,6 @@ import android.widget.TextView.OnEditorActionListener;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockListFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
@ -43,7 +42,6 @@ import com.todoroo.astrid.actfm.sync.ActFmSyncService;
import com.todoroo.astrid.actfm.sync.ActFmSyncThread.SyncMessageCallback;
import com.todoroo.astrid.actfm.sync.messages.NameMaps;
import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.adapter.UpdateAdapter;
import com.todoroo.astrid.dao.UserActivityDao;
import com.todoroo.astrid.data.RemoteModel;
@ -220,7 +218,6 @@ public abstract class CommentsFragment extends SherlockListFragment {
});
refreshUpdatesList();
refreshActivity(); // start a pull in the background
}
protected void resetPictureButton() {
@ -264,9 +261,6 @@ public abstract class CommentsFragment extends SherlockListFragment {
if (cursor.getCount() == 0) {
activityContainer.setVisibility(View.VISIBLE);
TextView textView = (TextView) activityContainer.findViewById(R.id.no_activity_message);
if (actFmPreferenceService.isLoggedIn()) {
textView.setText(activity.getString(R.string.ENA_no_comments));
}
listView.setVisibility(View.GONE);
} else {
activityContainer.setVisibility(View.GONE);
@ -332,38 +326,6 @@ public abstract class CommentsFragment extends SherlockListFragment {
public void runOnErrors(List<JSONArray> errors) {/**/}
};
protected void refreshActivity() {
if (actFmPreferenceService.isLoggedIn()) {
if (hasModel()) {
performFetch(doneRunnable);
} else {
doneRunnable.runOnSuccess();
}
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (menu.size() > 0) {
return;
}
MenuItem item;
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);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// handle my own menus
@ -371,7 +333,6 @@ public abstract class CommentsFragment extends SherlockListFragment {
case MENU_REFRESH_ID: {
refreshActivity();
return true;
}

@ -233,9 +233,6 @@ public class TagSettingsActivity extends SherlockFragmentActivity {
} else if (tagData.getValue(TagData.MEMBER_COUNT) > 0) {
leaveListButton.setText(getString(R.string.tag_leave_button));
}
if (actFmPreferenceService.isLoggedIn()) {
findViewById(R.id.tag_silenced_container).setVisibility(View.VISIBLE);
}
picture.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(getResources(), TagService.getDefaultImageIDForTag(tagData.getUuid())));
picture.setOnClickListener(new OnClickListener() {
@ -314,7 +311,7 @@ public class TagSettingsActivity extends SherlockFragmentActivity {
}
JSONArray members = new JSONArray();
if (members.length() > 0 && !actFmPreferenceService.isLoggedIn()) {
if (members.length() > 0) {
if (newName.length() > 0 && oldName.length() == 0) {
tagDataService.save(tagData);
}

@ -9,7 +9,6 @@ import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
@ -27,37 +26,27 @@ import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.NotificationManager;
import com.todoroo.andlib.service.NotificationManager.AndroidNotificationManager;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.actfm.sync.ActFmSyncService;
import com.todoroo.astrid.actfm.sync.ActFmSyncThread;
import com.todoroo.astrid.actfm.sync.ActFmSyncThread.SyncMessageCallback;
import com.todoroo.astrid.actfm.sync.messages.BriefMe;
import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.activity.FilterListFragment;
import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.core.SortHelper;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TagMetadataDao;
import com.todoroo.astrid.dao.TaskListMetadataDao;
import com.todoroo.astrid.dao.UserDao;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.TagMetadata;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskListMetadata;
import com.todoroo.astrid.data.UserActivity;
import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.service.TagDataService;
@ -65,14 +54,11 @@ import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.subtasks.SubtasksTagListFragment;
import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.utility.AstridPreferences;
import com.todoroo.astrid.utility.Flags;
import org.astrid.R;
import org.json.JSONArray;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
public class TagViewFragment extends TaskListFragment {
@ -194,16 +180,6 @@ public class TagViewFragment extends TaskListFragment {
return R.layout.task_list_body_tag;
}
@Override
protected void addSyncRefreshMenuItem(Menu menu, int themeFlags) {
if (actFmPreferenceService.isLoggedIn()) {
addMenuItem(menu, R.string.actfm_TVA_menu_refresh,
ThemeService.getDrawable(R.drawable.icn_menu_refresh, themeFlags), MENU_REFRESH_ID, true);
} else {
super.addSyncRefreshMenuItem(menu, themeFlags);
}
}
@Override
protected void addMenuItems(Menu menu, Activity activity) {
super.addMenuItems(menu, activity);
@ -327,127 +303,10 @@ public class TagViewFragment extends TaskListFragment {
if (DateUtilities.now() - lastAutosync > AUTOSYNC_INTERVAL) {
tagData.setValue(TagData.LAST_AUTOSYNC, DateUtilities.now());
tagDataDao.saveExisting(tagData);
refreshData();
}
}
}
/**
* refresh the list with latest data from the web
*/
private void refreshData() {
if (actFmPreferenceService.isLoggedIn() && tagData != null && !RemoteModel.isUuidEmpty(tagData.getUuid())) {
((TextView) taskListView.findViewById(android.R.id.empty)).setText(R.string.DLG_loading);
SyncMessageCallback callback = new SyncMessageCallback() {
@Override
public void runOnSuccess() {
synchronized (this) {
Activity activity = getActivity();
if (activity != null) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
reloadTagData(false);
refresh();
((TextView) taskListView.findViewById(android.R.id.empty)).setText(R.string.TLA_no_items);
} catch (Exception e) {
// Can happen when swipe between lists is on
}
}
});
}
}
}
@Override
public void runOnErrors(List<JSONArray> errors) {
Activity activity = getActivity();
if (activity != null && activity instanceof TaskListActivity) {
boolean notAuthorized = false;
for (JSONArray error : errors) {
String errorCode = error.optString(1);
if ("not_authorized".equals(errorCode)) { //$NON-NLS-1$
notAuthorized = true;
break;
}
}
final String tagName = tagData.getValue(TagData.NAME);
if (notAuthorized) {
final TaskListActivity tla = (TaskListActivity) activity;
tla.runOnUiThread(new Runnable() {
@Override
public void run() {
DialogUtilities.okCancelCustomDialog(tla,
tla.getString(R.string.actfm_tag_not_authorized_title),
tla.getString(R.string.actfm_tag_not_authorized_body, tagName),
R.string.actfm_tag_not_authorized_new_list,
R.string.actfm_tag_not_authorized_leave_list,
android.R.drawable.ic_dialog_alert,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String oldUuid = tagData.getUuid();
tagData.setValue(TagData.DELETION_DATE, DateUtilities.now());
tagData.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true);
tagDataDao.saveExisting(tagData);
// TODO: Make this better
tagData.clearValue(TagData.ID);
tagData.clearValue(TagData.UUID);
tagData.clearValue(TagData.USER_ID);
tagData.clearValue(TagData.DELETION_DATE);
tagData.setValue(TagData.CREATION_DATE, DateUtilities.now());
tagDataDao.createNew(tagData);
String newUuid = tagData.getUuid();
TodorooCursor<Task> tasks = taskService.fetchFiltered(filter.getSqlQuery(), null, Task.ID, Task.UUID, Task.USER_ID);
try {
Task t = new Task();
for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) {
t.clear();
t.readFromCursor(tasks);
if (Task.USER_ID_SELF.equals(t.getValue(Task.USER_ID))) {
tagService.createLink(t, tagName, newUuid);
}
}
} finally {
tasks.close();
}
tagService.deleteTagMetadata(oldUuid);
Filter newFilter = TagFilterExposer.filterFromTagData(tla, tagData);
tla.onFilterItemClicked(newFilter);
}
},
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String uuid = tagData.getUuid();
tagDataDao.delete(tagData.getId());
metadataDao.deleteWhere(Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY), TaskToTagMetadata.TAG_UUID.eq(uuid)));
tagMetadataDao.deleteWhere(TagMetadata.TAG_UUID.eq(uuid));
tla.switchToActiveTasks();
}
}
);
}
});
}
}
}
};
ActFmSyncThread.getInstance().repopulateQueueFromOutstandingTables();
ActFmSyncThread.getInstance().enqueueMessage(new BriefMe<Task>(Task.class, null, tagData.getValue(TagData.TASKS_PUSHED_AT), BriefMe.TAG_ID_KEY, tagData.getUuid()), callback);
ActFmSyncThread.getInstance().enqueueMessage(new BriefMe<TagData>(TagData.class, tagData.getUuid(), tagData.getValue(TagData.PUSHED_AT)), callback);
ActFmSyncThread.getInstance().enqueueMessage(new BriefMe<TaskListMetadata>(TaskListMetadata.class, null, tagData.getValue(TagData.METADATA_PUSHED_AT), BriefMe.TAG_ID_KEY, tagData.getUuid()), callback);
}
}
protected void setUpMembersGallery() {
getView().findViewById(R.id.members_header).setVisibility(View.GONE);
}
@ -471,7 +330,6 @@ public class TagViewFragment extends TaskListFragment {
//refreshUpdatesList();
}
});
refreshData();
NotificationManager nm = new AndroidNotificationManager(ContextManager.getContext());
try {
@ -556,7 +414,6 @@ public class TagViewFragment extends TaskListFragment {
// handle my own menus
switch (id) {
case MENU_REFRESH_ID:
refreshData();
return true;
case MENU_LIST_SETTINGS_ID:
settingsListener.onClick(null);

@ -5,12 +5,9 @@
*/
package com.todoroo.astrid.actfm.sync;
import android.util.Log;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.RestClient;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Pair;
import com.todoroo.andlib.utility.Preferences;
@ -46,8 +43,6 @@ public class ActFmInvoker {
private static final int API_VERSION = 7;
public static final boolean SYNC_DEBUG = true;
@Autowired
private RestClient restClient;
@ -124,16 +119,9 @@ public class ActFmInvoker {
try {
String request = createFetchUrl(api, method, getParameters);
if (SYNC_DEBUG) {
Log.e("act-fm-invoke", request);
}
String response = restClient.get(request);
JSONObject object = new JSONObject(response);
if (SYNC_DEBUG) {
AndroidUtilities.logJSONObject("act-fm-invoke-response", object);
}
if (object.getString("status").equals("error")) {
throw new ActFmServiceException(object.getString("message"), object);
}
@ -152,9 +140,6 @@ public class ActFmInvoker {
Object[] params = {"token", tok, "data", data, "time", timeString};
String request = createFetchUrl("api/" + API_VERSION, "synchronize", params);
if (SYNC_DEBUG) {
Log.e("act-fm-post", request);
}
Charset chars;
try {
chars = Charset.forName("UTF-8");
@ -169,10 +154,6 @@ public class ActFmInvoker {
String response = restClient.post(request, entity);
JSONObject object = new JSONObject(response);
if (SYNC_DEBUG) {
AndroidUtilities.logJSONObject("act-fm-post-response", object);
}
if (object.getString("status").equals("error")) {
throw new ActFmServiceException(object.getString("message"), object);
}

@ -5,12 +5,10 @@
*/
package com.todoroo.astrid.actfm.sync;
import android.text.TextUtils;
import android.util.Log;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.User;
import com.todoroo.astrid.service.TagDataService;
@ -19,7 +17,6 @@ import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
/**
* Service for synchronizing data on Astrid.com server with local.
@ -67,11 +64,7 @@ public final class ActFmSyncService {
}
private boolean checkForToken() {
if (!actFmPreferenceService.isLoggedIn()) {
return false;
}
token = actFmPreferenceService.getToken();
return true;
return false;
}
// --- json reader helper

@ -21,14 +21,11 @@ import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.sync.messages.BriefMe;
import com.todoroo.astrid.actfm.sync.messages.ChangesHappened;
import com.todoroo.astrid.actfm.sync.messages.ClientToServerMessage;
import com.todoroo.astrid.actfm.sync.messages.JSONPayloadBuilder;
import com.todoroo.astrid.actfm.sync.messages.NameMaps;
import com.todoroo.astrid.actfm.sync.messages.ReplayOutstandingEntries;
import com.todoroo.astrid.actfm.sync.messages.ReplayTaskListMetadataOutstanding;
import com.todoroo.astrid.actfm.sync.messages.ServerToClientMessage;
import com.todoroo.astrid.actfm.sync.messages.TaskListMetadataChangesHappened;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.core.PluginServices;
@ -52,25 +49,19 @@ import com.todoroo.astrid.data.TaskAttachment;
import com.todoroo.astrid.data.TaskListMetadata;
import com.todoroo.astrid.data.TaskListMetadataOutstanding;
import com.todoroo.astrid.data.TaskOutstanding;
import com.todoroo.astrid.data.User;
import com.todoroo.astrid.data.UserActivity;
import com.todoroo.astrid.utility.Constants;
import com.todoroo.astrid.widget.TasksWidget;
import org.apache.http.entity.mime.MultipartEntity;
import org.astrid.R;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ActFmSyncThread {
@ -150,7 +141,7 @@ public class ActFmSyncThread {
}
public static void initializeSyncComponents(TaskDao taskDao, TagDataDao tagDataDao, UserActivityDao userActivityDao,
TaskAttachmentDao taskAttachmentDao, TaskListMetadataDao taskListMetadataDao) {
TaskAttachmentDao taskAttachmentDao, TaskListMetadataDao taskListMetadataDao) {
if (instance == null) {
synchronized (ActFmSyncThread.class) {
if (instance == null) {
@ -239,13 +230,11 @@ public class ActFmSyncThread {
private void sync() {
try {
int batchSize = 4;
List<ClientToServerMessage<?>> messageBatch = new ArrayList<ClientToServerMessage<?>>();
while (true) {
synchronized (monitor) {
while (pendingMessages.isEmpty() && !timeForBackgroundSync() || !actFmPreferenceService.isLoggedIn() || !syncMigration) {
while (true) {
try {
if ((pendingMessages.isEmpty() || !actFmPreferenceService.isLoggedIn()) && notificationId >= 0) {
if (notificationId >= 0) {
notificationManager.cancel(notificationId);
notificationId = -1;
}
@ -260,108 +249,6 @@ public class ActFmSyncThread {
}
}
}
boolean recordSyncSuccess = true;
if (timeForBackgroundSync()) {
repopulateQueueFromOutstandingTables();
enqueueMessage(BriefMe.instantiateBriefMeForClass(TaskListMetadata.class, NameMaps.PUSHED_AT_TASK_LIST_METADATA), DEFAULT_REFRESH_RUNNABLE);
enqueueMessage(BriefMe.instantiateBriefMeForClass(Task.class, NameMaps.PUSHED_AT_TASKS), DEFAULT_REFRESH_RUNNABLE);
enqueueMessage(BriefMe.instantiateBriefMeForClass(TagData.class, NameMaps.PUSHED_AT_TAGS), DEFAULT_REFRESH_RUNNABLE);
enqueueMessage(BriefMe.instantiateBriefMeForClass(User.class, NameMaps.PUSHED_AT_USERS), DEFAULT_REFRESH_RUNNABLE);
setTimeForBackgroundSync(false);
}
while (messageBatch.size() < batchSize && !pendingMessages.isEmpty()) {
ClientToServerMessage<?> message = pendingMessages.remove(0);
if (message != null) {
messageBatch.add(message);
}
}
if (!messageBatch.isEmpty() && checkForToken()) {
JSONPayloadBuilder payload = new JSONPayloadBuilder();
MultipartEntity entity = new MultipartEntity();
for (int i = 0; i < messageBatch.size(); i++) {
ClientToServerMessage<?> message = messageBatch.get(i);
boolean success = payload.addMessage(message, entity);
if (success) {
if (message instanceof ChangesHappened) {
}
} else {
messageBatch.remove(i);
i--;
}
}
if (payload.getMessageCount() == 0) {
messageBatch.clear();
continue;
}
setupNotification();
payload.addJSONObject(getClientVersion());
JSONArray errors = null;
try {
JSONObject response = actFmInvoker.postSync(payload.closeAndReturnString(), entity, token);
// process responses
String time = response.optString("time");
JSONArray serverMessagesJson = response.optJSONArray("messages");
if (serverMessagesJson != null) {
setWidgetSuppression(true);
for (int i = 0; i < serverMessagesJson.length(); i++) {
JSONObject serverMessageJson = serverMessagesJson.optJSONObject(i);
if (serverMessageJson != null) {
ServerToClientMessage serverMessage = ServerToClientMessage.instantiateMessage(serverMessageJson);
if (serverMessage != null) {
serverMessage.processMessage(time);
} else {
syncLog("Index " + i + " unable to instantiate message " + serverMessageJson.toString());
}
}
}
errors = response.optJSONArray("errors");
boolean errorsExist = errors != null && errors.length() > 0;
replayOutstandingChanges(errorsExist);
setWidgetSuppression(false);
}
batchSize = Math.max(12, Math.min(batchSize, messageBatch.size()) * 2);
if (recordSyncSuccess) {
actFmPreferenceService.setLastError(null, null);
actFmPreferenceService.recordSuccessfulSync();
}
} catch (IOException e) {
Log.e(ERROR_TAG, "IOException", e);
batchSize = Math.max(batchSize / 2, 1);
}
Set<SyncMessageCallback> callbacksExecutedThisLoop = new HashSet<SyncMessageCallback>();
Map<Integer, List<JSONArray>> errorMap = buildErrorMap(errors);
for (int i = 0; i < messageBatch.size(); i++) {
ClientToServerMessage<?> message = messageBatch.get(i);
try {
SyncMessageCallback r = pendingCallbacks.remove(message);
if (r != null && !callbacksExecutedThisLoop.contains(r)) {
List<JSONArray> errorList = errorMap.get(i);
if (errorList == null || errorList.isEmpty()) {
r.runOnSuccess();
} else {
r.runOnErrors(errorList);
}
callbacksExecutedThisLoop.add(r);
}
} catch (Exception e) {
Log.e(ERROR_TAG, "Unexpected exception executing sync callback", e);
}
}
messageBatch.clear();
}
}
} catch (Exception e) {
// In the worst case, restart thread if something goes wrong
@ -369,7 +256,6 @@ public class ActFmSyncThread {
thread = null;
startSyncThread();
}
}
private Map<Integer, List<JSONArray>> buildErrorMap(JSONArray errors) {
@ -394,7 +280,6 @@ public class ActFmSyncThread {
// Reapplies changes still in the outstanding tables to the local database
// Called after a batch has finished processing
private void replayOutstandingChanges(boolean afterErrors) {
syncLog("Replaying outstanding changes"); //$NON-NLS-1$
new ReplayOutstandingEntries<Task, TaskOutstanding>(Task.class, NameMaps.TABLE_ID_TASKS, taskDao, taskOutstandingDao, afterErrors).execute();
new ReplayOutstandingEntries<TagData, TagOutstanding>(TagData.class, NameMaps.TABLE_ID_TAGS, tagDataDao, tagOutstandingDao, afterErrors).execute();
new ReplayTaskListMetadataOutstanding(taskListMetadataDao, taskListMetadataOutstandingDao, afterErrors).execute();
@ -438,7 +323,6 @@ public class ActFmSyncThread {
}
public void repopulateQueueFromOutstandingTables() {
syncLog("Constructing queue from outstanding tables"); //$NON-NLS-1$
constructChangesHappenedFromOutstandingTable(Task.class, taskDao, taskOutstandingDao);
constructChangesHappenedFromOutstandingTable(TagData.class, tagDataDao, tagOutstandingDao);
constructChangesHappenedFromOutstandingTable(UserActivity.class, userActivityDao, userActivityOutstandingDao);
@ -489,17 +373,7 @@ public class ActFmSyncThread {
}
private boolean checkForToken() {
if (!actFmPreferenceService.isLoggedIn()) {
return false;
}
token = actFmPreferenceService.getToken();
return true;
}
public static void syncLog(String message) {
if (ActFmInvoker.SYNC_DEBUG) {
Log.e(ERROR_TAG, message);
}
return false;
}
public static class NetworkStateChangedReceiver extends BroadcastReceiver {

@ -78,7 +78,7 @@ public class ActFmSyncV2Provider extends SyncV2Provider {
@Override
public boolean isActive() {
return actFmPreferenceService.isLoggedIn();
return false;
}
// --- synchronize active tasks

@ -111,10 +111,6 @@ public class AstridNewSyncMigrator {
tag.clear();
tag.readFromCursor(noTagData);
if (ActFmInvoker.SYNC_DEBUG) {
Log.w(LOG_TAG, "CREATING TAG DATA " + tag.getValue(TaskToTagMetadata.TAG_NAME));
}
newTagData.setValue(TagData.NAME, tag.getValue(TaskToTagMetadata.TAG_NAME));
tagDataService.save(newTagData);
} catch (Exception e) {
@ -126,6 +122,7 @@ public class AstridNewSyncMigrator {
} finally {
if (noTagData != null) {
noTagData.close();
}
}
@ -361,9 +358,6 @@ public class AstridNewSyncMigrator {
attachment.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true);
}
if (!ActFmPreferenceService.isPremiumUser()) {
attachment.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true);
}
taskAttachmentDao.createNew(attachment);
} catch (Exception e) {
Log.e(LOG_TAG, "Error migrating task attachment metadata", e);
@ -461,21 +455,11 @@ public class AstridNewSyncMigrator {
m.clear(); // Need this since some properties may be null
m.readFromCursor(incompleteMetadata);
if (ActFmInvoker.SYNC_DEBUG) {
Log.w(LOG_TAG, "Incomplete linking task " + m.getValue(Metadata.TASK) + " to " + m.getValue(TaskToTagMetadata.TAG_NAME));
}
if (!m.containsNonNullValue(TaskToTagMetadata.TASK_UUID) || RemoteModel.isUuidEmpty(m.getValue(TaskToTagMetadata.TASK_UUID))) {
if (ActFmInvoker.SYNC_DEBUG) {
Log.w(LOG_TAG, "No task uuid");
}
updateTaskUuid(m);
}
if (!m.containsNonNullValue(TaskToTagMetadata.TAG_UUID) || RemoteModel.isUuidEmpty(m.getValue(TaskToTagMetadata.TAG_UUID))) {
if (ActFmInvoker.SYNC_DEBUG) {
Log.w(LOG_TAG, "No tag uuid");
}
updateTagUuid(m);
}
@ -622,14 +606,8 @@ public class AstridNewSyncMigrator {
long taskId = m.getValue(Metadata.TASK);
Task task = taskDao.fetch(taskId, Task.UUID);
if (task != null) {
if (ActFmInvoker.SYNC_DEBUG) {
Log.w(LOG_TAG, "Linking with task uuid " + task.getValue(Task.UUID));
}
m.setValue(TaskToTagMetadata.TASK_UUID, task.getValue(Task.UUID));
} else {
if (ActFmInvoker.SYNC_DEBUG) {
Log.w(LOG_TAG, "Task not found, deleting link");
}
m.setValue(Metadata.DELETION_DATE, DateUtilities.now());
}
}
@ -638,14 +616,8 @@ public class AstridNewSyncMigrator {
String tag = m.getValue(TaskToTagMetadata.TAG_NAME);
TagData tagData = tagDataService.getTagByName(tag, TagData.UUID);
if (tagData != null) {
if (ActFmInvoker.SYNC_DEBUG) {
Log.w(LOG_TAG, "Linking with tag uuid " + tagData.getValue(TagData.UUID));
}
m.setValue(TaskToTagMetadata.TAG_UUID, tagData.getValue(TagData.UUID));
} else {
if (ActFmInvoker.SYNC_DEBUG) {
Log.w(LOG_TAG, "Tag not found, deleting link");
}
m.setValue(Metadata.DELETION_DATE, DateUtilities.now());
}
}

@ -1,7 +1,5 @@
package com.todoroo.astrid.actfm.sync.messages;
import com.todoroo.astrid.actfm.sync.ActFmSyncThread;
import org.apache.http.entity.mime.MultipartEntity;
import org.json.JSONObject;
@ -25,9 +23,7 @@ public class JSONPayloadBuilder {
try {
temp.delete(0, temp.length());
if (obj != null) {
temp.append(obj)
.append(","); //$NON-NLS-1$
ActFmSyncThread.syncLog(temp.toString());
temp.append(obj).append(","); //$NON-NLS-1$
sb.append(temp);

@ -9,7 +9,6 @@ import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.sync.ActFmInvoker;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.dao.HistoryDao;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
@ -297,10 +296,6 @@ public class MakeChanges<TYPE extends RemoteModel> extends ServerToClientMessage
}
private void uuidChanged(String fromUuid, String toUuid) {
if (ActFmInvoker.SYNC_DEBUG) {
Log.e(ERROR_TAG, "Task UUID collision -- old uuid: " + fromUuid + ", new uuid: " + toUuid);
}
// Update reference from UserActivity to task uuid
UserActivityDao activityDao = PluginServices.getUserActivityDao();
UserActivity activityTemplate = new UserActivity();
@ -403,10 +398,6 @@ public class MakeChanges<TYPE extends RemoteModel> extends ServerToClientMessage
}
private void uuidChanged(String fromUuid, String toUuid) {
if (ActFmInvoker.SYNC_DEBUG) {
Log.e(ERROR_TAG, "Tag UUID collision -- old uuid: " + fromUuid + ", new uuid: " + toUuid);
}
UserActivityDao activityDao = PluginServices.getUserActivityDao();
UserActivity activityTemplate = new UserActivity();
activityTemplate.setValue(UserActivity.TARGET_ID, toUuid);

@ -328,13 +328,8 @@ public class EditPreferences extends TodorooPreferenceActivity {
if (r.getString(R.string.p_account).equals(preference.getKey())) {
int title;
int summary;
if (!actFmPreferenceService.isLoggedIn()) {
title = R.string.account_type_title_not_logged_in;
summary = R.string.account_type_summary_not_logged_in;
} else {
title = R.string.actfm_account_info;
summary = R.string.actfm_account_info_summary;
}
title = R.string.account_type_title_not_logged_in;
summary = R.string.account_type_summary_not_logged_in;
preference.setTitle(title);
preference.setSummary(summary);
} else if (r.getString(R.string.p_taskRowStyle_v2).equals(preference.getKey())) {

@ -13,7 +13,6 @@ import android.widget.TextView;
import com.actionbarsherlock.app.ActionBar;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.service.ThemeService;
import org.astrid.R;
@ -52,11 +51,7 @@ public class TaskEditActivity extends AstridActivity {
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
TextView title = (TextView) actionBar.getCustomView().findViewById(R.id.title);
if (ActFmPreferenceService.isPremiumUser()) {
title.setText(""); //$NON-NLS-1$
} else {
title.setText(isNewTask ? R.string.TEA_new_task : R.string.TAd_contextEditTask);
}
title.setText(""); //$NON-NLS-1$
}
}

@ -1111,10 +1111,6 @@ public final class TaskEditFragment extends SherlockFragment implements
}
private void createNewFileAttachment(String path, String fileName, String fileType) {
if (!ActFmPreferenceService.isPremiumUser()) {
return;
}
TaskAttachment attachment = TaskAttachment.createNewAttachment(model.getUuid(), path, fileName, fileType);
taskAttachmentDao.createNew(attachment);
filesControlSet.refreshMetadata();
@ -1166,15 +1162,13 @@ public final class TaskEditFragment extends SherlockFragment implements
super.onCreateOptionsMenu(menu, inflater);
MenuItem item;
if (ActFmPreferenceService.isPremiumUser()) {
item = menu.add(Menu.NONE, MENU_ATTACH_ID, 0, R.string.premium_attach_file);
item.setIcon(ThemeService.getDrawable(R.drawable.ic_menu_attach));
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
item = menu.add(Menu.NONE, MENU_ATTACH_ID, 0, R.string.premium_attach_file);
item.setIcon(ThemeService.getDrawable(R.drawable.ic_menu_attach));
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
item = menu.add(Menu.NONE, MENU_RECORD_ID, 0, R.string.premium_record_audio);
item.setIcon(ThemeService.getDrawable(R.drawable.ic_menu_mic));
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
item = menu.add(Menu.NONE, MENU_RECORD_ID, 0, R.string.premium_record_audio);
item.setIcon(ThemeService.getDrawable(R.drawable.ic_menu_mic));
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
boolean useSaveAndCancel = Preferences.getBoolean(R.string.p_save_and_cancel, false);
@ -1191,17 +1185,6 @@ public final class TaskEditFragment extends SherlockFragment implements
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
}
boolean wouldShowComments = actFmPreferenceService.isLoggedIn() && menu.findItem(MENU_COMMENTS_REFRESH_ID) == null;
if (wouldShowComments && showEditComments) {
item = menu.add(Menu.NONE, MENU_COMMENTS_REFRESH_ID, Menu.NONE,
R.string.ENA_refresh_comments);
item.setIcon(R.drawable.icn_menu_refresh_dark);
} else if (wouldShowComments && !showEditComments) {
item = menu.add(Menu.NONE, MENU_SHOW_COMMENTS_ID, Menu.NONE, R.string.TEA_menu_comments);
item.setIcon(commentIcon);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
}
@Override

@ -34,7 +34,6 @@ import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.dao.TaskAttachmentDao;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.SyncFlags;
@ -164,34 +163,32 @@ public class FilesControlSet extends PopupControlSet {
setupFileClickListener(name, m);
if (ActFmPreferenceService.isPremiumUser()) {
clearFile.setVisibility(View.VISIBLE);
clearFile.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
DialogUtilities.okCancelDialog(activity, activity.getString(R.string.premium_remove_file_confirm),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface d, int which) {
if (RemoteModel.isValidUuid(m.getValue(TaskAttachment.UUID))) {
m.setValue(TaskAttachment.DELETED_AT, DateUtilities.now());
taskAttachmentDao.saveExisting(m);
} else {
taskAttachmentDao.delete(m.getId());
}
if (m.containsNonNullValue(TaskAttachment.FILE_PATH)) {
File f = new File(m.getValue(TaskAttachment.FILE_PATH));
f.delete();
}
files.remove(m);
refreshDisplayView();
finalList.removeView(fileRow);
clearFile.setVisibility(View.VISIBLE);
clearFile.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
DialogUtilities.okCancelDialog(activity, activity.getString(R.string.premium_remove_file_confirm),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface d, int which) {
if (RemoteModel.isValidUuid(m.getValue(TaskAttachment.UUID))) {
m.setValue(TaskAttachment.DELETED_AT, DateUtilities.now());
taskAttachmentDao.saveExisting(m);
} else {
taskAttachmentDao.delete(m.getId());
}
}, null);
}
});
}
if (m.containsNonNullValue(TaskAttachment.FILE_PATH)) {
File f = new File(m.getValue(TaskAttachment.FILE_PATH));
f.delete();
}
files.remove(m);
refreshDisplayView();
finalList.removeView(fileRow);
}
}, null);
}
});
}
}

@ -156,19 +156,7 @@ public class CalendarAlarmListCreator extends Activity {
@Override
public void onClick(View v) {
// Set members json and save
if (!actFmPreferenceService.isLoggedIn()) {
moreOptions.performClick();
return;
} else {
TagData tagData = new TagData();
tagData.setValue(TagData.NAME, tagName);
tagData.setValue(TagData.MEMBER_COUNT, emails.size());
tagDataService.save(tagData);
for (String email : emails) {
tagMetadataDao.createMemberLink(tagData.getId(), tagData.getUuid(), email, false);
}
dismissWithAnimation();
}
moreOptions.performClick();
}
});

@ -98,7 +98,7 @@ public class GtasksFilterExposer extends BroadcastReceiver implements AstridFilt
DependencyInjectionService.getInstance().inject(this);
// if we aren't logged in (or we are logged in to astrid.com), don't expose features
if (!gtasksPreferenceService.isLoggedIn() || actFmPreferenceService.isLoggedIn()) {
if (!gtasksPreferenceService.isLoggedIn()) {
return null;
}

@ -26,7 +26,6 @@ import com.todoroo.astrid.subtasks.OrderedMetadataListUpdater.OrderedListIterato
import com.todoroo.astrid.sync.SyncProviderUtilities;
import com.todoroo.astrid.utility.SyncMetadataService;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;

@ -5,7 +5,6 @@
*/
package com.todoroo.astrid.gtasks;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.sync.SyncProviderUtilities;
import org.astrid.R;

@ -5,23 +5,16 @@
*/
package com.todoroo.astrid.gtasks;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity;
import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider;
import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider.GtasksImportCallback;
import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider.GtasksImportTuple;
import com.todoroo.astrid.sync.SyncProviderPreferences;
import com.todoroo.astrid.sync.SyncProviderUtilities;
import com.todoroo.astrid.sync.SyncResultCallbackAdapter;
import com.todoroo.astrid.tags.TagService;
import org.astrid.R;
@ -74,11 +67,7 @@ public class GtasksPreferences extends SyncProviderPreferences {
}
private void syncOrImport() {
if (actFmPreferenceService.isLoggedIn()) {
startBlockingImport();
} else {
setResultForSynchronize();
}
setResultForSynchronize();
}
private void setResultForSynchronize() {
@ -86,42 +75,6 @@ public class GtasksPreferences extends SyncProviderPreferences {
finish();
}
private void startBlockingImport() {
final ProgressDialog pd = DialogUtilities.progressDialog(this, getString(R.string.gtasks_import_progress));
pd.setCancelable(false);
GtasksImportCallback callback = new GtasksImportCallback(new SyncResultCallbackAdapter() {/**/
}) {
@Override
public void finished() {
super.finished();
for (GtasksImportTuple tuple : importConflicts) {
final GtasksImportTuple finalTuple = tuple;
String prompt = getString(R.string.gtasks_import_add_to_shared_list, tuple.tagName, tuple.taskName);
DialogUtilities.okCancelCustomDialog(GtasksPreferences.this,
getString(R.string.gtasks_import_dlg_title),
prompt,
R.string.gtasks_import_add_task_ok,
R.string.gtasks_import_add_task_cancel,
android.R.drawable.ic_dialog_alert,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Task task = new Task();
task.setId(finalTuple.taskId);
task.setUuid(finalTuple.taskUuid);
tagService.createLink(task, finalTuple.tagName, finalTuple.tagUuid);
}
},
null);
}
DialogUtilities.dismissDialog(GtasksPreferences.this, pd);
}
};
GtasksSyncV2Provider.getInstance().synchronizeActiveTasks(true, callback);
}
private void startLogin() {
Intent intent = new Intent(this, GtasksLoginActivity.class);
startActivityForResult(intent, REQUEST_LOGIN);

@ -115,9 +115,6 @@ public final class GtasksSyncService {
if (model.checkAndClearTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC)) {
return;
}
if (actFmPreferenceService.isLoggedIn()) {
return;
}
if (gtasksPreferenceService.isOngoing() && !model.checkTransitory(TaskService.TRANS_REPEAT_COMPLETE)) //Don't try and sync changes that occur during a normal sync
{
return;
@ -201,9 +198,6 @@ public final class GtasksSyncService {
if (metadata.checkAndClearTransitory(SyncFlags.GTASKS_SUPPRESS_SYNC)) {
return;
}
if (actFmPreferenceService.isLoggedIn()) {
return;
}
if (!metadata.getValue(Metadata.KEY).equals(GtasksMetadata.METADATA_KEY)) //Don't care about non-gtasks metadata
{
return;
@ -223,9 +217,6 @@ public final class GtasksSyncService {
* Synchronize with server when data changes
*/
public void pushTaskOnSave(Task task, ContentValues values, GtasksInvoker invoker, boolean sleep) throws IOException {
if (actFmPreferenceService.isLoggedIn()) {
return;
}
if (sleep) {
AndroidUtilities.sleepDeep(1000L); //Wait for metadata to be saved
@ -335,9 +326,6 @@ public final class GtasksSyncService {
}
public void pushMetadataOnSave(Metadata model, GtasksInvoker invoker) throws IOException {
if (actFmPreferenceService.isLoggedIn()) {
return;
}
AndroidUtilities.sleepDeep(1000L);
String taskId = model.getValue(GtasksMetadata.ID);

@ -126,7 +126,7 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
@Override
public boolean isActive() {
return gtasksPreferenceService.isLoggedIn() && !actFmPreferenceService.isLoggedIn();
return gtasksPreferenceService.isLoggedIn();
}
public static class GtasksImportTuple {
@ -154,15 +154,11 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
@Override
public void synchronizeActiveTasks(final boolean manual, final SyncResultCallback callback) {
// TODO: Improve this logic. Should only be able to import from settings or something.
final boolean isImport = actFmPreferenceService.isLoggedIn();
if (isImport && !manual) {
return;
}
final boolean isImport = false;
callback.started();
callback.incrementMax(100);
gtasksPreferenceService.recordSyncStart();
new Thread(new Runnable() {
@ -246,7 +242,7 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
return;
}
final boolean isImport = actFmPreferenceService.isLoggedIn();
final boolean isImport = false;
callback.started();
callback.incrementMax(100);
@ -378,9 +374,6 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
private void write(GtasksTaskContainer task) throws IOException {
// merge astrid dates with google dates
if (!task.task.isSaved() && actFmPreferenceService.isLoggedIn()) {
titleMatchWithActFm(task.task);
}
if (task.task.isSaved()) {
Task local = PluginServices.getTaskService().fetchById(task.task.getId(), Task.DUE_DATE, Task.COMPLETION_DATE);

@ -212,18 +212,6 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
}
setUpInterface();
setUpListAdapter();
if (actFmPreferenceService.isLoggedIn()) {
long pushedAt = task.getValue(Task.USER_ACTIVITIES_PUSHED_AT);
if (DateUtilities.now() - pushedAt > DateUtilities.ONE_HOUR / 2) {
refreshData();
} else {
loadingText.setText(R.string.ENA_no_comments);
if (items.size() == 0) {
loadingText.setVisibility(View.VISIBLE);
}
}
}
}

@ -13,7 +13,6 @@ import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
@ -35,7 +34,6 @@ import com.todoroo.astrid.utility.Constants;
import com.todoroo.astrid.utility.Flags;
import org.astrid.R;
import org.json.JSONObject;
public class ReengagementReceiver extends BroadcastReceiver {
@ -74,16 +72,6 @@ public class ReengagementReceiver extends BroadcastReceiver {
String title = Notifications.getRandomReminder(context.getResources().getStringArray(R.array.rmd_reengage_notif_titles));
if (title.contains("%s")) { //$NON-NLS-1$
String name = ""; //$NON-NLS-1$
if (actFmPreferenceService.isLoggedIn()) {
JSONObject thisUser = ActFmPreferenceService.thisUser();
name = thisUser.optString("first_name"); //$NON-NLS-1$
if (TextUtils.isEmpty(name)) {
name = thisUser.optString("name"); //$NON-NLS-1$
}
if (TextUtils.isEmpty(name)) {
name = context.getString(R.string.rmd_reengage_name_default);
}
}
title = String.format(title, name);
}

@ -354,8 +354,8 @@ public class UpdateMessageService {
String url = URL + "?version=" + versionCode + "&" +
"language=" + Locale.getDefault().getISO3Language() + "&" +
"market=" + Constants.MARKET_STRATEGY.strategyId() + "&" +
"actfm=" + (actFmPreferenceService.isLoggedIn() ? "1" : "0") + "&" +
"premium=" + (ActFmPreferenceService.isPremiumUser() ? "1" : "0");
"actfm=0&" +
"premium=1";
String result = restClient.get(url); //$NON-NLS-1$
if (TextUtils.isEmpty(result)) {
return null;

@ -304,9 +304,7 @@ public final class UpgradeService {
}
if (from < V4_6_3) {
if (ActFmPreferenceService.isPremiumUser()) {
Preferences.clear(NameMaps.PUSHED_AT_TAGS);
}
Preferences.clear(NameMaps.PUSHED_AT_TAGS);
Preferences.setLong(TaskListFragment.PREF_LAST_FEEDBACK_TIME, DateUtilities.now());
}
}

@ -22,7 +22,6 @@ import com.todoroo.aacenc.RecognizerApi;
import com.todoroo.aacenc.RecognizerApi.RecognizerApiListener;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
import com.todoroo.astrid.utility.Constants;
import org.astrid.R;
@ -37,8 +36,7 @@ public class VoiceRecognizer {
protected VoiceInputAssistant voiceInputAssistant;
public static boolean speechRecordingAvailable(Context context) {
return ActFmPreferenceService.isPremiumUser() &&
AndroidUtilities.getSdkVersion() >= 8 &&
return AndroidUtilities.getSdkVersion() >= 8 &&
SpeechRecognizer.isRecognitionAvailable(context);
}

Loading…
Cancel
Save