/* * Copyright (C) 2015 Federico Iosue (federico.iosue@gmail.com) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package it.feio.android.omninotes.async; import android.app.Activity; import android.content.Intent; import android.os.AsyncTask; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import de.greenrobot.event.EventBus; import it.feio.android.omninotes.MainActivity; import it.feio.android.omninotes.R; import it.feio.android.omninotes.SettingsActivity; import it.feio.android.omninotes.async.bus.NavigationUpdatedEvent; import it.feio.android.omninotes.db.DbHelper; import it.feio.android.omninotes.models.Category; import it.feio.android.omninotes.models.ONStyle; import it.feio.android.omninotes.models.adapters.NavDrawerCategoryAdapter; import it.feio.android.omninotes.models.views.NonScrollableListView; import java.lang.ref.WeakReference; import java.util.List; public class CategoryMenuTask extends AsyncTask<Void, Void, List<Category>> { private final WeakReference<Fragment> mFragmentWeakReference; private final MainActivity mainActivity; private NonScrollableListView mDrawerCategoriesList; private View settingsView; private View settingsViewCat; private NonScrollableListView mDrawerList; public CategoryMenuTask(Fragment mFragment) { mFragmentWeakReference = new WeakReference<>(mFragment); this.mainActivity = (MainActivity) mFragment.getActivity(); } @Override protected void onPreExecute() { super.onPreExecute(); mDrawerList = (NonScrollableListView) mainActivity.findViewById(R.id.drawer_nav_list); LayoutInflater inflater = (LayoutInflater) mainActivity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); settingsView = mainActivity.findViewById(R.id.settings_view); // Settings view when categories are available mDrawerCategoriesList = (NonScrollableListView) mainActivity.findViewById(R.id.drawer_tag_list); if (mDrawerCategoriesList.getAdapter() == null && mDrawerCategoriesList.getFooterViewsCount() == 0) { settingsViewCat = inflater.inflate(R.layout.drawer_category_list_footer, null); mDrawerCategoriesList.addFooterView(settingsViewCat); } else { settingsViewCat = mDrawerCategoriesList.getChildAt(mDrawerCategoriesList.getChildCount() - 1); } } @Override protected List<Category> doInBackground(Void... params) { if (isAlive()) { return buildCategoryMenu(); } else { cancel(true); return null; } } @Override protected void onPostExecute(final List<Category> categories) { if (isAlive()) { mDrawerCategoriesList.setAdapter(new NavDrawerCategoryAdapter(mainActivity, categories, mainActivity.getNavigationTmp())); if (categories.size() == 0) { setWidgetVisibility(settingsViewCat, false); setWidgetVisibility(settingsView, true); } else { setWidgetVisibility(settingsViewCat, true); setWidgetVisibility(settingsView, false); } mDrawerCategoriesList.justifyListViewHeightBasedOnChildren(); } } private void setWidgetVisibility(View view, boolean visible) { if (view != null) { view.setVisibility(visible ? View.VISIBLE : View.GONE); } } private boolean isAlive() { return mFragmentWeakReference.get() != null && mFragmentWeakReference.get().isAdded() && mFragmentWeakReference.get().getActivity() != null && !mFragmentWeakReference.get().getActivity().isFinishing(); } private List<Category> buildCategoryMenu() { // Retrieves data to fill tags list List<Category> categories = DbHelper.getInstance().getCategories(); View settings = categories.isEmpty() ? settingsView : settingsViewCat; if (settings == null) return categories; // Fonts.overrideTextSize(mainActivity, // mainActivity.getSharedPreferences(Constants.PREFS_NAME, Context.MODE_MULTI_PROCESS), // settings); settings.setOnClickListener(v -> { Intent settingsIntent = new Intent(mainActivity, SettingsActivity.class); mainActivity.startActivity(settingsIntent); }); // Sets click events mDrawerCategoriesList.setOnItemClickListener((arg0, arg1, position, arg3) -> { Object item = mDrawerCategoriesList.getAdapter().getItem(position); if (mainActivity.updateNavigation(String.valueOf(((Category) item).getId()))) { mDrawerCategoriesList.setItemChecked(position, true); // Forces redraw if (mDrawerList != null) { mDrawerList.setItemChecked(0, false); EventBus.getDefault().post(new NavigationUpdatedEvent(mDrawerCategoriesList.getItemAtPosition (position))); } } }); // Sets long click events mDrawerCategoriesList.setOnItemLongClickListener((arg0, view, position, arg3) -> { if (mDrawerCategoriesList.getAdapter() != null) { Object item = mDrawerCategoriesList.getAdapter().getItem(position); // Ensuring that clicked item is not the ListView header if (item != null) { mainActivity.editTag((Category) item); } } else { mainActivity.showMessage(R.string.category_deleted, ONStyle.ALERT); } return true; }); return categories; } }