/****************************************************************************** * * Copyright 2016 Paphus Solutions Inc. * * Licensed under the Eclipse Public License, Version 1.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.eclipse.org/legal/epl-v10.html * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ package org.botlibre.sdk.activity; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.botlibre.sdk.activity.actions.HttpDeleteBotScriptAction; import org.botlibre.sdk.activity.actions.HttpDownBotScriptAction; import org.botlibre.sdk.activity.actions.HttpGetBotScriptsAction; import org.botlibre.sdk.activity.actions.HttpGetInstancesAction; import org.botlibre.sdk.activity.actions.HttpUpBotScriptAction; import org.botlibre.sdk.config.BrowseConfig; import org.botlibre.sdk.config.InstanceConfig; import org.botlibre.sdk.config.ScriptConfig; import org.botlibre.sdk.config.ScriptSourceConfig; import org.botlibre.sdk.R; import android.content.Intent; import android.os.Bundle; import android.view.GestureDetector; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.PopupMenu; import android.widget.TextView; /** * Activity for viewing, editing and importing Bot scripts */ public class BotScriptsActivity extends LibreActivity { protected List<ScriptConfig> scripts = new ArrayList<ScriptConfig>(); protected InstanceConfig instance; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_bot_scripts); this.instance = (InstanceConfig)MainActivity.instance; ListView list = (ListView) findViewById(R.id.botScriptList); GestureDetector.SimpleOnGestureListener listener = new GestureDetector.SimpleOnGestureListener() { @Override public boolean onDoubleTapEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { ListView list = (ListView) findViewById(R.id.botScriptList); int index = list.getCheckedItemPosition(); if (index < 0) { return false; } else { editBotScript(); } return true; } return false; } }; final GestureDetector listDetector = new GestureDetector(this, listener); list.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return listDetector.onTouchEvent(event); } }); HttpGetBotScriptsAction action = new HttpGetBotScriptsAction(this, instance); action.execute(); } @Override public void onResume() { super.onResume(); MainActivity.browsing = false; MainActivity.importingBotScript = false; resetScripts(); } public void resetView() { TextView title = (TextView) findViewById(R.id.title); //Could set title to bot's name, see AvatarEditorActivity ListView scriptList = (ListView)findViewById(R.id.botScriptList); ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, this.scripts.toArray()); scriptList.setAdapter(adapter); } public void resetScripts() { HttpGetBotScriptsAction action = new HttpGetBotScriptsAction(this, instance); action.execute(); } public List<ScriptConfig> getScriptList() { return scripts; } public void setScriptList(List<ScriptConfig> scripts) { this.scripts = scripts; } public void menu(View view) { PopupMenu popup = new PopupMenu(this, view); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.layout.menu_bot_scripts, popup.getMenu()); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { return onOptionsItemSelected(item); } }); popup.show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.layout.menu_bot_scripts, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menuUp: upScript(); return true; case R.id.menuDown: downScript(); return true; case R.id.menuAdd: addBotScript(); return true; case R.id.menuEdit: editBotScript(); return true; case R.id.menuImport: importBotScript(); return true; case R.id.menuDelete: deleteBotScript(); return true; default: return super.onOptionsItemSelected(item); } } public void upScript(View view) { upScript(); } public void upScript() { ListView list = (ListView)findViewById(R.id.botScriptList); int index = list.getCheckedItemPosition(); if (index < 0) { System.out.println("The other index: " + index); MainActivity.showMessage("Select a script to move up in precedence", this); return; } if (index != 0) { ScriptConfig script = this.scripts.get(index); ScriptSourceConfig botScript = new ScriptSourceConfig(); InstanceConfig bot = this.instance; botScript.id = script.id; botScript.instance = bot.id; System.out.println("Bot id: " + bot.id + "Bot instance: " + bot.instance + "ScriptConfig id: " + script.id + "ScriptConfig instance: " + script.instance); //This code should change the index of the thing? Collections.swap(scripts, index, index-1); HttpUpBotScriptAction action = new HttpUpBotScriptAction(this, botScript); action.execute(); } } public void downScript(View view) { downScript(); } public void downScript() { ListView list = (ListView)findViewById(R.id.botScriptList); int index = list.getCheckedItemPosition(); if (index < 0) { MainActivity.showMessage("Select a script to move down in precedence", this); return; } if (index != scripts.size()-1) { ScriptConfig script = this.scripts.get(index); ScriptSourceConfig botScript = new ScriptSourceConfig(); InstanceConfig bot = this.instance; botScript.id = script.id; botScript.instance = bot.id; Collections.swap(scripts, index, index+1); HttpDownBotScriptAction action = new HttpDownBotScriptAction(this, botScript); action.execute(); } } public void editBotScript(View view) { editBotScript(); } public void editBotScript() { ListView list = (ListView)findViewById(R.id.botScriptList); int index = list.getCheckedItemPosition(); if (index < 0) { MainActivity.showMessage("Select a script to edit", this); return; } ScriptConfig script = this.scripts.get(index); ScriptSourceConfig botScript = new ScriptSourceConfig(); InstanceConfig bot = this.instance; botScript.id = script.id; botScript.instance = bot.id; MainActivity.script = botScript; Intent intent = new Intent(this, BotScriptEditorActivity.class); startActivity(intent); } public void addBotScript(View view) { addBotScript(); } public void addBotScript() { MainActivity.script = null; Intent intent = new Intent(this, BotScriptEditorActivity.class); startActivity(intent); } public void importBotScript(View view){ importBotScript(); } public void importBotScript() { MainActivity.browsing = true; MainActivity.importingBotScript = true; BrowseConfig config = new BrowseConfig(); config.type = "Script"; config.typeFilter = "Featured"; HttpGetInstancesAction action = new HttpGetInstancesAction(this, config); action.execute(); } public void deleteBotScript(View view) { deleteBotScript(); } public void deleteBotScript() { ListView list = (ListView)findViewById(R.id.botScriptList); int index = list.getCheckedItemPosition(); if (index < 0) { MainActivity.showMessage("Select a script to delete", this); return; } ScriptConfig script = this.scripts.get(index); ScriptSourceConfig botScript = new ScriptSourceConfig(); InstanceConfig bot = this.instance; botScript.id = script.id; botScript.instance = bot.id; scripts.remove(index); HttpDeleteBotScriptAction action = new HttpDeleteBotScriptAction(this, botScript); action.execute(); } }