android-ibc-forum

Unnamed repository; edit this file 'description' to name the repository.
git clone http://git.code.weiherhei.de/android-ibc-forum.git
Log | Files | Refs

SearchActivity.java (5732B)


      1 /**
      2  * 
      3  */
      4 package de.mtbnews.android;
      5 
      6 import android.app.SearchManager;
      7 import android.content.Intent;
      8 import android.content.SharedPreferences;
      9 import android.os.Bundle;
     10 import android.preference.PreferenceManager;
     11 import android.util.Log;
     12 import android.view.ContextMenu;
     13 import android.view.MenuInflater;
     14 import android.view.MenuItem;
     15 import android.view.View;
     16 import android.view.ContextMenu.ContextMenuInfo;
     17 import android.view.View.OnCreateContextMenuListener;
     18 import android.widget.AdapterView;
     19 import android.widget.ListAdapter;
     20 import android.widget.ListView;
     21 import android.widget.AdapterView.OnItemClickListener;
     22 import de.mtbnews.android.adapter.ListEntryContentAdapter;
     23 import de.mtbnews.android.tapatalk.TapatalkClient;
     24 import de.mtbnews.android.tapatalk.TapatalkException;
     25 import de.mtbnews.android.tapatalk.wrapper.Search;
     26 import de.mtbnews.android.tapatalk.wrapper.Topic;
     27 import de.mtbnews.android.util.IBC;
     28 import de.mtbnews.android.util.ServerAsyncTask;
     29 
     30 /**
     31  * @author dankert
     32  * 
     33  */
     34 public class SearchActivity extends EndlessListActivity<Topic>
     35 {
     36 	public static final String ACTION_SEARCH_UNREAD_TOPICS = "de.mtbnews.android.UNREAD_TOPICS";
     37 	public static final String ACTION_SEARCH_PARTICIPATED_TOPICS = "de.mtbnews.android.PARTICIPATED_TOPICS";
     38 	public static final String ACTION_SEARCH_LATEST_TOPICS = "de.mtbnews.android.LATEST_TOPICS";
     39 	private static final String ACTION_SEARCH_TOPICS_BY_QUERY = Intent.ACTION_SEARCH;
     40 
     41 	private int totalSize;
     42 	private String searchId;
     43 	private SharedPreferences prefs;
     44 	private String query;
     45 	private int searchType;
     46 	private String username;
     47 
     48 	/**
     49 	 * Diese Liste immer von oben beginnen.
     50 	 * 
     51 	 * @see de.mtbnews.android.EndlessListActivity#isAutoScrolldown()
     52 	 */
     53 	@Override
     54 	protected boolean isAutoScrolldown()
     55 	{
     56 		return false;
     57 	}
     58 
     59 	@Override
     60 	protected void onCreate(Bundle savedInstanceState)
     61 	{
     62 		super.onCreate(savedInstanceState);
     63 		setTheme(((IBCApplication) getApplication()).themeResId);
     64 
     65 		setContentView(R.layout.listing);
     66 		prefs = PreferenceManager.getDefaultSharedPreferences(this);
     67 
     68 		username = prefs.getString("username", "");
     69 
     70 		final Intent intent = getIntent();
     71 
     72 		if (ACTION_SEARCH_TOPICS_BY_QUERY.equals(intent.getAction()))
     73 		{
     74 			searchType = TapatalkClient.SEARCHTYPE_QUERY;
     75 			query = intent.getStringExtra(SearchManager.QUERY);
     76 
     77 			setTitle(R.string.searchresult);
     78 
     79 		}
     80 		else if (ACTION_SEARCH_LATEST_TOPICS.equals(intent.getAction()))
     81 		{
     82 			searchType = TapatalkClient.SEARCHTYPE_LATEST;
     83 			query = null;
     84 		}
     85 		else if (ACTION_SEARCH_PARTICIPATED_TOPICS.equals(intent.getAction()))
     86 		{
     87 			searchType = TapatalkClient.SEARCHTYPE_PARTICIPATED;
     88 			query = null;
     89 		}
     90 		else if (ACTION_SEARCH_UNREAD_TOPICS.equals(intent.getAction()))
     91 		{
     92 			searchType = TapatalkClient.SEARCHTYPE_UNREAD;
     93 			query = null;
     94 		}
     95 		else
     96 		{
     97 			// Diese Activity wurde mit einer unbekannten Action aufgerufen.
     98 			Log.w(IBC.TAG, "Unknown search action: " + intent.getAction());
     99 
    100 			// Das kann nur ein Programmfehler sein, daher RTE werfen und damit
    101 			// hoffen, dass der Benutzer einen Bericht sendet.
    102 			throw new RuntimeException("Unknown search action: " + intent.getAction());
    103 		}
    104 
    105 		ListAdapter adapter = new ListEntryContentAdapter(SearchActivity.this, entries);
    106 		setListAdapter(adapter);
    107 
    108 		initialLoad();
    109 
    110 		ListView list = getListView();
    111 		list.setOnCreateContextMenuListener(new OnCreateContextMenuListener()
    112 		{
    113 
    114 			@Override
    115 			public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
    116 			{
    117 				MenuInflater menuInflater = new MenuInflater(getApplication());
    118 				menuInflater.inflate(R.menu.topic_context, menu);
    119 
    120 			}
    121 		});
    122 		list.setOnItemClickListener(new OnItemClickListener()
    123 		{
    124 			@Override
    125 			public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    126 			{
    127 				// int aktPosition = displayFrom + position + 1;
    128 				final Intent intent = new Intent(SearchActivity.this, TopicActivity.class);
    129 				Topic topic = SearchActivity.super.entries.get(position);
    130 				intent.putExtra(TopicActivity.TOPIC_ID, topic.getId());
    131 				startActivity(intent);
    132 			}
    133 		});
    134 	}
    135 
    136 	@Override
    137 	protected int getTotalSize()
    138 	{
    139 		return totalSize;
    140 	}
    141 
    142 	// TODO: Das auch in die anderen Listviews einbauen.
    143 	@Override
    144 	public boolean onContextItemSelected(MenuItem item)
    145 	{
    146 		AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    147 
    148 		switch (item.getItemId())
    149 		{
    150 			case R.id.menu_goto_top:
    151 
    152 				final Intent intent = new Intent(SearchActivity.this, TopicActivity.class);
    153 				intent.putExtra(TopicActivity.TOPIC_ID, super.entries.get(menuInfo.position).getId());
    154 				intent.putExtra("first_post", true);
    155 				startActivity(intent);
    156 				return true;
    157 
    158 			case R.id.menu_goto_bottom:
    159 
    160 				final Intent intent2 = new Intent(SearchActivity.this, TopicActivity.class);
    161 				intent2.putExtra(TopicActivity.TOPIC_ID, super.entries.get(menuInfo.position).getId());
    162 				intent2.putExtra("last_post", true);
    163 				startActivity(intent2);
    164 				return true;
    165 		}
    166 
    167 		return super.onContextItemSelected(item);
    168 	}
    169 
    170 	@Override
    171 	protected void loadEntries(final OnListLoadedListener<Topic> onListLoaded, final int from, final int to,
    172 			boolean firstLoad)
    173 	{
    174 		new ServerAsyncTask(SearchActivity.this, R.string.waitingfor_loadmore)
    175 		{
    176 			private Search search;
    177 
    178 			@Override
    179 			protected void callServer() throws TapatalkException
    180 			{
    181 				TapatalkClient client = ((IBCApplication) getApplication()).getTapatalkClient();
    182 
    183 				search = client.searchTopics(searchType, query, username, from, to, searchId);
    184 
    185 				totalSize = search.topicCount;
    186 				searchId = search.searchId;
    187 			}
    188 
    189 			protected void doOnSuccess()
    190 			{
    191 				onListLoaded.listLoaded(search.getTopics());
    192 			}
    193 
    194 		}.execute();
    195 	}
    196 }