Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.stirante.quizcheat.material;
- import android.app.ProgressDialog;
- import android.content.Context;
- import android.os.AsyncTask;
- import android.os.Environment;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AbsListView;
- import android.widget.AdapterView;
- import android.widget.BaseAdapter;
- import android.widget.GridView;
- import android.widget.ImageView;
- import android.widget.ProgressBar;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.stirante.quizcheat.DrawableManager;
- import com.stirante.quizcheat.R;
- import org.apache.http.HttpEntity;
- import org.apache.http.HttpResponse;
- import org.apache.http.client.methods.HttpGet;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.params.BasicHttpParams;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.util.ArrayList;
- public class FiltersActivity extends AppCompatActivity {
- private GridView gridView;
- private ProgressDialog progress;
- private ArrayList<RedditFilter> filters = new ArrayList<>();
- private boolean loading = false;
- private String after = null;
- private File filtersDir = new File(Environment.getExternalStorageDirectory() + "/Snapprefs/NewFilters/");
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_filters);
- filtersDir.mkdirs();
- gridView = (GridView) findViewById(R.id.filter_grid);
- gridView.setAdapter(new FilterAdapter());
- gridView.setNumColumns(2);
- progress = ProgressDialog.show(this, "Loading", "Please wait", true);
- new LoadFilters().execute();
- gridView.setOnScrollListener(new AbsListView.OnScrollListener() {
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- if (firstVisibleItem + visibleItemCount >= totalItemCount) {
- if (!loading) {
- new LoadFilters().execute();
- progress.setMessage("Loading filters");
- progress.show();
- }
- }
- }
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- }
- });
- gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- if (filters.get(position).downloaded) return;
- System.out.println(filters.get(position).image);
- new SaveFilter(filters.get(position)).execute();
- ((ViewHolder) view.getTag()).title.setBackgroundColor(0xaa00ff00);
- }
- });
- }
- class FilterAdapter extends BaseAdapter {
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder vh;
- if (convertView == null) {
- convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.filter_element, null);
- vh = new ViewHolder();
- vh.image = (ImageView) convertView.findViewById(R.id.filter);
- vh.title = (TextView) convertView.findViewById(R.id.filter_title);
- convertView.setTag(vh);
- } else {
- vh = (ViewHolder) convertView.getTag();
- }
- vh.filter = filters.get(position);
- vh.image.setImageBitmap(null);
- String text = vh.filter.name + "\nAuthor: " + vh.filter.author + "\n Score: " + vh.filter.score;
- vh.title.setText(text);
- DrawableManager.fetchDrawableOnThread(vh.filter.preview, vh.image);
- if (vh.filter.downloaded)
- vh.title.setBackgroundColor(0xaa00ff00);
- else
- vh.title.setBackgroundColor(0xaa000000);
- return convertView;
- }
- @Override
- public int getCount() {
- return filters.size();
- }
- @Override
- public Object getItem(int position) {
- return filters.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public boolean hasStableIds() {
- return true;
- }
- }
- class ViewHolder {
- RedditFilter filter;
- TextView title;
- ImageView image;
- }
- class RedditFilter {
- String id;
- String name;
- String preview;
- String image;
- String author;
- int score;
- boolean downloaded;
- @Override
- public String toString() {
- return "RedditFilter{" +
- "id='" + id + '\'' +
- ", name='" + name + '\'' +
- ", preview='" + preview + '\'' +
- ", image='" + image + '\'' +
- ", author='" + author + '\'' +
- ", score=" + score +
- ", downloaded=" + downloaded +
- '}';
- }
- }
- class LoadFilters extends AsyncTask<Void, Void, Void> {
- @Override
- protected void onPreExecute() {
- loading = true;
- }
- @Override
- protected Void doInBackground(Void... params) {
- DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
- String uri = "https://www.reddit.com/r/snapprefs/hot.json?limit=25";//we can increase limit
- if (after != null && !after.isEmpty()) {
- uri += "&after=" + after;//better don't change it :P
- }
- HttpGet get = new HttpGet(uri);
- get.setHeader("Content-type", "application/json");
- InputStream inputStream = null;
- String result = null;
- try {
- HttpResponse response = httpclient.execute(get);
- HttpEntity entity = response.getEntity();
- inputStream = entity.getContent();
- BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
- StringBuilder sb = new StringBuilder();
- String line;
- while ((line = reader.readLine()) != null) {
- sb.append(line + "\n");
- }
- result = sb.toString();
- } catch (Exception ignored) {
- } finally {
- try {
- if (inputStream != null) inputStream.close();
- } catch (Exception ignored) {
- }
- }
- try {
- JSONObject jObject = new JSONObject(result);
- after = jObject.getJSONObject("data").getString("after");
- JSONArray jsonArray = jObject.getJSONObject("data").getJSONArray("children");
- for (int i = 0; i < jsonArray.length(); i++) {
- JSONObject obj = jsonArray.getJSONObject(i).getJSONObject("data");
- if (obj.getString("domain").equalsIgnoreCase("self.snapprefs") || !obj.has("preview") || obj.getString("title").toLowerCase().contains("[request]"))//needs preview tag, can't be self post and filter out requests
- continue;
- RedditFilter f = new RedditFilter();
- f.id = obj.getString("id");
- f.score = obj.getInt("score");
- f.name = obj.getString("title");
- f.preview = obj.getString("thumbnail");//little image for preview
- f.image = obj.getJSONObject("preview").getJSONArray("images").getJSONObject(0).getJSONObject("source").getString("url");//full resolution
- f.author = obj.getString("author");
- f.downloaded = new File(filtersDir, f.id + ".jpg").exists();//named after reddit id so i know if this filter is already downloaded
- filters.add(f);
- }
- } catch (JSONException e) {
- e.printStackTrace();
- }
- return null;
- }
- @Override
- protected void onPostExecute(Void aVoid) {
- progress.dismiss();
- ((FilterAdapter) gridView.getAdapter()).notifyDataSetChanged();
- gridView.invalidateViews();
- loading = false;
- }
- }
- class SaveFilter extends AsyncTask<Void, Void, Boolean> {
- private RedditFilter redditFilter;
- public SaveFilter(RedditFilter redditFilter) {
- this.redditFilter = redditFilter;
- }
- @Override
- protected void onPreExecute() {
- progress.setMessage("Downloading filter");
- progress.show();
- }
- @Override
- protected Boolean doInBackground(Void... params) {
- try {
- DefaultHttpClient httpClient = new DefaultHttpClient();
- HttpGet request = new HttpGet(redditFilter.image);
- HttpResponse response = httpClient.execute(request);
- InputStream input = response.getEntity().getContent();
- File f = new File(filtersDir, redditFilter.id + ".jpg");
- FileOutputStream output = new FileOutputStream(f);
- try {
- byte[] buffer = new byte[4096];
- int read;
- while ((read = input.read(buffer)) != -1) {
- output.write(buffer, 0, read);
- }
- output.flush();
- } finally {
- output.close();
- input.close();
- }
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- return true;
- }
- @Override
- protected void onPostExecute(Boolean result) {
- progress.dismiss();
- if (result)
- redditFilter.downloaded = true;
- else
- Toast.makeText(getApplicationContext(), "Failed to download filter!", Toast.LENGTH_LONG).show();
- }
- }
- }
Add Comment
Please, Sign In to add comment