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 }