package com.aptoide.amethyst.fragments;
import android.database.Cursor;
import android.os.Bundle;
import android.support.annotation.CallSuper;
import android.support.annotation.Nullable;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.aptoide.amethyst.Aptoide;
import com.aptoide.amethyst.CursorLoaderLinearRecyclerFragment;
import com.aptoide.amethyst.R;
import com.aptoide.amethyst.analytics.Analytics;
import com.aptoide.amethyst.database.AptoideDatabase;
import com.aptoide.amethyst.database.schema.Schema;
import com.aptoide.models.displayables.ExcludedUpdate;
import java.util.ArrayList;
import java.util.List;
import com.aptoide.amethyst.adapter.ExcludedUpdateAdapter;
import com.aptoide.amethyst.events.BusProvider;
import com.aptoide.amethyst.events.OttoEvents;
public class ExcludedUpdatesFragment extends CursorLoaderLinearRecyclerFragment {
SwipeRefreshLayout swipeContainer;
ProgressBar progressBar;
private static final int MSG_NO_EXCLUDED_UPDATES = 1;
public ArrayList<ExcludedUpdate> excludedUpdates = new ArrayList<>();
@Nullable
private ExcludedUpdateAdapter adapter;
private AptoideDatabase db = new AptoideDatabase(Aptoide.getDb());
protected void bindViews(View view) {
swipeContainer = (SwipeRefreshLayout )view.findViewById(R.id.swipe_container);
progressBar = (ProgressBar )view.findViewById(R.id.progress_bar);
}
@CallSuper
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
bindViews(getView());
adapter = new ExcludedUpdateAdapter(excludedUpdates);
getRecyclerView().setAdapter(adapter);
setHasOptionsMenu(true);
getActivity().findViewById(R.id.swipe_container).setEnabled(false);
startLoading(view);
}
@Override
public void onDestroyView() {
super.onDestroyView();
adapter = null;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_excluded_updates, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int i = item.getItemId();
if (i == android.R.id.home || i == R.id.home) {
getActivity().finish();
} else if (i == R.id.menu_remove) {
if (isAnyChecked(excludedUpdates)) {
Analytics.ExcludedUpdates.restoreUpdates();
final List<String[]> excludedStrings = new ArrayList<>();
for (ExcludedUpdate excludedUpdate : excludedUpdates) {
if (excludedUpdate.isChecked()) {
excludedStrings.add(new String[]{excludedUpdate.getApkid(), String.valueOf(excludedUpdate.getVercode())});
// new AptoideDatabase(Aptoide.getDb()).deleteFromExcludeUpdate(excludedUpdate.getApkid(), excludedUpdate.getVercode());
// FlurryAgent.logEvent("Excluded_Updates_Removed_Update_From_List");
}
}
// Deletes the excluded updates from DB in a background thread, and then
// restarts the loader on the UiThread.
new Thread(new Runnable() {
@Override
public void run() {
new AptoideDatabase(Aptoide.getDb()).deleteFromExcludeUpdate(excludedStrings);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
restartLoader();
}
});
}
}).start();
BusProvider.getInstance().post(new OttoEvents.ExcludedUpdateRemovedEvent());
} else {
Toast toast = Toast.makeText(getActivity(), R.string.no_excluded_updates_selected, Toast.LENGTH_SHORT);
toast.show();
}
} else if (i == R.id.menu_select_all) {
adapter.selectAll();
} else if (i == R.id.menu_select_none) {
adapter.selectNone();
}
return super.onOptionsItemSelected(item);
}
private boolean isAnyChecked(ArrayList<ExcludedUpdate> excludedUpdates){
if(!excludedUpdates.isEmpty()) {
for (ExcludedUpdate excludedUpdate : excludedUpdates) {
if (excludedUpdate.isChecked()) {
return true;
}
}
}
return false;
}
public static ExcludedUpdatesFragment newInstance() {
return new ExcludedUpdatesFragment();
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(getActivity()) {
@Override
public Cursor loadInBackground() {
return db.getExcludedApks();
}
};
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor c) {
excludedUpdates.clear();
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
ExcludedUpdate excludedUpdate = new ExcludedUpdate(
c.getString(c.getColumnIndex(Schema.Excluded.COLUMN_NAME)),
c.getString(c.getColumnIndex(Schema.Excluded.COLUMN_PACKAGE_NAME)),
c.getString(c.getColumnIndex(Schema.Excluded.COLUMN_ICONPATH)),
c.getInt(c.getColumnIndex(Schema.Excluded.COLUMN_VERCODE)),
c.getString(c.getColumnIndex(Schema.Excluded.COLUMN_VERNAME)),
BUCKET_SIZE);
excludedUpdates.add(excludedUpdate);
}
c.close();
if (excludedUpdates.isEmpty()) {
setUiNoUpdates(getView());
} else {
progressBar.setVisibility(View.GONE);
swipeContainer.setEnabled(false);
}
adapter.notifyDataSetChanged();
}
private void startLoading(View view){
progressBar.setVisibility(View.VISIBLE);
// view.findViewById(R.id.list).setVisibility(View.GONE);
view.findViewById(R.id.error).setVisibility(View.GONE);
}
private void setUiNoUpdates(View view) {
TextView tv = (TextView)view.findViewById(R.id.tv_empty_msg);
tv.setVisibility(View.VISIBLE);
tv.setText(getString(R.string.noIgnoreUpdateText));
progressBar.setVisibility(View.GONE);
swipeContainer.setEnabled(false);
view.findViewById(R.id.error).setVisibility(View.GONE);
}
}