stirante

New new filter store

Apr 30th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.20 KB | None | 0 0
  1. package com.stirante.quizcheat.material;
  2.  
  3. import android.app.ProgressDialog;
  4. import android.content.Context;
  5. import android.os.AsyncTask;
  6. import android.os.Environment;
  7. import android.support.v4.app.Fragment;
  8. import android.support.v7.app.AppCompatActivity;
  9. import android.os.Bundle;
  10. import android.view.LayoutInflater;
  11. import android.view.View;
  12. import android.view.ViewGroup;
  13. import android.widget.AbsListView;
  14. import android.widget.AdapterView;
  15. import android.widget.BaseAdapter;
  16. import android.widget.GridView;
  17. import android.widget.ImageView;
  18. import android.widget.ProgressBar;
  19. import android.widget.TextView;
  20. import android.widget.Toast;
  21.  
  22. import com.stirante.quizcheat.DrawableManager;
  23. import com.stirante.quizcheat.R;
  24.  
  25. import org.apache.http.HttpEntity;
  26. import org.apache.http.HttpResponse;
  27. import org.apache.http.client.methods.HttpGet;
  28. import org.apache.http.client.methods.HttpPost;
  29. import org.apache.http.impl.client.DefaultHttpClient;
  30. import org.apache.http.params.BasicHttpParams;
  31. import org.json.JSONArray;
  32. import org.json.JSONException;
  33. import org.json.JSONObject;
  34.  
  35. import java.io.BufferedReader;
  36. import java.io.File;
  37. import java.io.FileOutputStream;
  38. import java.io.InputStream;
  39. import java.io.InputStreamReader;
  40. import java.util.ArrayList;
  41.  
  42. public class FiltersFragment extends Fragment {
  43.  
  44.     private GridView gridView;
  45.     private ProgressDialog progress;
  46.     private ArrayList<RedditFilter> filters = new ArrayList<>();
  47.     private boolean loading = false;
  48.     private String after = null;
  49.     private File filtersDir = new File(Environment.getExternalStorageDirectory() + "/Snapprefs/NewFilters/");
  50.  
  51.     @Override
  52.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  53.         View v = inflater.inflate(R.layout.activity_filters, container, false);
  54.         filtersDir.mkdirs();
  55.         gridView = (GridView) v.findViewById(R.id.filter_grid);
  56.         gridView.setAdapter(new FilterAdapter());
  57.         gridView.setNumColumns(2);
  58.         progress = ProgressDialog.show(getActivity(), "Loading", "Please wait", true);
  59.         new LoadFilters().execute();
  60.         gridView.setOnScrollListener(new AbsListView.OnScrollListener() {
  61.             @Override
  62.             public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
  63.                 if (firstVisibleItem + visibleItemCount >= totalItemCount) {
  64.                     if (!loading) {
  65.                         new LoadFilters().execute();
  66.                         progress.setMessage("Loading filters");
  67.                         progress.show();
  68.                     }
  69.                 }
  70.             }
  71.  
  72.             @Override
  73.             public void onScrollStateChanged(AbsListView view, int scrollState) {
  74.             }
  75.         });
  76.         gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  77.             @Override
  78.             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  79.                 if (filters.get(position).downloaded) return;
  80.                 System.out.println(filters.get(position).image);
  81.                 new SaveFilter(filters.get(position)).execute();
  82.                 ((ViewHolder) view.getTag()).title.setBackgroundColor(0xaa00ff00);
  83.             }
  84.         });
  85.         return v;
  86.     }
  87.  
  88.     class FilterAdapter extends BaseAdapter {
  89.         public View getView(int position, View convertView, ViewGroup parent) {
  90.             ViewHolder vh;
  91.             if (convertView == null) {
  92.                 convertView = LayoutInflater.from(getActivity()).inflate(R.layout.filter_element, parent, false);
  93.                 vh = new ViewHolder();
  94.                 vh.image = (ImageView) convertView.findViewById(R.id.filter);
  95.                 vh.title = (TextView) convertView.findViewById(R.id.filter_title);
  96.                 convertView.setTag(vh);
  97.             } else {
  98.                 vh = (ViewHolder) convertView.getTag();
  99.             }
  100.             vh.filter = filters.get(position);
  101.             vh.image.setImageBitmap(null);
  102.             String text = vh.filter.name + "\nAuthor: " + vh.filter.author + "\n Score: " + vh.filter.score;
  103.             vh.title.setText(text);
  104.             DrawableManager.fetchDrawableOnThread(vh.filter.preview, vh.image);
  105.             if (vh.filter.downloaded)
  106.                 vh.title.setBackgroundColor(0xaa00ff00);
  107.             else
  108.                 vh.title.setBackgroundColor(0xaa000000);
  109.             return convertView;
  110.         }
  111.  
  112.         @Override
  113.         public int getCount() {
  114.             return filters.size();
  115.         }
  116.  
  117.         @Override
  118.         public Object getItem(int position) {
  119.             return filters.get(position);
  120.         }
  121.  
  122.         @Override
  123.         public long getItemId(int position) {
  124.             return position;
  125.         }
  126.  
  127.         @Override
  128.         public boolean hasStableIds() {
  129.             return true;
  130.         }
  131.     }
  132.  
  133.     class ViewHolder {
  134.         RedditFilter filter;
  135.         TextView title;
  136.         ImageView image;
  137.     }
  138.  
  139.     class RedditFilter {
  140.         String id;
  141.         String name;
  142.         String preview;
  143.         String image;
  144.         String author;
  145.         int score;
  146.         boolean downloaded;
  147.         public String url;
  148.  
  149.         @Override
  150.         public String toString() {
  151.             return "RedditFilter{" +
  152.                     "id='" + id + '\'' +
  153.                     ", name='" + name + '\'' +
  154.                     ", preview='" + preview + '\'' +
  155.                     ", image='" + image + '\'' +
  156.                     ", author='" + author + '\'' +
  157.                     ", score=" + score +
  158.                     ", downloaded=" + downloaded +
  159.                     ", url='" + url + '\'' +
  160.                     '}';
  161.         }
  162.     }
  163.  
  164.     class LoadFilters extends AsyncTask<Void, Void, Void> {
  165.  
  166.         @Override
  167.         protected void onPreExecute() {
  168.             loading = true;
  169.         }
  170.  
  171.         @Override
  172.         protected Void doInBackground(Void... params) {
  173.             DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
  174.             String uri = "https://www.reddit.com/r/snapprefs/hot.json?limit=25";
  175.             if (after != null && !after.isEmpty()) {
  176.                 uri += "&after=" + after;
  177.             }
  178.             HttpGet get = new HttpGet(uri);
  179.             get.setHeader("Content-type", "application/json");
  180.  
  181.             InputStream inputStream = null;
  182.             String result = null;
  183.             try {
  184.                 HttpResponse response = httpclient.execute(get);
  185.                 HttpEntity entity = response.getEntity();
  186.                 inputStream = entity.getContent();
  187.                 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
  188.                 StringBuilder sb = new StringBuilder();
  189.                 String line;
  190.                 while ((line = reader.readLine()) != null) {
  191.                     sb.append(line).append("\n");
  192.                 }
  193.                 result = sb.toString();
  194.             } catch (Exception ignored) {
  195.             } finally {
  196.                 try {
  197.                     if (inputStream != null) inputStream.close();
  198.                 } catch (Exception ignored) {
  199.                 }
  200.             }
  201.             try {
  202.                 JSONObject jObject = new JSONObject(result);
  203.                 after = jObject.getJSONObject("data").getString("after");
  204.                 JSONArray jsonArray = jObject.getJSONObject("data").getJSONArray("children");
  205.                 for (int i = 0; i < jsonArray.length(); i++) {
  206.                     JSONObject obj = jsonArray.getJSONObject(i).getJSONObject("data");
  207.                     if (obj.getString("domain").equalsIgnoreCase("self.snapprefs") || !obj.has("preview") || obj.getString("title").toLowerCase().contains("[request]"))
  208.                         continue;
  209.                     RedditFilter f = new RedditFilter();
  210.                     f.id = obj.getString("id");
  211.                     f.score = obj.getInt("score");
  212.                     f.name = obj.getString("title");
  213.                     f.preview = obj.getString("thumbnail");
  214.                     f.image = obj.getJSONObject("preview").getJSONArray("images").getJSONObject(0).getJSONObject("source").getString("url");
  215.                     f.author = obj.getString("author");
  216.                     f.downloaded = new File(filtersDir, f.id + ".jpg").exists();
  217.                     f.url = obj.getString("url");
  218.                     filters.add(f);
  219.                 }
  220.             } catch (JSONException e) {
  221.                 e.printStackTrace();
  222.             }
  223.             return null;
  224.         }
  225.  
  226.         @Override
  227.         protected void onPostExecute(Void aVoid) {
  228.             progress.dismiss();
  229.             ((FilterAdapter) gridView.getAdapter()).notifyDataSetChanged();
  230.             gridView.invalidateViews();
  231.             loading = false;
  232.         }
  233.     }
  234.  
  235.     class SaveFilter extends AsyncTask<Void, Void, Boolean> {
  236.  
  237.         private RedditFilter redditFilter;
  238.  
  239.         public SaveFilter(RedditFilter redditFilter) {
  240.             this.redditFilter = redditFilter;
  241.         }
  242.  
  243.         @Override
  244.         protected void onPreExecute() {
  245.             progress.setMessage("Downloading filter");
  246.             progress.show();
  247.         }
  248.  
  249.         @Override
  250.         protected Boolean doInBackground(Void... params) {
  251.             try {
  252.                 DefaultHttpClient httpClient = new DefaultHttpClient();
  253.                 HttpGet request = new HttpGet(redditFilter.image);
  254.                 HttpResponse response = httpClient.execute(request);
  255.                 InputStream input = response.getEntity().getContent();
  256.                 File f = new File(filtersDir, redditFilter.id + ".jpg");
  257.                 FileOutputStream output = new FileOutputStream(f);
  258.                 try {
  259.                     byte[] buffer = new byte[4096];
  260.                     int read;
  261.  
  262.                     while ((read = input.read(buffer)) != -1) {
  263.                         output.write(buffer, 0, read);
  264.                     }
  265.                     output.flush();
  266.                 } finally {
  267.                     output.close();
  268.                     input.close();
  269.                 }
  270.             } catch (Exception e) {
  271.                 e.printStackTrace();
  272.                 return false;
  273.             }
  274.             return true;
  275.         }
  276.  
  277.         @Override
  278.         protected void onPostExecute(Boolean result) {
  279.             progress.dismiss();
  280.             if (result)
  281.                 redditFilter.downloaded = true;
  282.             else
  283.                 Toast.makeText(getActivity(), "Failed to download filter!", Toast.LENGTH_LONG).show();
  284.         }
  285.     }
  286.  
  287. }
  288.  
  289.  
  290.  
  291.  
  292. activity_filters layout
  293. <?xml version="1.0" encoding="utf-8"?>
  294. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  295.     android:layout_width="match_parent"
  296.     android:layout_height="match_parent">
  297.  
  298.     <GridView
  299.         android:id="@+id/filter_grid"
  300.         android:layout_width="match_parent"
  301.         android:layout_height="match_parent"
  302.         android:layout_alignParentTop="true"
  303.         android:clipToPadding="false"
  304.         android:paddingBottom="100dp"
  305.         android:layout_centerHorizontal="true"/>
  306. </RelativeLayout>
  307.  
  308.  
  309.  
  310. filter_element layout
  311. <?xml version="1.0" encoding="utf-8"?>
  312. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  313.     android:layout_width="200dp"
  314.     android:layout_height="200dp"
  315.     android:orientation="vertical">
  316.  
  317.     <ImageView
  318.         android:id="@+id/filter"
  319.         android:layout_width="200dp"
  320.         android:layout_height="200dp"
  321.         android:layout_gravity="center_horizontal"/>
  322.  
  323.     <TextView
  324.         android:id="@+id/filter_title"
  325.         android:layout_width="wrap_content"
  326.         android:layout_height="wrap_content"
  327.         android:layout_alignParentBottom="true"
  328.         android:layout_alignParentEnd="true"
  329.         android:layout_alignParentLeft="true"
  330.         android:layout_alignParentRight="true"
  331.         android:layout_alignParentStart="true"
  332.         android:layout_gravity="center_horizontal"
  333.         android:background="#aa000000"
  334.         android:gravity="center"
  335.         android:padding="10dp"
  336.         android:textColor="#ffffff"/>
  337.  
  338. </RelativeLayout>
Add Comment
Please, Sign In to add comment