From fe76420bfc927ee5fc002215724c09a6d2d614c2 Mon Sep 17 00:00:00 2001 From: Renard Date: Fri, 8 Apr 2016 20:14:59 -0300 Subject: Nuevo visor de imágenes --- .../baiparser/MainActivity.java | 24 +-- .../baiparser/ThreadListAdapter.java | 27 ++- .../baiparser/ViewerActivity.java | 204 ++++++--------------- .../baiparser/structure/BoardItemFile.java | 49 +++++ 4 files changed, 128 insertions(+), 176 deletions(-) create mode 100644 app/src/main/java/org/bienvenidoainternet/baiparser/structure/BoardItemFile.java (limited to 'app/src/main/java/org') diff --git a/app/src/main/java/org/bienvenidoainternet/baiparser/MainActivity.java b/app/src/main/java/org/bienvenidoainternet/baiparser/MainActivity.java index 65b51e2..9130160 100644 --- a/app/src/main/java/org/bienvenidoainternet/baiparser/MainActivity.java +++ b/app/src/main/java/org/bienvenidoainternet/baiparser/MainActivity.java @@ -3,13 +3,11 @@ package org.bienvenidoainternet.baiparser; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; -import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.NavigationView; -import android.support.design.widget.Snackbar; import android.support.v4.view.GravityCompat; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; @@ -39,21 +37,18 @@ import org.json.JSONObject; import java.util.ArrayList; import java.util.Random; -import layout.fragmentThreadList; +import layout.FragmentBoardItemList; public class MainActivity extends AppCompatActivity - implements NavigationView.OnNavigationItemSelectedListener, fragmentThreadList.OnFragmentInteractionListener { - - public static final float CURRENT_VERSION = 1.5F; + implements NavigationView.OnNavigationItemSelectedListener, FragmentBoardItemList.OnFragmentInteractionListener { private ViewPager pager; // variable del ViewPager CustomFragmentPagerAdapter pagerAdapter; // Adaptador del ViewPager NavigationView navigationView; DrawerLayout drawer; FloatingActionButton fab; public ThemeManager themeManager; - fragmentThreadList childFragment; // Segunda página del ViewPager, se muestra un solo hilo (selecionado del catálogo) - fragmentThreadList mainFragment; // Primera página del ViewPager, se muestra una lista de hilos. (catálogo) -// fragmentThreadList recentFragment; + FragmentBoardItemList childFragment; // Segunda página del ViewPager, se muestra un solo hilo (selecionado del catálogo) + FragmentBoardItemList mainFragment; // Primera página del ViewPager, se muestra una lista de hilos. (catálogo) Toolbar toolbar = null; public int currentThemeId = 0, themeId = 0; // Id del recurso, Id del tema public ArrayList boardList = new ArrayList<>(); @@ -155,20 +150,17 @@ public class MainActivity extends AppCompatActivity navigationView.setNavigationItemSelectedListener(this); if (savedInstanceState != null) { - mainFragment = (fragmentThreadList) getSupportFragmentManager().getFragment(savedInstanceState, "mainFragment"); - childFragment = (fragmentThreadList) getSupportFragmentManager().getFragment(savedInstanceState, "childFragment"); -// recentFragment = (fragmentThreadList) getSupportFragmentManager().getFragment(savedInstanceState, "recentFragment"); + mainFragment = (FragmentBoardItemList) getSupportFragmentManager().getFragment(savedInstanceState, "mainFragment"); + childFragment = (FragmentBoardItemList) getSupportFragmentManager().getFragment(savedInstanceState, "childFragment"); } else { - mainFragment = fragmentThreadList.newInstance(true, null, null); - childFragment = fragmentThreadList.newInstance(false, null, null); -// recentFragment = fragmentThreadList.newInstance(false, null, -1); + mainFragment = FragmentBoardItemList.newInstance(true, null, null); + childFragment = FragmentBoardItemList.newInstance(false, null, null); } this.pager = (ViewPager) findViewById(R.id.pager); this.pagerAdapter = new CustomFragmentPagerAdapter(getSupportFragmentManager()); pagerAdapter.addFragment(mainFragment); pagerAdapter.addFragment(childFragment); -// pagerAdapter.addFragment(recentFragment); this.pager.setAdapter(pagerAdapter); pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { diff --git a/app/src/main/java/org/bienvenidoainternet/baiparser/ThreadListAdapter.java b/app/src/main/java/org/bienvenidoainternet/baiparser/ThreadListAdapter.java index 57aa362..85cd891 100644 --- a/app/src/main/java/org/bienvenidoainternet/baiparser/ThreadListAdapter.java +++ b/app/src/main/java/org/bienvenidoainternet/baiparser/ThreadListAdapter.java @@ -1,12 +1,8 @@ package org.bienvenidoainternet.baiparser; -import android.animation.ArgbEvaluator; -import android.animation.ObjectAnimator; -import android.animation.ValueAnimator; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; -import android.graphics.Color; import android.graphics.Paint; import android.graphics.Typeface; import android.graphics.drawable.ColorDrawable; @@ -28,6 +24,7 @@ import android.widget.ImageView; import android.widget.TextView; import org.bienvenidoainternet.baiparser.structure.BoardItem; +import org.bienvenidoainternet.baiparser.structure.BoardItemFile; import java.util.ArrayList; import java.util.Collections; @@ -36,7 +33,6 @@ import java.util.EnumSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Random; import java.util.concurrent.TimeUnit; /** @@ -47,6 +43,8 @@ public class ThreadListAdapter extends ArrayAdapter{ private ThemeManager tm; Typeface monaFont; public boolean listThreads = false; + private ArrayList boardItems = new ArrayList(); + private static final String EXTRA_FILELIST = "fileList"; public ThreadListAdapter(Context context, List objects, ThemeManager tm) { super(context, 0, objects); @@ -55,6 +53,10 @@ public class ThreadListAdapter extends ArrayAdapter{ monaFont = Typeface.createFromAsset(context.getAssets(), "fonts/mona.ttf"); } + public void updateBoardItems(ArrayList boardItems){ + this.boardItems = boardItems; + } + private String intToHexString(int i){ return String.format("#%06X", (0xFFFFFF & i)); } @@ -73,7 +75,7 @@ public class ThreadListAdapter extends ArrayAdapter{ return result; } @Override - public View getView(int position, final View convertView, final ViewGroup parent){ + public View getView(final int position, final View convertView, final ViewGroup parent){ LayoutInflater inflater = (LayoutInflater)getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View listItemView = convertView; @@ -120,7 +122,18 @@ public class ThreadListAdapter extends ArrayAdapter{ }else { Intent in = new Intent(convertView.getContext(), ViewerActivity.class); Bundle b = new Bundle(); - b.putParcelable("boardItem", boardItem); + ArrayList fileList = new ArrayList(); + int relativePosition = 0; + for (int i = 0; i < boardItems.size(); i++){ + if (!boardItems.get(i).getFile().isEmpty()){ + if (boardItems.get(i).getFile().equals(boardItem.getFile())){ + relativePosition = fileList.size(); + } + fileList.add(new BoardItemFile("http://bienvenidoainternet.org/" + boardItems.get(i).getParentBoard().getBoardDir() + "/src/" + boardItems.get(i).getFile(), boardItems.get(i).getFile(), boardItems.get(i).getParentBoard().getBoardDir())); + } + } + b.putParcelableArrayList(EXTRA_FILELIST, fileList); + b.putInt("position", relativePosition); in.putExtras(b); convertView.getContext().startActivity(in); } diff --git a/app/src/main/java/org/bienvenidoainternet/baiparser/ViewerActivity.java b/app/src/main/java/org/bienvenidoainternet/baiparser/ViewerActivity.java index 4501c0f..9d140ec 100644 --- a/app/src/main/java/org/bienvenidoainternet/baiparser/ViewerActivity.java +++ b/app/src/main/java/org/bienvenidoainternet/baiparser/ViewerActivity.java @@ -2,55 +2,75 @@ package org.bienvenidoainternet.baiparser; import android.content.Context; import android.content.ContextWrapper; -import android.graphics.Bitmap; -import android.os.AsyncTask; +import android.media.MediaScannerConnection; +import android.net.Uri; import android.os.Bundle; import android.os.Environment; +import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; -import android.view.View; import android.widget.ProgressBar; import android.widget.Toast; -import com.davemorrissey.labs.subscaleview.ImageSource; import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; -import com.koushikdutta.async.future.FutureCallback; -import com.koushikdutta.ion.Ion; import org.bienvenidoainternet.baiparser.structure.BoardItem; +import org.bienvenidoainternet.baiparser.structure.BoardItemFile; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; +import java.util.ArrayList; -import pl.droidsonroids.gif.GifDrawable; +import layout.FragmentImage; import pl.droidsonroids.gif.GifImageView; -public class ViewerActivity extends AppCompatActivity { - private SubsamplingScaleImageView imageView; - private GifImageView gifView; - private BoardItem bi; - File imagePath; - +public class ViewerActivity extends AppCompatActivity implements FragmentImage.OnFragmentInteractionListener { + private static final String EXTRA_FILELIST = "fileList", EXTRA_RELATIVEPOSITION = "position"; + private ViewPager imagePager; + public ProgressBar barDownload; + private int relativePosition = 0; + public ArrayList fileList = new ArrayList(); + private CustomFragmentPagerAdapter pagerAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (savedInstanceState != null){ - bi = savedInstanceState.getParcelable("boardItem"); - } if (getIntent().getExtras() != null){ - bi = getIntent().getParcelableExtra("boardItem"); + fileList = getIntent().getParcelableArrayListExtra(EXTRA_FILELIST); + relativePosition = getIntent().getIntExtra(EXTRA_RELATIVEPOSITION, 0); } setContentView(R.layout.activity_viewer); - imageView = (SubsamplingScaleImageView)findViewById(R.id.imageView); - gifView = (GifImageView) findViewById(R.id.gifView); - setTitle(bi.getFile()); - downloadFile(); + barDownload = (ProgressBar) findViewById(R.id.downloadProgressBar); + imagePager = (ViewPager) findViewById(R.id.imagePager); + this.pagerAdapter = new CustomFragmentPagerAdapter(getSupportFragmentManager()); + for (int i = 0; i < fileList.size(); i++){ + Log.v("ImageViewer", fileList.get(i).toString()); + pagerAdapter.addFragment(FragmentImage.newInstance(fileList.get(i))); + } + imagePager.setAdapter(pagerAdapter); + imagePager.setCurrentItem(relativePosition); + imagePager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + getSupportActionBar().setSubtitle(fileList.get(position).file); + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); this.getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @@ -61,9 +81,13 @@ public class ViewerActivity extends AppCompatActivity { baiDir.mkdir(); } if (item.getItemId() == R.id.menu_save_img){ - File to = new File(Environment.getExternalStorageDirectory().getPath() + "/Bai/" + bi.getFile()); + BoardItemFile boardItemFile = fileList.get(imagePager.getCurrentItem()); + File to = new File(Environment.getExternalStorageDirectory().getPath() + "/Bai/" + boardItemFile.file); + ContextWrapper cw = new ContextWrapper(getApplicationContext()); + File directory = cw.getDir("src", Context.MODE_PRIVATE); + File fileSource = new File(directory, boardItemFile.boardDir + "_" + boardItemFile.file); try{ - InputStream in = new FileInputStream(imagePath); + InputStream in = new FileInputStream(fileSource); OutputStream out = new FileOutputStream(to); byte[] buf = new byte[1024]; int len; @@ -72,7 +96,8 @@ public class ViewerActivity extends AppCompatActivity { } in.close(); out.close(); - Toast.makeText(getApplicationContext(), bi.getFile() + " guardado.", Toast.LENGTH_LONG).show(); + Toast.makeText(getApplicationContext(), boardItemFile.file + " guardado.", Toast.LENGTH_LONG).show(); + MediaScannerConnection.scanFile(this, new String[]{to.getPath()}, new String[]{"image/jpeg"}, null); }catch (Exception e){ e.printStackTrace(); } @@ -91,135 +116,8 @@ public class ViewerActivity extends AppCompatActivity { return true; } - private void downloadFile(){ - ContextWrapper cw = new ContextWrapper(getApplicationContext()); - File directory = cw.getDir("src", Context.MODE_PRIVATE); - final File filePath = new File(directory, bi.getParentBoard().getBoardDir() + "_" + bi.getFile()); - final ProgressBar downloadBar = (ProgressBar) findViewById(R.id.downloadProgressBar); - if (filePath.exists()){ - downloadBar.setVisibility(View.GONE); - if (bi.getFile().endsWith(".gif")){ - try { - GifDrawable gifFromFile = new GifDrawable(filePath); - gifView.setImageDrawable(gifFromFile); - imageView.setVisibility(View.GONE); - }catch(Exception e){ - e.printStackTrace(); - } - }else{ - imageView.setImage(ImageSource.uri(filePath.toURI().getPath())); - gifView.setVisibility(View.GONE); - } - } - Ion.with(getApplicationContext()) - .load("http://bienvenidoainternet.org/" + bi.getParentBoard().getBoardDir() + "/src/" + bi.getFile()) - .progressBar(downloadBar) - .asInputStream() - .setCallback(new FutureCallback() { - @Override - public void onCompleted(Exception e, InputStream result) { - downloadBar.setVisibility(View.GONE); - if (e != null){ - e.printStackTrace(); - }else{ - FileOutputStream fout; - try { - fout = new FileOutputStream(filePath); - final byte data[] = new byte[1024]; - int count; - while ((count = result.read(data, 0, 1024)) != -1) { - fout.write(data, 0, count); - } - }catch(Exception e1) { - e1.printStackTrace(); - } - if (bi.getFile().endsWith(".gif")){ - try { - GifDrawable gifFromFile = new GifDrawable(filePath); - gifView.setImageDrawable(gifFromFile); - imageView.setVisibility(View.GONE); - }catch(Exception e2){ - e2.printStackTrace(); - } - }else{ - imageView.setImage(ImageSource.uri(filePath.toURI().getPath())); - gifView.setVisibility(View.GONE); - } - } - } - }); - } - - class TaskDownloadFile extends AsyncTask { - - @Override - protected File doInBackground(Void... params) { - Bitmap downloadedBitmap = null; - ContextWrapper cw = new ContextWrapper(getApplicationContext()); - File directory = cw.getDir("src", Context.MODE_PRIVATE); - File mypath = new File(directory, bi.getParentBoard().getBoardDir() + "_" + bi.getFile()); - if (mypath.exists()){ - System.out.println("[Viewer] resource exist!"); - return mypath; - } - try { - String sUrl = "http://bienvenidoainternet.org/" + bi.getParentBoard().getBoardDir() + "/src/" + bi.getFile(); - System.out.println("[Viewer]dwonloading " + sUrl); -// System.out.println(sUrl); - InputStream in = new java.net.URL(sUrl).openStream(); -// downloadedBitmap = BitmapFactory.decodeStream(in); - -// if (downloadedBitmap != null){ - FileOutputStream fout = null; - try { -// in = new BufferedInputStream(new URL(urlString).openStream()); - fout = new FileOutputStream(mypath); - - final byte data[] = new byte[1024]; - int count; - while ((count = in.read(data, 0, 1024)) != -1) { - fout.write(data, 0, count); - } - - - }catch(Exception e){ - e.printStackTrace(); - }finally { - if (in != null) { - in.close(); - } - if (fout != null) { - fout.close(); - } - } -// } - } catch (Exception e) { - e.printStackTrace(); - } - - return mypath; - } - - @Override - protected void onPostExecute(File file) { - super.onPostExecute(file); - imagePath = file; -// iv.setImageBitmap(bitmap); - if (bi.getFile().endsWith(".gif")){ - try { - GifDrawable gifFromFile = new GifDrawable(file); - gifView.setImageDrawable(gifFromFile); - imageView.setVisibility(View.GONE); - }catch(Exception e){ - e.printStackTrace(); - } - }else{ - imageView.setImage(ImageSource.uri(file.toURI().getPath())); - gifView.setVisibility(View.GONE); -// imageView.setImage(ImageSource.resource(R.drawable.bai)); -// System.out.println("not a gif file: " + file.toURI().getPath()); - } + @Override + public void onFragmentInteraction(Uri uri) { - } } } diff --git a/app/src/main/java/org/bienvenidoainternet/baiparser/structure/BoardItemFile.java b/app/src/main/java/org/bienvenidoainternet/baiparser/structure/BoardItemFile.java new file mode 100644 index 0000000..eeff1c4 --- /dev/null +++ b/app/src/main/java/org/bienvenidoainternet/baiparser/structure/BoardItemFile.java @@ -0,0 +1,49 @@ +package org.bienvenidoainternet.baiparser.structure; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Created by Renard on 08-04-2016. + */ +public class BoardItemFile implements Parcelable{ + public String file; + public String fileURL; + public String boardDir; + + public BoardItemFile(String fileURL, String file, String boardDir){ + this.fileURL = fileURL; + this.file = file; + this.boardDir = boardDir; + } + + protected BoardItemFile(Parcel in) { + file = in.readString(); + fileURL = in.readString(); + boardDir = in.readString(); + } + + public static final Creator CREATOR = new Creator() { + @Override + public BoardItemFile createFromParcel(Parcel in) { + return new BoardItemFile(in); + } + + @Override + public BoardItemFile[] newArray(int size) { + return new BoardItemFile[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(file); + dest.writeString(fileURL); + dest.writeString(boardDir); + } +} -- cgit v1.2.1-18-gbd029