package com.aptoide.amethyst.fragments.main; import android.accounts.AccountManager; import android.content.Context; import android.database.Cursor; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.support.v4.content.Loader; import android.support.v4.widget.SwipeRefreshLayout; import android.text.TextUtils; import android.view.View; import android.widget.ProgressBar; import com.aptoide.amethyst.Aptoide; import com.aptoide.amethyst.CursorLoaderGridRecyclerFragment; import com.aptoide.amethyst.R; import com.aptoide.amethyst.database.AptoideDatabase; import com.aptoide.amethyst.database.SimpleCursorLoader; import com.aptoide.amethyst.database.schema.Schema; import com.aptoide.amethyst.events.BusProvider; import com.aptoide.amethyst.events.OttoEvents; import com.aptoide.amethyst.models.EnumStoreTheme; import com.aptoide.models.displayables.StoreItem; import com.aptoide.amethyst.preferences.AptoidePreferences; import com.aptoide.amethyst.utils.AptoideUtils; import com.aptoide.amethyst.utils.Logger; import com.aptoide.models.displayables.AddStoreRow; import com.aptoide.models.displayables.Displayable; import com.aptoide.models.displayables.DisplayableList; import com.aptoide.models.stores.Login; import com.aptoide.models.stores.Store; import com.squareup.otto.Subscribe; import java.util.ArrayList; import java.util.List; import com.aptoide.amethyst.adapter.main.StoresTabAdapter; /** * Created with IntelliJ IDEA. * User: rmateus * Date: 28-10-2013 * Time: 11:40 * To change this template use File | Settings | File Templates. */ public class StoresFragment extends CursorLoaderGridRecyclerFragment { SwipeRefreshLayout swipeContainer; ProgressBar progressBar; private List<Displayable> displayableList = new ArrayList<>(); private StoresTabAdapter adapter; private boolean isMergeStore; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { isMergeStore = savedInstanceState.getBoolean("isMerge"); } else { isMergeStore = PreferenceManager.getDefaultSharedPreferences(Aptoide.getContext()).getBoolean("mergeStores", false); } AptoideUtils.RepoUtils.addDefaultAppsStore(getContext()); } protected void bindViews(View view) { swipeContainer = (SwipeRefreshLayout )view.findViewById(R.id.swipe_container); progressBar = (ProgressBar )view.findViewById(R.id.progress_bar); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); bindViews(getView()); adapter = new StoresTabAdapter(displayableList); getRecyclerView().setAdapter(adapter); } @Override public void onDestroyView() { super.onDestroyView(); adapter = null; } @Override protected int getColumnMultiplier() { return 1; } @Override protected int getColumnSize() { return AptoideUtils.UI.getStoreBucketSize(); } @Override public void onAttach(Context context) { super.onAttach(context); BusProvider.getInstance().register(this); } @Override public void onDetach() { super.onDetach(); BusProvider.getInstance().unregister(this); } @Override public void onResume() { super.onResume(); if (AccountManager.get(getContext()).getAccountsByType(Aptoide.getConfiguration().getAccountType()).length > 0 && !PreferenceManager.getDefaultSharedPreferences(getContext()).getBoolean(AptoidePreferences.REPOS_SYNCED, false)) { AptoideUtils.RepoUtils.syncRepos(getContext(), spiceManager); } } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { return new SimpleCursorLoader(getContext()) { @Override public Cursor loadInBackground() { return new AptoideDatabase(Aptoide.getDb()).getStoresCursor(); } }; } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { int storeBucketSize = AptoideUtils.UI.getStoreBucketSize(); DisplayableList stores = new DisplayableList(); if (data != null) { for (data.moveToFirst(); !data.isAfterLast(); data.moveToNext()) { String theme = data.getString(data.getColumnIndex(Schema.Repo.COLUMN_THEME)); if (theme != null) { theme = theme.toUpperCase(); } else { theme = "DEFAULT"; } Login login = null; if (!TextUtils.isEmpty(data.getString(data.getColumnIndex("username")))) { login = new Login(); login.setUsername(data.getString(data.getColumnIndex("username"))); login.setPassword(data.getString(data.getColumnIndex("password"))); } StoreItem storeItem = new StoreItem( data.getString(data.getColumnIndex(Schema.Repo.COLUMN_NAME)), data.getString(data.getColumnIndex(Schema.Repo.COLUMN_DOWNLOADS)), data.getString(data.getColumnIndex(Schema.Repo.COLUMN_AVATAR)), EnumStoreTheme.get(theme).getStoreHeader(), EnumStoreTheme.get(theme).ordinal(), "grid".equals(data.getString(data.getColumnIndex(Schema.Repo .COLUMN_VIEW))), data.getLong(data .getColumnIndex(Schema.Repo.COLUMN_ID)), login, storeBucketSize); stores.add(storeItem); } } // Add the final row as a button AddStoreRow storeRow = new AddStoreRow(storeBucketSize); stores.add(storeRow); displayableList.clear(); displayableList.addAll(stores); adapter.notifyDataSetChanged(); getActivity().supportInvalidateOptionsMenu(); swipeContainer.setEnabled(false); progressBar.setVisibility(View.GONE); } public static Fragment newInstance() { return new StoresFragment(); } @Subscribe public void refreshStoresEvent(OttoEvents.RepoAddedEvent event) { Logger.d("AptoideStoreFragment", "OnEvent " + event.getClass().getSimpleName()); refresh(); } @Subscribe public void refreshStoresEvent(OttoEvents.RepoDeletedEvent event) { Logger.d("AptoideStoreFragment", "OnEvent " + event.getClass().getSimpleName()); if (event.stores != null && !event.stores.isEmpty()) { for (Store store : event.stores) { AptoideUtils.RepoUtils.removeStoreOnCloud(store, getActivity(), spiceManager); } } refresh(); } public void refresh() { if (!isMergeStore) getLoaderManager().restartLoader(0, null, this); } }