/****************************************************************************** * * Copyright 2014 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.List; import org.botlibre.sdk.activity.actions.HttpAction; import org.botlibre.sdk.activity.actions.HttpBrowseCategoriesAction; import org.botlibre.sdk.activity.actions.HttpFetchAction; import org.botlibre.sdk.activity.actions.HttpGetInstancesAction; import org.botlibre.sdk.activity.actions.HttpPageInstancesAction; import org.botlibre.sdk.activity.avatar.AvatarSearchActivity; import org.botlibre.sdk.activity.forum.ForumSearchActivity; import org.botlibre.sdk.activity.livechat.ChannelSearchActivity; import org.botlibre.sdk.activity.script.ScriptSearchActivity; import org.botlibre.sdk.config.BrowseConfig; import org.botlibre.sdk.config.InstanceConfig; import org.botlibre.sdk.config.WebMediumConfig; 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.ListView; import android.widget.PopupMenu; import android.widget.TextView; /** * Activity for choosing an instance from the search results. */ public class BrowseActivity extends LibreActivity { public BrowseConfig browse; public List<WebMediumConfig> instances; public WebMediumConfig instance; protected int page = 0; public void superOnCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_browse); this.instances = MainActivity.instances; this.browse = MainActivity.browse; TextView title = (TextView) findViewById(R.id.title); title.setText("Browse " + getType() + "s"); if (MainActivity.browsing) { findViewById(R.id.chatButton).setVisibility(View.GONE); } ListView list = (ListView) findViewById(R.id.instancesList); GestureDetector.SimpleOnGestureListener listener = new GestureDetector.SimpleOnGestureListener() { @Override public boolean onDoubleTapEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { ListView list = (ListView) findViewById(R.id.instancesList); int index = list.getCheckedItemPosition(); if (index < 0) { return false; } else { selectInstance(list); } 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); } }); resetView(); } public void resetView() { ListView list = (ListView) findViewById(R.id.instancesList); list.setAdapter(new ImageListAdapter(this, R.layout.image_list, this.instances)); View next = (View) findViewById(R.id.nextButton); if (this.instances.size() >= 56 || this.page > 0) { if (this.instances.size() >= 56) { next.setVisibility(View.VISIBLE); } else { next.setVisibility(View.GONE); } } else { next.setVisibility(View.GONE); } View previous = (View) findViewById(R.id.previousButton); if (this.page > 0) { previous.setVisibility(View.VISIBLE); } else { previous.setVisibility(View.GONE); } } public void previousPage(View view) { this.page--; this.browse.page = String.valueOf(this.page); HttpAction action = new HttpPageInstancesAction(this, this.browse); action.execute(); } public void nextPage(View view) { this.page++; this.browse.page = String.valueOf(this.page); HttpAction action = new HttpPageInstancesAction(this, this.browse); action.execute(); } public void superOnResume() { super.onResume(); } @Override public void onResume() { if (!this.instances.isEmpty() && !MainActivity.instances.isEmpty()) { if (this.instances.get(0).getClass() == MainActivity.instances.get(0).getClass()) { this.instances = MainActivity.instances; } } else { this.instances = MainActivity.instances; } resetView(); super.onResume(); } public void menu(View view) { PopupMenu popup = new PopupMenu(this, view); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.layout.menu_browse, popup.getMenu()); onPrepareOptionsMenu(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_browse, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menuMyBots: browseMyBots(); return true; case R.id.menuSearch: search(null); return true; case R.id.menuFeatured: browseFeatured(); return true; case R.id.menuCategories: browseCategories(); return true; default: return super.onOptionsItemSelected(item); } } public void browseMyBots() { BrowseConfig config = new BrowseConfig(); config.type = getType(); config.typeFilter = "Personal"; HttpGetInstancesAction action = new HttpGetInstancesAction(this, config, true); action.execute(); } public void browseFeatured() { BrowseConfig config = new BrowseConfig(); config.type = getType(); config.typeFilter = "Featured"; HttpGetInstancesAction action = new HttpGetInstancesAction(this, config, true); action.execute(); } public void browseCategories() { HttpAction action = new HttpBrowseCategoriesAction(this, getType(), true); action.execute(); } public String getType() { return "Bot"; } @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem item = menu.findItem(R.id.menuMyBots); if (MainActivity.user == null) { item.setEnabled(false); } item.setTitle("My " + getType() + "s"); return true; } public void selectInstance(View view) { ListView list = (ListView) findViewById(R.id.instancesList); int index = list.getCheckedItemPosition(); if (index < 0) { MainActivity.showMessage("Select a bot", this); return; } this.instance = instances.get(index); if (MainActivity.browsing) { MainActivity.instance = this.instance; finish(); return; } InstanceConfig config = new InstanceConfig(); config.id = this.instance.id; config.name = this.instance.name; HttpAction action = new HttpFetchAction(this, config); action.execute(); } public void chat(View view) { ListView list = (ListView) findViewById(R.id.instancesList); int index = list.getCheckedItemPosition(); if (index < 0) { MainActivity.showMessage("Select a bot", this); return; } this.instance = instances.get(index); InstanceConfig config = new InstanceConfig(); config.id = this.instance.id; config.name = this.instance.name; HttpAction action = new HttpFetchAction(this, config, true); action.execute(); } public void search(View view) { finish(); if (!MainActivity.searching) { Intent intent = null; if (getType().equals("Domain")) { intent = new Intent(this, DomainSearchActivity.class); } else if (getType().equals("Forum")) { intent = new Intent(this, ForumSearchActivity.class); } else if (getType().equals("Channel")) { intent = new Intent(this, ChannelSearchActivity.class); } else if (getType().equals("Avatar")) { intent = new Intent(this, AvatarSearchActivity.class); } else if (getType().equals("Script")) { intent = new Intent(this, ScriptSearchActivity.class); } else { intent = new Intent(this, BotSearchActivity.class); } startActivity(intent); } } }