package com.bigpupdev.synodroid.utils;
import java.util.ArrayList;
import java.util.List;
import android.util.Log;
import android.view.View;
import com.bigpupdev.synodroid.Synodroid;
import com.bigpupdev.synodroid.action.DeleteMultipleTaskAction;
import com.bigpupdev.synodroid.action.GetFilesAction;
import com.bigpupdev.synodroid.action.PauseMultipleTaskAction;
import com.bigpupdev.synodroid.action.ResumeMultipleTaskAction;
import com.bigpupdev.synodroid.action.UpdateFilesAction;
import com.bigpupdev.synodroid.data.Task;
import com.bigpupdev.synodroid.data.TaskFile;
import com.bigpupdev.synodroid.ui.BaseActivity;
import com.bigpupdev.synodroid.ui.DetailFiles;
import com.bigpupdev.synodroid.ui.DownloadFragment;
import com.bigpupdev.synodroid.ui.SynodroidFragment;
public class ActionModeHelper{
public boolean terminating = false;
public boolean started = false;
SynodroidFragment mCurrentFragment = null;
ActivityHelper mCurrentActivityHelper = null;
public static ActionModeHelper createInstance() {
return UIUtils.isHoneycomb() ?
new ActionModeHelperHoneycomb() :
new ActionModeHelper();
}
public void stopActionMode(){
if (mCurrentActivityHelper != null){
terminating = true;
if (mCurrentFragment instanceof DownloadFragment )
((DownloadFragment)mCurrentFragment).resetChecked();
else if (mCurrentFragment instanceof DetailFiles)
((DetailFiles)mCurrentFragment).resetChecked();
mCurrentActivityHelper.stopActionMode();
mCurrentFragment = null;
mCurrentActivityHelper = null;
terminating = false;
}
started = false;
}
private List<Task> countSelected(){
List<Task> t_list= new ArrayList<Task>();
for ( int i = ((DownloadFragment)mCurrentFragment).checked_tasks.size() -1 ; i >= 0 ; i--){
t_list.add(((DownloadFragment)mCurrentFragment).checked_tasks.get(i));
}
return t_list;
}
private List<TaskFile> countSelectedFile(){
List<TaskFile> t_list= new ArrayList<TaskFile>();
for ( int i = ((DetailFiles)mCurrentFragment).checked_tasks.size() -1 ; i >= 0 ; i--){
t_list.add(((DetailFiles)mCurrentFragment).checked_tasks.get(i));
}
return t_list;
}
public void startActionMode(DownloadFragment fragment){
if (mCurrentActivityHelper != null){
return;
}
terminating = false;
mCurrentFragment = fragment;
mCurrentActivityHelper = ((BaseActivity) fragment.getActivity()).getActivityHelper();
final Synodroid app = (Synodroid) mCurrentFragment.getActivity().getApplication();
View.OnClickListener cancelClickListener = new View.OnClickListener() {
public void onClick(View view) {
stopActionMode();
}
};
View.OnClickListener clearClickListener = new View.OnClickListener() {
public void onClick(View view) {
try{
if (app.DEBUG) Log.v(Synodroid.DS_TAG, "ActionModeHelper: Action Mode clear clicked.");
}catch (Exception ex){/*DO NOTHING*/}
app.executeAction(((DownloadFragment)mCurrentFragment), new DeleteMultipleTaskAction(countSelected()), false);
stopActionMode();
app.delayedRefresh();
}
};
View.OnClickListener resumeClickListener = new View.OnClickListener() {
public void onClick(View view) {
try{
if (app.DEBUG) Log.v(Synodroid.DS_TAG, "ActionModeHelper: Action Mode resume clicked.");
}catch (Exception ex){/*DO NOTHING*/}
app.executeAction(((DownloadFragment)mCurrentFragment), new ResumeMultipleTaskAction(countSelected()), false);
stopActionMode();
app.delayedRefresh();
}
};
View.OnClickListener pauseClickListener = new View.OnClickListener() {
public void onClick(View view) {
try{
if (app.DEBUG) Log.v(Synodroid.DS_TAG, "ActionModeHelper: Action Mode pause clicked.");
}catch (Exception ex){/*DO NOTHING*/}
app.executeAction(((DownloadFragment)mCurrentFragment), new PauseMultipleTaskAction(countSelected()), false);
stopActionMode();
app.delayedRefresh();
}
};
mCurrentActivityHelper.startActionMode(cancelClickListener, clearClickListener,
resumeClickListener, pauseClickListener);
started = true;
}
public void setTitle(String title){
if (mCurrentActivityHelper != null){
mCurrentActivityHelper.setActionModeTitle(title);
}
}
public boolean isActionModeEnabled(){
return started;
}
public void startActionMode(DetailFiles fragment, final Task taskP) {
if (mCurrentActivityHelper != null){
return;
}
terminating = false;
mCurrentFragment = fragment;
mCurrentActivityHelper = ((BaseActivity) fragment.getActivity()).getActivityHelper();
final Synodroid app = (Synodroid) mCurrentFragment.getActivity().getApplication();
View.OnClickListener cancelClickListener = new View.OnClickListener() {
public void onClick(View view) {
stopActionMode();
}
};
View.OnClickListener highClickListener = new View.OnClickListener() {
public void onClick(View view) {
try{
if (app.DEBUG) Log.v(Synodroid.DS_TAG, "ActionModeHelper: Action Mode High clicked.");
}catch (Exception ex){/*DO NOTHING*/}
app.executeAction(((DetailFiles)mCurrentFragment), new UpdateFilesAction(taskP, countSelectedFile(), "high"), false);
app.executeAsynchronousAction(((DetailFiles)mCurrentFragment), new GetFilesAction(taskP), false);
stopActionMode();
}
};
View.OnClickListener normalClickListener = new View.OnClickListener() {
public void onClick(View view) {
try{
if (app.DEBUG) Log.v(Synodroid.DS_TAG, "ActionModeHelper: Action Mode Normal clicked.");
}catch (Exception ex){/*DO NOTHING*/}
app.executeAction(((DetailFiles)mCurrentFragment), new UpdateFilesAction(taskP, countSelectedFile(), "normal"), false);
app.executeAsynchronousAction(((DetailFiles)mCurrentFragment), new GetFilesAction(taskP), false);
stopActionMode();
}
};
View.OnClickListener lowClickListener = new View.OnClickListener() {
public void onClick(View view) {
try{
if (app.DEBUG) Log.v(Synodroid.DS_TAG, "ActionModeHelper: Action Mode Low clicked.");
}catch (Exception ex){/*DO NOTHING*/}
app.executeAction(((DetailFiles)mCurrentFragment), new UpdateFilesAction(taskP, countSelectedFile(), "low"), false);
app.executeAsynchronousAction(((DetailFiles)mCurrentFragment), new GetFilesAction(taskP), false);
stopActionMode();
}
};
View.OnClickListener skipClickListener = new View.OnClickListener() {
public void onClick(View view) {
try{
if (app.DEBUG) Log.v(Synodroid.DS_TAG, "ActionModeHelper: Action Mode Skip clicked.");
}catch (Exception ex){/*DO NOTHING*/}
app.executeAction(((DetailFiles)mCurrentFragment), new UpdateFilesAction(taskP, countSelectedFile(), "skip"), false);
app.executeAsynchronousAction(((DetailFiles)mCurrentFragment), new GetFilesAction(taskP), false);
stopActionMode();
}
};
mCurrentActivityHelper.startActionMode(cancelClickListener, highClickListener,
normalClickListener, lowClickListener, skipClickListener);
}
}