diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-10-10 18:40:31 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2020-10-10 18:40:31 +0300 |
commit | cd90f4dc840247ac7e35ed984376317cdfd01594 (patch) | |
tree | 1ea38656323340218a8a1316a06750906713c7d0 /app/src/main/java/it/niedermann/owncloud/notes/widget | |
parent | 287300a94fdd3890a0d6877355b071996784ea30 (diff) |
#831 Migrate from SQLiteOpenHelper to Room
List widget
Diffstat (limited to 'app/src/main/java/it/niedermann/owncloud/notes/widget')
2 files changed, 70 insertions, 73 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetConfigurationActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetConfigurationActivity.java index 80d402ef..7b513feb 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetConfigurationActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetConfigurationActivity.java @@ -3,7 +3,6 @@ package it.niedermann.owncloud.notes.widget.notelist; import android.app.Activity; import android.appwidget.AppWidgetManager; import android.content.Intent; -import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.widget.Toast; @@ -30,9 +29,13 @@ import it.niedermann.owncloud.notes.persistence.NotesDatabase; import it.niedermann.owncloud.notes.persistence.entity.Account; import it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData; +import static androidx.lifecycle.Transformations.distinctUntilChanged; +import static androidx.lifecycle.Transformations.map; import static it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData.MODE_DISPLAY_ALL; import static it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData.MODE_DISPLAY_CATEGORY; import static it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData.MODE_DISPLAY_STARRED; +import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.FAVORITES; +import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.RECENT; import static it.niedermann.owncloud.notes.shared.util.DisplayUtils.convertToCategoryNavigationItem; @@ -44,8 +47,6 @@ public class NoteListWidgetConfigurationActivity extends LockedActivity { private Account localAccount = null; private NavigationAdapter adapterCategories; - private NavigationItem itemRecent; - private NavigationItem itemFavorites; private NotesDatabase db = null; @Override @@ -77,14 +78,6 @@ public class NoteListWidgetConfigurationActivity extends LockedActivity { finish(); } - itemRecent = new NavigationItem(MainActivity.ADAPTER_KEY_RECENT, - getString(R.string.label_all_notes), - null, - R.drawable.ic_access_time_grey600_24dp); - itemFavorites = new NavigationItem(MainActivity.ADAPTER_KEY_STARRED, - getString(R.string.label_favorites), - null, - R.drawable.ic_star_yellow_24dp); RecyclerView recyclerView; RecyclerView.LayoutManager layoutManager; @@ -94,17 +87,30 @@ public class NoteListWidgetConfigurationActivity extends LockedActivity { NotesListWidgetData data = new NotesListWidgetData(); data.setId(appWidgetId); - if (itemRecent.equals(item)) { - data.setMode(MODE_DISPLAY_ALL); - } else if (itemFavorites.equals(item)) { - data.setMode(MODE_DISPLAY_STARRED); - } else { - data.setMode(MODE_DISPLAY_CATEGORY); - if (item instanceof NavigationItem.CategoryNavigationItem) { - data.setCategoryId(((NavigationItem.CategoryNavigationItem) item).categoryId); - } else { - throw new IllegalStateException("Tried to choose a category, but "); + if (item.type != null) { + switch (item.type) { + case RECENT: { + data.setMode(MODE_DISPLAY_ALL); + break; + } + case FAVORITES: { + data.setMode(MODE_DISPLAY_STARRED); + break; + } + case UNCATEGORIZED: + default: { + if (item.getClass() == NavigationItem.CategoryNavigationItem.class) { + data.setMode(MODE_DISPLAY_CATEGORY); + data.setCategoryId(((NavigationItem.CategoryNavigationItem) item).categoryId); + } else { + data.setMode(MODE_DISPLAY_ALL); + Log.e(TAG, "Unknown item navigation type. Fallback to show " + RECENT); + } + } } + } else { + data.setMode(MODE_DISPLAY_ALL); + Log.e(TAG, "Unknown item navigation type. Fallback to show " + RECENT); } data.setAccountId(localAccount.getId()); @@ -130,53 +136,30 @@ public class NoteListWidgetConfigurationActivity extends LockedActivity { layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); recyclerView.setAdapter(adapterCategories); - } - - @Override - protected void onResume() { - super.onResume(); - new LoadCategoryListTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - } - - @Override - public void applyBrand(int mainColor, int textColor) { - } + distinctUntilChanged( + map(db.getCategoryDao().getCategoriesLiveData(localAccount.getId()), fromDatabase -> { + List<NavigationItem.CategoryNavigationItem> categories = convertToCategoryNavigationItem(NoteListWidgetConfigurationActivity.this, fromDatabase); - private class LoadCategoryListTask extends AsyncTask<Void, Void, List<NavigationItem>> { - @Override - protected List<NavigationItem> doInBackground(Void... voids) { - if (localAccount == null) { - return new ArrayList<>(); - } - NavigationItem itemUncategorized; - List<NavigationItem.CategoryNavigationItem> categories = convertToCategoryNavigationItem(NoteListWidgetConfigurationActivity.this, db.getCategoryDao().getCategories(localAccount.getId())); - - if (!categories.isEmpty() && categories.get(0).label.isEmpty()) { - itemUncategorized = categories.get(0); - itemUncategorized.label = getString(R.string.action_uncategorized); - itemUncategorized.icon = NavigationAdapter.ICON_NOFOLDER; - } + ArrayList<NavigationItem> items = new ArrayList<>(fromDatabase.size() + 3); + items.add(new NavigationItem(MainActivity.ADAPTER_KEY_RECENT, getString(R.string.label_all_notes), db.getNoteDao().count(localAccount.getId()), R.drawable.ic_access_time_grey600_24dp, RECENT)); + items.add(new NavigationItem(MainActivity.ADAPTER_KEY_STARRED, getString(R.string.label_favorites), db.getNoteDao().getFavoritesCount(localAccount.getId()), R.drawable.ic_star_yellow_24dp, FAVORITES)); - itemFavorites.count = db.getNoteDao().getFavoritesCount(localAccount.getId()); - itemRecent.count = db.getNoteDao().count(localAccount.getId()); - - ArrayList<NavigationItem> items = new ArrayList<>(); - items.add(itemRecent); - items.add(itemFavorites); + if (categories.size() > 2 && categories.get(2).label.isEmpty()) { + items.add(new NavigationItem(MainActivity.ADAPTER_KEY_UNCATEGORIZED, getString(R.string.action_uncategorized), null, NavigationAdapter.ICON_NOFOLDER)); + } - for (NavigationItem item : categories) { - int slashIndex = item.label.indexOf('/'); + for (NavigationItem item : categories) { + int slashIndex = item.label.indexOf('/'); - item.label = slashIndex < 0 ? item.label : item.label.substring(0, slashIndex); - item.id = "category:" + item.label; - items.add(item); - } - return items; - } + item.label = slashIndex < 0 ? item.label : item.label.substring(0, slashIndex); + item.id = "category:" + item.label; + items.add(item); + } + return items; + })).observe(this, (navigationItems) -> adapterCategories.setItems(navigationItems)); + } - @Override - protected void onPostExecute(List<NavigationItem> items) { - adapterCategories.setItems(items); - } + @Override + public void applyBrand(int mainColor, int textColor) { } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetFactory.java b/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetFactory.java index 7208bbe9..64018ab1 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetFactory.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetFactory.java @@ -9,6 +9,9 @@ import android.util.Log; import android.widget.RemoteViews; import android.widget.RemoteViewsService; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.Observer; + import java.util.List; import it.niedermann.owncloud.notes.NotesApplication; @@ -16,8 +19,10 @@ import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.edit.EditNoteActivity; import it.niedermann.owncloud.notes.persistence.NotesDatabase; import it.niedermann.owncloud.notes.persistence.entity.Note; +import it.niedermann.owncloud.notes.persistence.entity.NoteWithCategory; import it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData; import it.niedermann.owncloud.notes.preferences.DarkModeSetting; +import it.niedermann.owncloud.notes.shared.model.CategorySortingMethod; import static it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData.MODE_DISPLAY_ALL; import static it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData.MODE_DISPLAY_CATEGORY; @@ -31,7 +36,9 @@ public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFact private final NotesListWidgetData data; private final boolean darkTheme; private NotesDatabase db; - private List<Note> noteEntities; + private LiveData<List<NoteWithCategory>> noteEntitiesLiveData; + private Observer<List<NoteWithCategory>> noteEntitiesObserver = (notes) -> this.noteEntities = notes; + private List<NoteWithCategory> noteEntities; NoteListWidgetFactory(Context context, Intent intent) { this.context = context; @@ -46,28 +53,35 @@ public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFact @Override public void onCreate() { - } - - @Override - public void onDataSetChanged() { + if (noteEntitiesLiveData != null) { + noteEntitiesLiveData.removeObserver(noteEntitiesObserver); + } try { Log.v(TAG, "--- data - " + data); switch (data.getMode()) { case MODE_DISPLAY_ALL: - noteEntities = db.getNoteDao().getNotes(data.getAccountId()); + noteEntitiesLiveData = db.getNoteDao().searchRecent(data.getAccountId(), "%", CategorySortingMethod.SORT_MODIFIED_DESC.getSorder()); break; case MODE_DISPLAY_STARRED: - noteEntities = db.getNoteDao().searchNotes(data.getAccountId(), null, null, true, null); + noteEntitiesLiveData = db.getNoteDao().searchFavorites(data.getAccountId(), "%", CategorySortingMethod.SORT_MODIFIED_DESC.getSorder()); break; case MODE_DISPLAY_CATEGORY: if (data.getCategoryId() != null) { - noteEntities = db.getNoteDao().searchNotes(data.getAccountId(), null, db.getCategoryDao().getCategoryTitleById(data.getCategoryId()), null, null); + // FIXME + noteEntitiesLiveData = db.getNoteDao().searchByCategory(data.getAccountId(), "%", db.getCategoryDao().getCategoryTitleById(data.getCategoryId()), CategorySortingMethod.SORT_MODIFIED_DESC.getSorder()); + } else { + noteEntitiesLiveData = db.getNoteDao().searchUncategorized(data.getAccountId(), "%", CategorySortingMethod.SORT_MODIFIED_DESC.getSorder()); } break; } } catch (IllegalArgumentException e) { e.printStackTrace(); } + noteEntitiesLiveData.observeForever(noteEntitiesObserver); + } + + @Override + public void onDataSetChanged() { } @Override @@ -98,7 +112,7 @@ public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFact return null; } - Note note = noteEntities.get(position); + Note note = noteEntities.get(position).getNote(); final Intent fillInIntent = new Intent(); final Bundle extras = new Bundle(); |