@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_all_friends_inventories); this.controller = new AllFriendsInventoriesController(this); this.inventory = new Inventory(); this.completeInventory = new Inventory(); this.inventoryItemsListView = (ListView) findViewById(R.id.friendsDisplayedTrinkets); this.searchBox = (EditText) findViewById(R.id.search_box_all_friends); FriendsList friends = LoggedInUser.getInstance().getFriendsList(); final HashMap<Trinket, Friend> trinketToUserMap = new HashMap<>(); for (Friend f : friends) { for (Trinket t : f.getActualFriend().getInventory()) { this.inventory.add(t); this.completeInventory.add(t); trinketToUserMap.put(t, f); } } this.inventoryItemsListView = (ListView) findViewById(R.id.allFriendsDisplayedTrinkets); trinketArrayAdapter = new ArrayAdapter<>(this, R.layout.activity_inventory_trinket, inventory); inventoryItemsListView.setAdapter(trinketArrayAdapter); final AllFriendsInventoriesActivity activity = this; // When a trinket in the ListView is clicked, user is directed to its TrinketDetailsActivity inventoryItemsListView.setOnItemClickListener( new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> v, View view, int position, long id) { Trinket selectedTrinket = inventory.get(position); Friend owner = trinketToUserMap.get(selectedTrinket); ApplicationState.getInstance().setClickedTrinket(selectedTrinket); ApplicationState.getInstance().setClickedFriend(owner); Intent intent = new Intent(AllFriendsInventoriesActivity.this, FriendsTrinketDetailsActivity.class); activity.startActivity(intent); } }); // Dhawal Sodha Parmar; // http://stackoverflow.com/questions/15804805/android-action-bar-searchview-as-autocomplete; // 2015-29-11 autocompleteAdapter = new ArrayAdapter<Trinket>( this, android.R.layout.simple_dropdown_item_1line, completeInventory); filterButton = (Button) findViewById(R.id.allFriendsFilterButtton); filterButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { controller.friendsFilterButtonOnClick(); } }); categorySpinner = (Spinner) findViewById(R.id.allFriendsCategorySpinner); locationSpinner = (Spinner) findViewById(R.id.allFriendsLocationSpinner); }
/** * This method override is responsible for determining how trades will be shown to the user when * they view their Current Trades list and Past Trades list. * * <p>For each trade in the list, it's number, the other person involved in the trade (not * LoggedInUser) and it's status will be displayed. The number for a trade is it's index + 1 in * the list it belongs to in the TradeArchiver (currentTrades or pastTrades). * * <p>If a trade has not yet been clicked (viewed) by a user, <b>NEW!</b> will also be displayed. * * <p> * * @return String Text displayed for each trade in current trades list of ActiveTradesActivity and * in past trades list of PastTradesActivity */ @Override public String toString() { String otherUser; String status = this.getStatus(); int tNo; // determine name of other user involved in trade if (LoggedInUser.getInstance().getProfile().getEmail().equals(receiver.getUsername())) { otherUser = sender.getUsername(); } else { otherUser = receiver.getUsername(); } // use status to determine which list the trade is in (past trades or current trades) // to determine it's number in the list if (status.equals("pending")) { tNo = LoggedInUser.getInstance() .getTradeManager() .getTradeArchiver() .getCurrentTrades() .indexOf(this) + 1; } else { tNo = LoggedInUser.getInstance() .getTradeManager() .getTradeArchiver() .getPastTrades() .indexOf(this) + 1; } // if trade hasn't been clicked (viewed) by user, display NEW! beside it if (isNewOfferedTrade) { return "NEW! Trade No. " + tNo + " with " + otherUser + "\nStatus: " + status; } else { return "Trade No. " + tNo + " with " + otherUser + "\nStatus: " + status; } }
/** * Searches for ElasticStorable objects on the network matching the attribute and attribute value * pairs. Calls onSearchResult with the results when the search completes. * * <p> * * @param postParameters pairs of attributes to use when searching * @param type * @throws IOException */ @Override public <T extends ElasticStorable> void searchOnNetwork( ArrayList<NameValuePair> postParameters, Class<T> type) throws IOException { // Alexis C.; // http://stackoverflow.com/questions/27253555/com-google-gson-internal-linkedtreemap-cannot-be-cast-to-my-class; 2015-11-28 // Android-Droid; // http://stackoverflow.com/questions/8120220/how-to-use-parameters-with-httppost; 2015-11-18 String username = LoggedInUser.getInstance().getProfile().getEmail(); final HttpGet searchRequest = new HttpGet( this.getSearchUrl() + "?q=\"recieverUsername:"******" OR senderUsername:"******"\""); searchRequest.setHeader("Accept", "application/json"); final HttpClient httpClient = new DefaultHttpClient(); Thread thread = new Thread( new Runnable() { @Override public void run() { try { ArrayList<Trade> result = new ArrayList<>(); HttpResponse response = httpClient.execute(searchRequest); Log.i("HttpResponse", response.getStatusLine().toString()); Log.i("HttpResponse Body", EntityUtils.toString(response.getEntity(), "UTF-8")); Type searchResponseType = new TypeToken<SearchHit<Trade>>() {}.getType(); InputStreamReader streamReader = new InputStreamReader(response.getEntity().getContent()); SearchResponse<Trade> esResponse = new Gson().fromJson(streamReader, searchResponseType); for (SearchHit<Trade> hit : esResponse.getHits().getHits()) { result.add(hit.getSource()); } onSearchResult(result); } catch (IOException e) { e.printStackTrace(); } } }); thread.start(); }