package com.bigpupdev.synodroid.utils;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.util.Log;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import com.bigpupdev.synodroid.R;
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.DetailFiles;
import com.bigpupdev.synodroid.ui.DownloadFragment;
import com.bigpupdev.synodroid.ui.SynodroidFragment;
public class ActionModeHelperHoneycomb extends ActionModeHelper{
public boolean terminating = false;
ActionMode mCurrentActionMode = null;
SynodroidFragment mCurrentFragment = null;
Activity mActivity = null;
Task mCurTask = null;
@Override
public void stopActionMode(){
if (mCurrentActionMode != null) mCurrentActionMode.finish();
started = false;
}
@Override
public void startActionMode(DownloadFragment fragment){
if (mCurrentActionMode != null){
return;
}
terminating = false;
mCurrentFragment = fragment;
mCurrentActionMode = fragment.getActivity().startActionMode(mContentSelectionActionModeCallback);
started = true;
}
@Override
public void startActionMode(DetailFiles fragment, Task taskP){
if (mCurrentActionMode != null){
return;
}
terminating = false;
mCurTask = taskP;
mCurrentFragment = fragment;
mCurrentActionMode = fragment.getActivity().startActionMode(mFileSelectionActionModeCallback);
}
@Override
public void setTitle(String title){
if (mCurrentActionMode != null){
mCurrentActionMode.setTitle(title);
}
}
private ActionMode.Callback mContentSelectionActionModeCallback = new ActionMode.Callback() {
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
MenuInflater inflater = mCurrentFragment.getActivity().getMenuInflater();
inflater.inflate(R.menu.action_mode_menu, menu);
return true;
}
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
return false;
}
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
Synodroid app = (Synodroid) mCurrentFragment.getActivity().getApplication();
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));
}
switch (menuItem.getItemId()) {
case R.id.menu_pause:
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(t_list), false);
actionMode.finish();
app.delayedRefresh();
return true;
case R.id.menu_clear:
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(t_list), false);
actionMode.finish();
app.delayedRefresh();
return true;
case R.id.menu_resume:
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(t_list), false);
actionMode.finish();
app.delayedRefresh();
return true;
}
return false;
}
public void onDestroyActionMode(ActionMode actionMode) {
terminating = true;
((DownloadFragment)mCurrentFragment).resetChecked();
mCurrentActionMode = null;
mCurrentFragment = null;
mCurTask = null;
terminating = false;
}
};
private ActionMode.Callback mFileSelectionActionModeCallback = new ActionMode.Callback() {
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
MenuInflater inflater = mCurrentFragment.getActivity().getMenuInflater();
inflater.inflate(R.menu.action_mode_file_menu, menu);
return true;
}
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
return false;
}
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
Synodroid app = (Synodroid) mCurrentFragment.getActivity().getApplication();
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));
}
switch (menuItem.getItemId()) {
case R.id.menu_high:
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(mCurTask, t_list, "high"), false);
app.executeAsynchronousAction(((DetailFiles)mCurrentFragment), new GetFilesAction(mCurTask), false);
actionMode.finish();
return true;
case R.id.menu_normal:
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(mCurTask, t_list, "normal"), false);
app.executeAsynchronousAction(((DetailFiles)mCurrentFragment), new GetFilesAction(mCurTask), false);
actionMode.finish();
return true;
case R.id.menu_low:
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(mCurTask, t_list, "low"), false);
app.executeAsynchronousAction(((DetailFiles)mCurrentFragment), new GetFilesAction(mCurTask), false);
actionMode.finish();
return true;
case R.id.menu_skip:
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(mCurTask, t_list, "skip"), false);
app.executeAsynchronousAction(((DetailFiles)mCurrentFragment), new GetFilesAction(mCurTask), false);
actionMode.finish();
return true;
}
return false;
}
public void onDestroyActionMode(ActionMode actionMode) {
terminating = true;
((DetailFiles)mCurrentFragment).resetChecked();
mCurrentActionMode = null;
mCurrentFragment = null;
mCurTask = null;
terminating = false;
}
};
}