public void requestPersonalization(HashMap<String, Object> payload) {
    String url, result;
    int endPos;

    // Communication with Emma's server
    List<NewsArticle> tempList = null;
    if (rankingOption == 1 || rankingOption == 3) {
      url =
          Util.loadConfigAssets(mApp, Constants.CONFIG_NEWS_PROPERTIES)
              .getProperty(Constants.CONFIG_PERSONALIZATION_MULTIBANDIT_LEARNING);
      result = HttpController.getHttpPostResponse(url, payload, null, 0);
      NewsArticleVector.setList1(NewsArticleVector.fromJson(result, false));
      tempList = NewsArticleVector.getList1();
    }
    // Communication with William's server
    if (rankingOption == 2 || rankingOption == 3) {
      url =
          Util.loadConfigAssets(mApp, Constants.CONFIG_NEWS_PROPERTIES)
              .getProperty(Constants.CONFIG_PERSONALIZATION_LEARNING_FROM_ADVISE);
      result = HttpController.getHttpPostResponse(url, payload, null, 0);
      NewsArticleVector.setList2(NewsArticleVector.fromJson(result, false));
      tempList = NewsArticleVector.getList2();
    }

    if (rankingOption == 3) {
      tempList = NewsArticleVector.mergeLists();
    }
    endPos = tempList.size();
    NewsArticleVector.sortNews(tempList);
    NewsArticleVector.setIsRecommendedBy(tempList);
    NewsArticleVector.increaseEndPosBatch(endPos);

    sendRefreshNewsEvent();
  }
 public HashMap<String, String> createPersonalizationRequest() {
   HashMap<String, String> map = new HashMap<>();
   map.put("news", Util.toJson(NewsArticleVector.getInstance().getRemaining()));
   map.put("user_info", Util.toJson(userProfile));
   map.put("num_articles", "" + NewsArticleVector.getBatchArticlesToShow());
   map.put("device_id", deviceId);
   return map;
 }
  public void sendFeedback(String list1, String list2) {
    HashMap<String, Object> payload = new HashMap();
    payload.put("user_info", Util.toJson(userProfile));
    payload.put("device_id", deviceId);

    String url;
    // Emma's server
    if (list1 != null) {
      payload.put("news_feedback", list1);
      url =
          Util.loadConfigAssets(mApp, Constants.CONFIG_NEWS_PROPERTIES)
              .getProperty(Constants.CONFIG_FEEDBACK_MULTIBANDIT_LEARNING);
      HttpController.getHttpPostResponse(url, payload, null, 0);
    }

    // William's server
    if (list2 != null) {
      payload.put("news_feedback", list2);
      url =
          Util.loadConfigAssets(mApp, Constants.CONFIG_NEWS_PROPERTIES)
              .getProperty(Constants.CONFIG_FEEDBACK_LEARNING_FROM_ADVISE);
      HttpController.getHttpPostResponse(url, payload, null, 0);
    }
  }
  private ReaderController() {
    bIsConnected = new NetworkUtil(mApp).hasConnectivity();
    ImgLruCacher.purgeDiskCache();

    trd.start();
    mDataHandler = new DataHandler(trd.getLooper());

    mInflator = (LayoutInflater) mApp.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mCs = new CookieStore(mApp);

    mConfig = new Config();
    mConfig.loadConfig();

    mSettings = new Settings();
    mShareHelper = new ShareHelper();

    mNewsHandler = new QueryNewsHandler();
    mapDrawNewsItem = new HashMap<>();

    newsSize =
        Integer.valueOf(
            Util.loadConfigAssets(mApp, "news_config.properties")
                .getProperty("CONFIG_NUM_ARTICLES"));
  }
 public ArrayList applyFilter(ArrayList list, boolean clone) {
   synchronized (list) {
     if (clone) {
       list = Util.cloneList(list);
     }
     if (filters != null && list != null && !filters.isEmpty() && !list.isEmpty()) {
       Iterator<NewsArticle> it = list.iterator();
       elements:
       while (it.hasNext()) {
         NewsArticle item = it.next();
         for (FilterVO filter : filters) {
           if (filter.getAttribute().equals(Constants.ARTICLE_SCORE)
               || filter.getAttribute().equals(Constants.ARTICLE_RAW_SCORE_MAP)) {
             double value = Double.valueOf(filter.getValue());
             double attribute = (Double) convertAttribute(filter.getAttribute(), item);
             if (filter.getOperator().equals(Constants.FILTER_EQUALS_TO) && attribute != value) {
               it.remove();
               continue elements;
             } else if (filter.getOperator().equals(Constants.FILTER_HIGHER_THAN)
                 && attribute <= value) {
               it.remove();
               continue elements;
             } else if (filter.getOperator().equals(Constants.FILTER_LOWER_THAN)
                 && attribute >= value) {
               it.remove();
               continue elements;
             }
           } else if (filter.getAttribute().equals(Constants.ARTICLE_INDEX)) {
             int value = Integer.valueOf(filter.getValue());
             int attribute = (Integer) convertAttribute(filter.getAttribute(), item);
             if (filter.getOperator().equals(Constants.FILTER_EQUALS_TO) && attribute != value) {
               it.remove();
               continue elements;
             } else if (filter.getOperator().equals(Constants.FILTER_HIGHER_THAN)
                 && attribute <= value) {
               it.remove();
               continue elements;
             } else if (filter.getOperator().equals(Constants.FILTER_LOWER_THAN)
                 && attribute >= value) {
               it.remove();
               continue elements;
             }
           } else {
             String attribute = (String) convertAttribute(filter.getAttribute(), item);
             if (filter.getOperator().equals(Constants.FILTER_EQUALS_TO)
                 && attribute.equalsIgnoreCase(filter.getValue()) == false) {
               it.remove();
               continue elements;
             } else if (filter.getOperator().equals(Constants.FILTER_CONTAINS_STRING)
                 && attribute.contains(filter.getValue()) == false) {
               it.remove();
               continue elements;
             }
           }
         }
       }
     }
     isApplyFilter = false;
     return list;
   }
 }