package com.fastaccess.ui.modules.apps.selected;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.Loader;
import android.support.v7.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.fastaccess.App;
import com.fastaccess.R;
import com.fastaccess.data.dao.AppsModel;
import com.fastaccess.provider.loader.SelectedAppsLoader;
import com.fastaccess.ui.adapter.DeviceAppsAdapter;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
import java.util.List;
/**
* Created by Kosh on 10 Oct 2016, 11:45 PM
*/
public class SelectedAppsPresenter extends BasePresenter<SelectedAppsMvp.View> implements SelectedAppsMvp.Presenter {
protected SelectedAppsPresenter(@NonNull SelectedAppsMvp.View view) {
super(view);
}
public static SelectedAppsPresenter with(@NonNull SelectedAppsMvp.View view) {
return new SelectedAppsPresenter(view);
}
@Override public Loader<List<AppsModel>> onCreateLoader(int id, Bundle args) {
if (isAttached()) getView().onStartLoading();
return new SelectedAppsLoader(App.getInstance().getApplicationContext());
}
@Override public void onLoadFinished(Loader<List<AppsModel>> loader, List<AppsModel> data) {
getView().onAppsLoaded(data);
}
@Override public void onLoaderReset(Loader<List<AppsModel>> loader) {
if (isAttached()) getView().onLoaderReset();
}
@Override public void onItemClick(int position, View v, AppsModel item) {
getView().setSelection(item.getComponentName().toShortString(), position);
}
@Override public void onItemLongClick(int position, View v, AppsModel item) {
//op-out for drag & drop
}
@Override public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.remove_menu, menu);
return true;
}
@Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
if (item.getItemId() == R.id.remove) {
getView().onRemoveSelectedApps();
return true;
} else if (item.getItemId() == R.id.selectAll) {
getView().onSelectAll();
return true;
}
return false;
}
@Override public void onDestroyActionMode(ActionMode mode) {
getView().onActionModeDestroyed();
}
@Override public void onRemoveSelectedApps(@Nullable List<AppsModel> selections) {
if (selections != null && !selections.isEmpty()) {
for (AppsModel selection : selections) {
selection.delete();
}
if (isAttached()) getView().onNotifyChanges();
}
}
@Override public void onSaveIndexChanges(@NonNull DeviceAppsAdapter adapter, int fromPosition, int toPosition) {
AppsModel fromTo = adapter.getItem(toPosition);
AppsModel toFrom = adapter.getItem(fromPosition);
int actualFrom = fromTo.getIndexPosition();
int actualTo = toFrom.getIndexPosition();
fromTo.setIndexPosition(actualTo);
fromTo.save();
toFrom.setIndexPosition(actualFrom);
toFrom.save();
}
@Override public void onItemMove(int fromPosition, int toPosition) {
if (fromPosition < toPosition) {
for (int i = fromPosition; i < toPosition; i++) {
if (isAttached()) getView().onSwap(i, i + 1);
}
} else {
for (int i = fromPosition; i > toPosition; i--) {
if (isAttached()) getView().onSwap(i, i - 1);
}
}
if (isAttached()) getView().onNotifyItemMoved(fromPosition, toPosition);
}
@Override public void onItemDismiss(int position) {}
@Override public void onItemStoppedMoving() {
if (isAttached()) getView().onNotifyChanges();
}
}