mirror of https://github.com/tasks/tasks
Convert DefaultFilterProvider to Kotlin
parent
91b8e900ca
commit
8627559a5d
@ -1,231 +0,0 @@
|
||||
package org.tasks.preferences;
|
||||
|
||||
import static com.todoroo.astrid.core.BuiltInFilterExposer.getMyTasksFilter;
|
||||
import static com.todoroo.astrid.core.BuiltInFilterExposer.getRecentlyModifiedFilter;
|
||||
import static com.todoroo.astrid.core.BuiltInFilterExposer.getTodayFilter;
|
||||
import static com.todoroo.astrid.core.BuiltInFilterExposer.isRecentlyModifiedFilter;
|
||||
import static com.todoroo.astrid.core.BuiltInFilterExposer.isTodayFilter;
|
||||
import static org.tasks.Strings.isNullOrEmpty;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import com.todoroo.astrid.api.CaldavFilter;
|
||||
import com.todoroo.astrid.api.CustomFilter;
|
||||
import com.todoroo.astrid.api.Filter;
|
||||
import com.todoroo.astrid.api.GtasksFilter;
|
||||
import com.todoroo.astrid.api.TagFilter;
|
||||
import com.todoroo.astrid.core.BuiltInFilterExposer;
|
||||
import com.todoroo.astrid.core.CustomFilterExposer;
|
||||
import javax.inject.Inject;
|
||||
import org.tasks.R;
|
||||
import org.tasks.data.CaldavCalendar;
|
||||
import org.tasks.data.CaldavDao;
|
||||
import org.tasks.data.GoogleTaskList;
|
||||
import org.tasks.data.GoogleTaskListDao;
|
||||
import org.tasks.data.LocationDao;
|
||||
import org.tasks.data.Place;
|
||||
import org.tasks.data.TagData;
|
||||
import org.tasks.data.TagDataDao;
|
||||
import org.tasks.filters.PlaceFilter;
|
||||
import org.tasks.injection.ForApplication;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class DefaultFilterProvider {
|
||||
|
||||
private static final int TYPE_FILTER = 0;
|
||||
private static final int TYPE_CUSTOM_FILTER = 1;
|
||||
private static final int TYPE_TAG = 2;
|
||||
private static final int TYPE_GOOGLE_TASKS = 3;
|
||||
private static final int TYPE_CALDAV = 4;
|
||||
private static final int TYPE_LOCATION = 5;
|
||||
|
||||
private static final int FILTER_MY_TASKS = 0;
|
||||
private static final int FILTER_TODAY = 1;
|
||||
private static final int FILTER_UNCATEGORIZED = 2;
|
||||
private static final int FILTER_RECENTLY_MODIFIED = 3;
|
||||
|
||||
private final Context context;
|
||||
private final Preferences preferences;
|
||||
private final CustomFilterExposer customFilterExposer;
|
||||
private final TagDataDao tagDataDao;
|
||||
private final GoogleTaskListDao googleTaskListDao;
|
||||
private final CaldavDao caldavDao;
|
||||
private final LocationDao locationDao;
|
||||
|
||||
@Inject
|
||||
public DefaultFilterProvider(
|
||||
@ForApplication Context context,
|
||||
Preferences preferences,
|
||||
CustomFilterExposer customFilterExposer,
|
||||
TagDataDao tagDataDao,
|
||||
GoogleTaskListDao googleTaskListDao,
|
||||
CaldavDao caldavDao,
|
||||
LocationDao locationDao) {
|
||||
this.context = context;
|
||||
this.preferences = preferences;
|
||||
this.customFilterExposer = customFilterExposer;
|
||||
this.tagDataDao = tagDataDao;
|
||||
this.googleTaskListDao = googleTaskListDao;
|
||||
this.caldavDao = caldavDao;
|
||||
this.locationDao = locationDao;
|
||||
}
|
||||
|
||||
public Filter getDashclockFilter() {
|
||||
return getFilterFromPreference(R.string.p_dashclock_filter);
|
||||
}
|
||||
|
||||
public void setDashclockFilter(Filter filter) {
|
||||
setFilterPreference(filter, R.string.p_dashclock_filter);
|
||||
}
|
||||
|
||||
public Filter getBadgeFilter() {
|
||||
return getFilterFromPreference(R.string.p_badge_list);
|
||||
}
|
||||
|
||||
public void setBadgeFilter(Filter filter) {
|
||||
setFilterPreference(filter, R.string.p_badge_list);
|
||||
}
|
||||
|
||||
public Filter getDefaultFilter() {
|
||||
return getFilterFromPreference(R.string.p_default_list);
|
||||
}
|
||||
|
||||
public void setDefaultFilter(Filter filter) {
|
||||
setFilterPreference(filter, R.string.p_default_list);
|
||||
}
|
||||
|
||||
public void setLastViewedFilter(Filter filter) {
|
||||
setFilterPreference(filter, R.string.p_last_viewed_list);
|
||||
}
|
||||
|
||||
public Filter getDefaultRemoteList() {
|
||||
return getFilterFromPreference(
|
||||
preferences.getStringValue(R.string.p_default_remote_list), null);
|
||||
}
|
||||
|
||||
public void setDefaultRemoteList(Filter filter) {
|
||||
setFilterPreference(filter, R.string.p_default_remote_list);
|
||||
}
|
||||
|
||||
public Filter getStartupFilter() {
|
||||
return getFilterFromPreference(
|
||||
preferences.getBoolean(R.string.p_open_last_viewed_list, true)
|
||||
? R.string.p_last_viewed_list
|
||||
: R.string.p_default_list);
|
||||
}
|
||||
|
||||
public Filter getFilterFromPreference(int resId) {
|
||||
return getFilterFromPreference(preferences.getStringValue(resId));
|
||||
}
|
||||
|
||||
public Filter getFilterFromPreference(String preferenceValue) {
|
||||
return getFilterFromPreference(
|
||||
preferenceValue, BuiltInFilterExposer.getMyTasksFilter(context.getResources()));
|
||||
}
|
||||
|
||||
private Filter getFilterFromPreference(String preferenceValue, Filter def) {
|
||||
if (!isNullOrEmpty(preferenceValue)) {
|
||||
try {
|
||||
Filter filter = loadFilter(preferenceValue);
|
||||
if (filter != null) {
|
||||
return filter;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Timber.e(e);
|
||||
}
|
||||
}
|
||||
return def;
|
||||
}
|
||||
|
||||
private Filter loadFilter(String preferenceValue) {
|
||||
String[] split = preferenceValue.split(":");
|
||||
switch (Integer.parseInt(split[0])) {
|
||||
case TYPE_FILTER:
|
||||
return getBuiltInFilter(Integer.parseInt(split[1]));
|
||||
case TYPE_CUSTOM_FILTER:
|
||||
return customFilterExposer.getFilter(Long.parseLong(split[1]));
|
||||
case TYPE_TAG:
|
||||
TagData tag = tagDataDao.getByUuid(split[1]);
|
||||
return tag == null || isNullOrEmpty(tag.getName()) ? null : new TagFilter(tag);
|
||||
case TYPE_GOOGLE_TASKS:
|
||||
GoogleTaskList list = googleTaskListDao.getById(Long.parseLong(split[1]));
|
||||
return list == null ? null : new GtasksFilter(list);
|
||||
case TYPE_CALDAV:
|
||||
CaldavCalendar caldavCalendar = caldavDao.getCalendarByUuid(split[1]);
|
||||
return caldavCalendar == null ? null : new CaldavFilter(caldavCalendar);
|
||||
case TYPE_LOCATION:
|
||||
Place place = locationDao.getPlace(split[1]);
|
||||
return place == null ? null : new PlaceFilter(place);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void setFilterPreference(Filter filter, int prefId) {
|
||||
String filterPreferenceValue = getFilterPreferenceValue(filter);
|
||||
if (!isNullOrEmpty(filterPreferenceValue)) {
|
||||
preferences.setString(prefId, filterPreferenceValue);
|
||||
}
|
||||
}
|
||||
|
||||
public String getFilterPreferenceValue(Filter filter) {
|
||||
int filterType = getFilterType(filter);
|
||||
switch (filterType) {
|
||||
case TYPE_FILTER:
|
||||
return getFilterPreference(filterType, getBuiltInFilterId(filter));
|
||||
case TYPE_CUSTOM_FILTER:
|
||||
return getFilterPreference(filterType, ((CustomFilter) filter).getId());
|
||||
case TYPE_TAG:
|
||||
return getFilterPreference(filterType, ((TagFilter) filter).getUuid());
|
||||
case TYPE_GOOGLE_TASKS:
|
||||
return getFilterPreference(filterType, ((GtasksFilter) filter).getStoreId());
|
||||
case TYPE_CALDAV:
|
||||
return getFilterPreference(filterType, ((CaldavFilter) filter).getUuid());
|
||||
case TYPE_LOCATION:
|
||||
return getFilterPreference(filterType, ((PlaceFilter) filter).getUid());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private <T> String getFilterPreference(int type, T value) {
|
||||
return String.format("%s:%s", type, value);
|
||||
}
|
||||
|
||||
private int getFilterType(Filter filter) {
|
||||
if (filter instanceof TagFilter) {
|
||||
return TYPE_TAG;
|
||||
} else if (filter instanceof GtasksFilter) {
|
||||
return TYPE_GOOGLE_TASKS;
|
||||
} else if (filter instanceof CustomFilter) {
|
||||
return TYPE_CUSTOM_FILTER;
|
||||
} else if (filter instanceof CaldavFilter) {
|
||||
return TYPE_CALDAV;
|
||||
} else if (filter instanceof PlaceFilter) {
|
||||
return TYPE_LOCATION;
|
||||
}
|
||||
return TYPE_FILTER;
|
||||
}
|
||||
|
||||
private Filter getBuiltInFilter(int id) {
|
||||
Resources resources = context.getResources();
|
||||
switch (id) {
|
||||
case FILTER_TODAY:
|
||||
return getTodayFilter(resources);
|
||||
case FILTER_RECENTLY_MODIFIED:
|
||||
return getRecentlyModifiedFilter(resources);
|
||||
case FILTER_UNCATEGORIZED:
|
||||
break;
|
||||
}
|
||||
return getMyTasksFilter(resources);
|
||||
}
|
||||
|
||||
private int getBuiltInFilterId(Filter filter) {
|
||||
if (isTodayFilter(context, filter)) {
|
||||
return FILTER_TODAY;
|
||||
} else if (isRecentlyModifiedFilter(context, filter)) {
|
||||
return FILTER_RECENTLY_MODIFIED;
|
||||
}
|
||||
|
||||
return FILTER_MY_TASKS;
|
||||
}
|
||||
}
|
@ -0,0 +1,144 @@
|
||||
package org.tasks.preferences
|
||||
|
||||
import android.content.Context
|
||||
import com.todoroo.astrid.api.*
|
||||
import com.todoroo.astrid.core.BuiltInFilterExposer
|
||||
import com.todoroo.astrid.core.BuiltInFilterExposer.getMyTasksFilter
|
||||
import com.todoroo.astrid.core.CustomFilterExposer
|
||||
import org.tasks.R
|
||||
import org.tasks.Strings.isNullOrEmpty
|
||||
import org.tasks.data.CaldavDao
|
||||
import org.tasks.data.GoogleTaskListDao
|
||||
import org.tasks.data.LocationDao
|
||||
import org.tasks.data.TagDataDao
|
||||
import org.tasks.filters.PlaceFilter
|
||||
import org.tasks.injection.ForApplication
|
||||
import timber.log.Timber
|
||||
import javax.inject.Inject
|
||||
|
||||
class DefaultFilterProvider @Inject constructor(
|
||||
@param:ForApplication private val context: Context,
|
||||
private val preferences: Preferences,
|
||||
private val customFilterExposer: CustomFilterExposer,
|
||||
private val tagDataDao: TagDataDao,
|
||||
private val googleTaskListDao: GoogleTaskListDao,
|
||||
private val caldavDao: CaldavDao,
|
||||
private val locationDao: LocationDao) {
|
||||
|
||||
var dashclockFilter: Filter?
|
||||
get() = getFilterFromPreference(R.string.p_dashclock_filter)
|
||||
set(filter) = setFilterPreference(filter, R.string.p_dashclock_filter)
|
||||
|
||||
var badgeFilter: Filter?
|
||||
get() = getFilterFromPreference(R.string.p_badge_list)
|
||||
set(filter) = setFilterPreference(filter, R.string.p_badge_list)
|
||||
|
||||
var defaultFilter: Filter?
|
||||
get() = getFilterFromPreference(R.string.p_default_list)
|
||||
set(filter) = setFilterPreference(filter, R.string.p_default_list)
|
||||
|
||||
var lastViewedFilter: Filter?
|
||||
get() = getFilterFromPreference(R.string.p_last_viewed_list)
|
||||
set(filter) = setFilterPreference(filter, R.string.p_last_viewed_list)
|
||||
|
||||
var defaultRemoteList: Filter?
|
||||
get() = getFilterFromPreference(R.string.p_default_remote_list)
|
||||
set(filter) = setFilterPreference(filter, R.string.p_default_remote_list)
|
||||
|
||||
val startupFilter: Filter?
|
||||
get() {
|
||||
return if (preferences.getBoolean(R.string.p_open_last_viewed_list, true)) {
|
||||
lastViewedFilter
|
||||
} else {
|
||||
defaultFilter
|
||||
}
|
||||
}
|
||||
|
||||
fun getFilterFromPreference(resId: Int): Filter? =
|
||||
getFilterFromPreference(preferences.getStringValue(resId))
|
||||
|
||||
fun getFilterFromPreference(prefString: String?): Filter? =
|
||||
getFilterFromPreference(prefString, getMyTasksFilter(context.resources))
|
||||
|
||||
private fun getFilterFromPreference(preferenceValue: String?, def: Filter?): Filter? {
|
||||
if (!isNullOrEmpty(preferenceValue)) {
|
||||
try {
|
||||
val filter = loadFilter(preferenceValue)
|
||||
if (filter != null) {
|
||||
return filter
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Timber.e(e)
|
||||
}
|
||||
}
|
||||
return def
|
||||
}
|
||||
|
||||
private fun loadFilter(preferenceValue: String?): Filter? {
|
||||
val split = preferenceValue!!.split(":".toRegex()).toTypedArray()
|
||||
return when (split[0].toInt()) {
|
||||
TYPE_FILTER -> getBuiltInFilter(split[1].toInt())
|
||||
TYPE_CUSTOM_FILTER -> customFilterExposer.getFilter(split[1].toLong())
|
||||
TYPE_TAG -> {
|
||||
val tag = tagDataDao.getByUuid(split[1])
|
||||
if (tag == null || isNullOrEmpty(tag.name)) null else TagFilter(tag)
|
||||
}
|
||||
TYPE_GOOGLE_TASKS -> googleTaskListDao.getById(split[1].toLong())?.let { GtasksFilter(it) }
|
||||
TYPE_CALDAV -> caldavDao.getCalendarByUuid(split[1])?.let { CaldavFilter(it) }
|
||||
TYPE_LOCATION -> locationDao.getPlace(split[1])?.let { PlaceFilter(it) }
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
private fun setFilterPreference(filter: Filter?, prefId: Int) =
|
||||
getFilterPreferenceValue(filter).let { preferences.setString(prefId, it) }
|
||||
|
||||
fun getFilterPreferenceValue(filter: Filter?): String? = when (val filterType = getFilterType(filter)) {
|
||||
TYPE_FILTER -> getFilterPreference(filterType, getBuiltInFilterId(filter))
|
||||
TYPE_CUSTOM_FILTER -> getFilterPreference(filterType, (filter as CustomFilter).id)
|
||||
TYPE_TAG -> getFilterPreference(filterType, (filter as TagFilter).uuid)
|
||||
TYPE_GOOGLE_TASKS -> getFilterPreference(filterType, (filter as GtasksFilter).storeId)
|
||||
TYPE_CALDAV -> getFilterPreference(filterType, (filter as CaldavFilter).uuid)
|
||||
TYPE_LOCATION -> getFilterPreference(filterType, (filter as PlaceFilter).uid)
|
||||
else -> null
|
||||
}
|
||||
|
||||
private fun <T> getFilterPreference(type: Int, value: T) = "$type:$value"
|
||||
|
||||
private fun getFilterType(filter: Filter?) = when (filter) {
|
||||
is TagFilter -> TYPE_TAG
|
||||
is GtasksFilter -> TYPE_GOOGLE_TASKS
|
||||
is CustomFilter -> TYPE_CUSTOM_FILTER
|
||||
is CaldavFilter -> TYPE_CALDAV
|
||||
is PlaceFilter -> TYPE_LOCATION
|
||||
else -> TYPE_FILTER
|
||||
}
|
||||
|
||||
private fun getBuiltInFilter(id: Int): Filter = when (id) {
|
||||
FILTER_TODAY -> BuiltInFilterExposer.getTodayFilter(context.resources)
|
||||
FILTER_RECENTLY_MODIFIED -> BuiltInFilterExposer.getRecentlyModifiedFilter(context.resources)
|
||||
else -> getMyTasksFilter(context.resources)
|
||||
}
|
||||
|
||||
private fun getBuiltInFilterId(filter: Filter?): Int {
|
||||
if (BuiltInFilterExposer.isTodayFilter(context, filter)) {
|
||||
return FILTER_TODAY
|
||||
} else if (BuiltInFilterExposer.isRecentlyModifiedFilter(context, filter)) {
|
||||
return FILTER_RECENTLY_MODIFIED
|
||||
}
|
||||
return FILTER_MY_TASKS
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val TYPE_FILTER = 0
|
||||
private const val TYPE_CUSTOM_FILTER = 1
|
||||
private const val TYPE_TAG = 2
|
||||
private const val TYPE_GOOGLE_TASKS = 3
|
||||
private const val TYPE_CALDAV = 4
|
||||
private const val TYPE_LOCATION = 5
|
||||
private const val FILTER_MY_TASKS = 0
|
||||
private const val FILTER_TODAY = 1
|
||||
@Suppress("unused") private const val FILTER_UNCATEGORIZED = 2
|
||||
private const val FILTER_RECENTLY_MODIFIED = 3
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue