aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
authorLibravatar Renard1911 2016-04-11 17:52:55 -0300
committerLibravatar Renard1911 2016-04-11 17:52:55 -0300
commitc94f0e1d27f0a92a17b2e65363bdce6461249d95 (patch)
tree6990d471d884ad87a2be9234e40fd2a91f6bb827 /app/src/main/java
parent0f3adf23154e6d7e0eaced70a31676d71bef8e34 (diff)
parent90ee611af8ba4c38e70f27eb0df55e9134ad625c (diff)
downloadBaiApp-c94f0e1d27f0a92a17b2e65363bdce6461249d95.tar.gz
BaiApp-c94f0e1d27f0a92a17b2e65363bdce6461249d95.tar.xz
BaiApp-c94f0e1d27f0a92a17b2e65363bdce6461249d95.zip
Merge pull request #1 from Renard1911/devv1.6.0
Dev
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/layout/FragmentBoardItemList.java (renamed from app/src/main/java/layout/fragmentThreadList.java)20
-rw-r--r--app/src/main/java/layout/FragmentImage.java211
-rw-r--r--app/src/main/java/org/bienvenidoainternet/baiparser/LicensesActivity.java5
-rw-r--r--app/src/main/java/org/bienvenidoainternet/baiparser/MainActivity.java72
-rw-r--r--app/src/main/java/org/bienvenidoainternet/baiparser/ResponseActivity.java6
-rw-r--r--app/src/main/java/org/bienvenidoainternet/baiparser/SettingsActivity.java2
-rw-r--r--app/src/main/java/org/bienvenidoainternet/baiparser/ThemeManager.java92
-rw-r--r--app/src/main/java/org/bienvenidoainternet/baiparser/ThreadListAdapter.java40
-rw-r--r--app/src/main/java/org/bienvenidoainternet/baiparser/ViewerActivity.java208
-rw-r--r--app/src/main/java/org/bienvenidoainternet/baiparser/structure/BoardItemFile.java49
10 files changed, 467 insertions, 238 deletions
diff --git a/app/src/main/java/layout/fragmentThreadList.java b/app/src/main/java/layout/FragmentBoardItemList.java
index c06fd93..149def3 100644
--- a/app/src/main/java/layout/fragmentThreadList.java
+++ b/app/src/main/java/layout/FragmentBoardItemList.java
@@ -38,6 +38,7 @@ import org.bienvenidoainternet.baiparser.MainActivity;
import org.bienvenidoainternet.baiparser.R;
import org.bienvenidoainternet.baiparser.RecentPostAdapter;
import org.bienvenidoainternet.baiparser.ResponseActivity;
+import org.bienvenidoainternet.baiparser.ThemeManager;
import org.bienvenidoainternet.baiparser.ThreadListAdapter;
import org.bienvenidoainternet.baiparser.structure.Board;
import org.bienvenidoainternet.baiparser.structure.BoardItem;
@@ -55,7 +56,7 @@ import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
-public class fragmentThreadList extends Fragment {
+public class FragmentBoardItemList extends Fragment {
public static final String ARG_CURRENTBOARD = "currentBoard", ARG_THREAD_ID = "currentThreadId", ARG_MAIN_FRAGMENT = "imMainFragment",
SAVED_BOARDITEMS = "savedBoardItems", RECENT_POST_MODE = "recentpostmode", ARG_CURRENT_THREAD = "currentThread";
List<ReplyID> idList = new ArrayList<>();
@@ -80,13 +81,15 @@ public class fragmentThreadList extends Fragment {
LinearLayout layoutThreadProcess;
TextView txtThreadProcess;
- public fragmentThreadList() {
+ ThemeManager tm;
+
+ public FragmentBoardItemList() {
// Required empty public constructor
}
- public static fragmentThreadList newInstance(boolean mainFragment, Board board, BoardItem thread){
- fragmentThreadList fragment = new fragmentThreadList();
+ public static FragmentBoardItemList newInstance(boolean mainFragment, Board board, BoardItem thread){
+ FragmentBoardItemList fragment = new FragmentBoardItemList();
Bundle args = new Bundle();
args.putParcelable(ARG_CURRENTBOARD, board);
args.putParcelable(ARG_CURRENT_THREAD, thread);
@@ -104,6 +107,7 @@ public class fragmentThreadList extends Fragment {
this.currentThread = getArguments().getParcelable(ARG_CURRENT_THREAD);
this.imMainFragment = getArguments().getBoolean(ARG_MAIN_FRAGMENT);
}
+ tm = new ThemeManager(getActivity());
}
@Override
@@ -130,7 +134,7 @@ public class fragmentThreadList extends Fragment {
// Aplicación del Tema
settings = PreferenceManager.getDefaultSharedPreferences(this.getContext());
- int themeResId = ((MainActivity)getActivity()).getCurrentThemeId();
+ int themeResId = tm.getCurrentThemeId();
Context context = new ContextThemeWrapper(getActivity(), themeResId);
LayoutInflater localInflater = inflater.cloneInContext(context);
View v = localInflater.inflate(R.layout.fragment_fragment_thread_list, container, false);
@@ -145,14 +149,14 @@ public class fragmentThreadList extends Fragment {
this.loadingBar = (ProgressBar)rootView.findViewById(R.id.progressBar);
// Agregamos color al divider del listview
- ColorDrawable cd = new ColorDrawable((((MainActivity) getActivity()).themeManager).getMarginColor());
+ ColorDrawable cd = new ColorDrawable(tm.getMarginColor());
listViewBoardItems.setDivider(cd);
listViewBoardItems.setDividerHeight(1);
// registramos los menus del listview
registerForContextMenu(listViewBoardItems);
// Creamos los dos adaptadores y los seteamos dependiendo del modo del fragmento
- listViewAdapter = new ThreadListAdapter(v.getContext(), boardItems, (((MainActivity) getActivity()).themeManager));
+ listViewAdapter = new ThreadListAdapter(v.getContext(), boardItems, tm);
recentPostAdapter = new RecentPostAdapter(v.getContext(), boardItems);
if (recentPostMode){
listViewBoardItems.setAdapter(recentPostAdapter);
@@ -517,6 +521,7 @@ public class fragmentThreadList extends Fragment {
}
}
listViewAdapter.notifyDataSetChanged();
+ listViewAdapter.updateBoardItems(boardItems);
loadingMoreThreads = false;
if (boardItems.isEmpty()){
mListener.updateToolbar(currentBoard, currentThread);
@@ -610,6 +615,7 @@ public class fragmentThreadList extends Fragment {
}
}
listViewAdapter.notifyDataSetChanged();
+ listViewAdapter.updateBoardItems(boardItems);
if (settings.getBoolean("setting_scrollatnewthread", true)){
listViewBoardItems.setSelection(boardItems.size());
mListener.showActionButton();
diff --git a/app/src/main/java/layout/FragmentImage.java b/app/src/main/java/layout/FragmentImage.java
new file mode 100644
index 0000000..f337e5f
--- /dev/null
+++ b/app/src/main/java/layout/FragmentImage.java
@@ -0,0 +1,211 @@
+package layout;
+
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.ProgressBar;
+import android.widget.RelativeLayout;
+
+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.R;
+import org.bienvenidoainternet.baiparser.ViewerActivity;
+import org.bienvenidoainternet.baiparser.structure.BoardItemFile;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+
+import pl.droidsonroids.gif.GifDrawable;
+import pl.droidsonroids.gif.GifImageView;
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Activities that contain this fragment must implement the
+ * {@link FragmentImage.OnFragmentInteractionListener} interface
+ * to handle interaction events.
+ * Use the {@link FragmentImage#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class FragmentImage extends Fragment {
+ private static final String ARG_BOARD_ITEM = "param1";
+
+ public BoardItemFile boardItemFile;
+
+ private OnFragmentInteractionListener mListener;
+ private SubsamplingScaleImageView imageView;
+ private GifImageView gifView;
+ private static final String ARG_FILE_URL = "fileURL";
+ private ProgressBar downloadBar;
+
+ public FragmentImage() {
+ // Required empty public constructor
+ }
+
+ public static FragmentImage newInstance(BoardItemFile boardItemFile) {
+ FragmentImage fragment = new FragmentImage();
+ Bundle args = new Bundle();
+ args.putParcelable(ARG_BOARD_ITEM, boardItemFile);
+// args.putString(ARG_FILE_URL, file);
+ fragment.setArguments(args);
+ Log.v("FragmentImage", fragment.toString() + " new Fragment");
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+// currentThread = getArguments().getParcelable(ARG_BOARD_ITEM);
+ boardItemFile = getArguments().getParcelable(ARG_BOARD_ITEM);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ View view = inflater.inflate(R.layout.fragment_fragment_image, container, false);
+ imageView = (SubsamplingScaleImageView) view.findViewById(R.id.imageView);
+ gifView = (GifImageView) view.findViewById(R.id.gifView);
+ imageView.setVisibility(View.GONE);
+ gifView.setVisibility(View.GONE);
+ RelativeLayout layoutOpenBrowser = (RelativeLayout) view.findViewById(R.id.layoutOpenBrowser);
+ if (boardItemFile.file != null) {
+ if (!boardItemFile.file.endsWith(".webm") && !boardItemFile.file.endsWith(".swf")) {
+ layoutOpenBrowser.setVisibility(View.GONE);
+ downloadFile();
+ }else{
+ layoutOpenBrowser.setVisibility(View.VISIBLE);
+ }
+ }
+ Button btnOpenBrowser = (Button) view.findViewById(R.id.btnLaunchBrowser);
+ btnOpenBrowser.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(boardItemFile.fileURL));
+ in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ v.getContext().startActivity(in);
+ }
+ });
+ return view;
+ }
+
+ // TODO: Rename method, update argument and hook method into UI event
+ public void onButtonPressed(Uri uri) {
+ if (mListener != null) {
+ mListener.onFragmentInteraction(uri);
+ }
+ }
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ if (context instanceof OnFragmentInteractionListener) {
+ mListener = (OnFragmentInteractionListener) context;
+ } else {
+ throw new RuntimeException(context.toString()
+ + " must implement OnFragmentInteractionListener");
+ }
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ mListener = null;
+ }
+
+ public void setDownloadBar(ProgressBar downloadBar) {
+ this.downloadBar = downloadBar;
+ }
+
+ /**
+ * This interface must be implemented by activities that contain this
+ * fragment to allow an interaction in this fragment to be communicated
+ * to the activity and potentially other fragments contained in that
+ * activity.
+ * <p/>
+ * See the Android Training lesson <a href=
+ * "http://developer.android.com/training/basics/fragments/communicating.html"
+ * >Communicating with Other Fragments</a> for more information.
+ */
+ public interface OnFragmentInteractionListener {
+ // TODO: Update argument type and name
+ void onFragmentInteraction(Uri uri);
+ }
+
+ private void downloadFile() {
+ downloadBar = ((ViewerActivity)getActivity()).barDownload;
+ downloadBar.setVisibility(View.VISIBLE);
+ ContextWrapper cw = new ContextWrapper(getContext());
+ File directory = cw.getDir("src", Context.MODE_PRIVATE);
+ final File filePath = new File(directory, boardItemFile.boardDir + "_" + boardItemFile.file);
+ if (filePath.exists()) {
+ downloadBar.setVisibility(View.GONE);
+ if (boardItemFile.file.endsWith(".gif")) {
+ try {
+ GifDrawable gifFromFile = new GifDrawable(filePath);
+ gifView.setImageDrawable(gifFromFile);
+ gifView.setVisibility(View.VISIBLE);
+ imageView.setVisibility(View.GONE);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } else {
+ imageView.setImage(ImageSource.uri(filePath.toURI().getPath()));
+ imageView.setVisibility(View.VISIBLE);
+ gifView.setVisibility(View.GONE);
+ }
+ }
+ Ion.with(getContext())
+ .load(boardItemFile.fileURL)
+ .progressBar(downloadBar)
+ .asInputStream()
+ .setCallback(new FutureCallback<InputStream>() {
+ @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 (boardItemFile.file.endsWith(".gif")) {
+ try {
+ GifDrawable gifFromFile = new GifDrawable(filePath);
+ gifView.setImageDrawable(gifFromFile);
+ gifView.setVisibility(View.VISIBLE);
+ imageView.setVisibility(View.GONE);
+ } catch (Exception e2) {
+ e2.printStackTrace();
+ }
+ } else {
+ imageView.setImage(ImageSource.uri(filePath.toURI().getPath()));
+ gifView.setVisibility(View.GONE);
+ imageView.setVisibility(View.VISIBLE);
+ }
+ }
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/org/bienvenidoainternet/baiparser/LicensesActivity.java b/app/src/main/java/org/bienvenidoainternet/baiparser/LicensesActivity.java
index b91ce2b..575754a 100644
--- a/app/src/main/java/org/bienvenidoainternet/baiparser/LicensesActivity.java
+++ b/app/src/main/java/org/bienvenidoainternet/baiparser/LicensesActivity.java
@@ -1,7 +1,7 @@
package org.bienvenidoainternet.baiparser;
-import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
import android.webkit.WebView;
public class LicensesActivity extends AppCompatActivity {
@@ -9,7 +9,10 @@ public class LicensesActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ ThemeManager tm = new ThemeManager(this);
+ this.setTheme(tm.getThemeForActivity());
setContentView(R.layout.activity_licenses);
+ getSupportActionBar().setTitle("Acerca de BaI App");
WebView webView = (WebView) findViewById(R.id.webView);
webView.loadUrl("file:///android_asset/html/licenses.html");
}
diff --git a/app/src/main/java/org/bienvenidoainternet/baiparser/MainActivity.java b/app/src/main/java/org/bienvenidoainternet/baiparser/MainActivity.java
index 65b51e2..18d2e08 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;
@@ -33,27 +31,25 @@ import com.koushikdutta.ion.Ion;
import org.bienvenidoainternet.baiparser.structure.Board;
import org.bienvenidoainternet.baiparser.structure.BoardItem;
+import org.json.JSONArray;
import org.json.JSONException;
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<Board> boardList = new ArrayList<>();
@@ -83,46 +79,25 @@ public class MainActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ ThemeManager tm = new ThemeManager(this);
+ this.setTheme(tm.getThemeForMainActivity());
if (savedInstanceState != null) {
currentThemeId = savedInstanceState.getInt("currentThemeId");
boardList = savedInstanceState.getParcelableArrayList("boardList");
}
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
- themeId = Integer.valueOf(settings.getString("pref_theme", "1"));
-
if (settings.getString("pref_password", "").isEmpty()){
SharedPreferences.Editor edit = settings.edit();
edit.putString("pref_password", makePassword());
edit.commit();
}
- switch (themeId) {
- case 1:
- currentThemeId = R.style.AppTheme_NoActionBar;
- break;
- case 2:
- currentThemeId = R.style.AppTheme_Dark;
- break;
- case 3:
- currentThemeId = R.style.AppTheme_HeadLine;
- setTheme(R.style.AppTheme_HeadLine_Activity);
- break;
- case 4:
- currentThemeId = R.style.AppTheme_Black;
- setTheme(R.style.AppTheme_Black_Activity);
- break;
- }
-
- themeManager = new ThemeManager(this);
- Log.d("ThemeManager", "isDarkTheme: " + themeManager.isDarkTheme());
-
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("Bievenido a internet");
this.setSupportActionBar(toolbar);
-
fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
@@ -155,20 +130,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() {
@@ -380,25 +352,25 @@ public class MainActivity extends AppCompatActivity
final SubMenu sub = menu.addSubMenu("Lista de Boards");
Ion.with(getApplicationContext())
.load("http://bienvenidoainternet.org/cgi/api/boards")
- .asJsonObject()
- .setCallback(new FutureCallback<JsonObject>() {
+ .asString()
+ .setCallback(new FutureCallback<String>() {
@Override
- public void onCompleted(Exception e, JsonObject result) {
+ public void onCompleted(Exception e, String result) {
if (e != null) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
- } else {
- JsonArray boards = result.get("boards").getAsJsonArray();
- for (int i = 0; i < boards.size(); i++) {
- try {
- JSONObject board = new JSONObject(boards.get(i).toString());
+ }else {
+ try {
+ JSONArray boards = new JSONObject(result).getJSONArray("boards");
+ for (int i = 0; i < boards.length(); i++) {
+ JSONObject board = boards.getJSONObject(i);
Board parsedBoard = new Board(board.getString("name"), board.getString("dir"), board.getInt("board_type"));
sub.add(parsedBoard.getBoardName());
boardList.add(parsedBoard);
- } catch (JSONException e1) {
- e1.printStackTrace();
- Toast.makeText(getApplicationContext(), "Error parsing JSON", Toast.LENGTH_LONG).show();
}
+ }catch (JSONException e1) {
+ Toast.makeText(getApplicationContext(), e1.getMessage(), Toast.LENGTH_LONG).show();
+ e1.printStackTrace();
}
}
}
diff --git a/app/src/main/java/org/bienvenidoainternet/baiparser/ResponseActivity.java b/app/src/main/java/org/bienvenidoainternet/baiparser/ResponseActivity.java
index e96868a..350de99 100644
--- a/app/src/main/java/org/bienvenidoainternet/baiparser/ResponseActivity.java
+++ b/app/src/main/java/org/bienvenidoainternet/baiparser/ResponseActivity.java
@@ -2,12 +2,10 @@ package org.bienvenidoainternet.baiparser;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
@@ -45,10 +43,12 @@ public class ResponseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ ThemeManager tm = new ThemeManager(this);
+ this.setTheme(tm.getThemeForActivity());
setContentView(R.layout.activity_response);
+ getSupportActionBar().setTitle("Respondiendo");
settings = PreferenceManager.getDefaultSharedPreferences(this);
password = settings.getString("pref_password", "12345678");
- Log.v("password", password);
if (savedInstanceState != null){
this.theReply = savedInstanceState.getParcelable("theReply");
diff --git a/app/src/main/java/org/bienvenidoainternet/baiparser/SettingsActivity.java b/app/src/main/java/org/bienvenidoainternet/baiparser/SettingsActivity.java
index e8e7df4..eefc5fb 100644
--- a/app/src/main/java/org/bienvenidoainternet/baiparser/SettingsActivity.java
+++ b/app/src/main/java/org/bienvenidoainternet/baiparser/SettingsActivity.java
@@ -95,6 +95,8 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ ThemeManager tm = new ThemeManager(this);
+ this.setTheme(tm.getThemeForActivity());
setupActionBar();
getFragmentManager().beginTransaction().replace(android.R.id.content, new GeneralPreferenceFragment()).commit();
}
diff --git a/app/src/main/java/org/bienvenidoainternet/baiparser/ThemeManager.java b/app/src/main/java/org/bienvenidoainternet/baiparser/ThemeManager.java
index 7f0be86..28c0d74 100644
--- a/app/src/main/java/org/bienvenidoainternet/baiparser/ThemeManager.java
+++ b/app/src/main/java/org/bienvenidoainternet/baiparser/ThemeManager.java
@@ -1,26 +1,54 @@
package org.bienvenidoainternet.baiparser;
+import android.app.Activity;
+import android.content.SharedPreferences;
import android.content.res.TypedArray;
import android.graphics.Color;
+import android.preference.PreferenceManager;
+import android.util.Log;
/**
* Created by Renard on 16-03-2016.
*/
public class ThemeManager {
- private MainActivity ac;
private int currentThemeId;
- public ThemeManager(MainActivity ac){
- this.ac = ac;
- this.currentThemeId = ac.getCurrentThemeId();
+ private int prefThemeId;
+ private Activity activity;
+ public ThemeManager(Activity activity){
+ this.activity = activity;
+ setCurrentThemeId();
+ }
+
+ public void setCurrentThemeId(){
+ SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity);
+ int themeId = Integer.valueOf(settings.getString("pref_theme", "1"));
+ prefThemeId = themeId;
+ switch (themeId) {
+ case 1:
+ currentThemeId = R.style.AppTheme_NoActionBar;
+ break;
+ case 2:
+ currentThemeId = R.style.AppTheme_Dark;
+ break;
+ case 3:
+ currentThemeId = R.style.AppTheme_HeadLine;
+// setTheme(R.style.AppTheme_HeadLine_Activity);
+ break;
+ case 4:
+ currentThemeId = R.style.AppTheme_Black;
+// setTheme(R.style.AppTheme_Black_Activity);
+ break;
+ }
+ Log.d("ThemeManager", "isDarkTheme: " + isDarkTheme());
}
public int getSageColor(){
- TypedArray a = ac.getTheme().obtainStyledAttributes(currentThemeId, new int[]{R.attr.sageColor});
+ TypedArray a = activity.getTheme().obtainStyledAttributes(currentThemeId, new int[]{R.attr.sageColor});
return a.getColor(0, Color.CYAN);
}
public int getMarginColor(){
- TypedArray a = ac.getTheme().obtainStyledAttributes(currentThemeId, new int[]{R.attr.marginColor});
+ TypedArray a = activity.getTheme().obtainStyledAttributes(currentThemeId, new int[]{R.attr.marginColor});
return a.getColor(0, Color.CYAN);
}
@@ -29,27 +57,69 @@ public class ThemeManager {
}
public int getNameColor() {
- TypedArray a = ac.getTheme().obtainStyledAttributes(currentThemeId, new int[]{R.attr.nameColor});
+ TypedArray a = activity.getTheme().obtainStyledAttributes(currentThemeId, new int[]{R.attr.nameColor});
return a.getColor(0, Color.CYAN);
}
public int getTripcodeColor() {
- TypedArray a = ac.getTheme().obtainStyledAttributes(currentThemeId, new int[]{R.attr.tripcodeColor});
+ TypedArray a = activity.getTheme().obtainStyledAttributes(currentThemeId, new int[]{R.attr.tripcodeColor});
return a.getColor(0, Color.CYAN);
}
public int getPrimaryColor(){
- TypedArray a = ac.getTheme().obtainStyledAttributes(currentThemeId, new int[]{R.attr.colorPrimary});
+ TypedArray a = activity.getTheme().obtainStyledAttributes(currentThemeId, new int[]{R.attr.colorPrimary});
return a.getColor(0, Color.CYAN);
}
public int getPrimaryDarkColor(){
- TypedArray a = ac.getTheme().obtainStyledAttributes(currentThemeId, new int[]{R.attr.colorPrimaryDark});
+ TypedArray a = activity.getTheme().obtainStyledAttributes(currentThemeId, new int[]{R.attr.colorPrimaryDark});
return a.getColor(0, Color.CYAN);
}
public boolean isDarkTheme(){
- TypedArray a = ac.getTheme().obtainStyledAttributes(currentThemeId, new int[]{R.attr.isDarkTheme});
+ TypedArray a = activity.getTheme().obtainStyledAttributes(currentThemeId, new int[]{R.attr.isDarkTheme});
return a.getBoolean(0, false);
}
+ public int getThemeForActivity(){
+ int id = R.style.AppTheme;
+ switch (prefThemeId) {
+ case 1: // pseudoch
+ id = R.style.AppTheme;
+ break;
+ case 2: // nightmode
+ id = R.style.AppTheme;
+ break;
+ case 3: // photon
+ id = R.style.AppTheme_HeadLineActionBar;
+ break;
+ case 4: // tomorrow
+ id = R.style.AppTheme_BlackActionBar;
+ break;
+ }
+ return id;
+ }
+
+ public int getThemeForMainActivity(){
+ int id = R.style.AppTheme_NoActionBar;
+ switch (prefThemeId) {
+ case 1: // pseudoch
+ id = R.style.AppTheme_NoActionBar;
+ break;
+ case 2: // nightmode
+ id = R.style.AppTheme_NoActionBar;
+ break;
+ case 3: // photon
+ id = R.style.AppTheme_HeadLineActionBar_NoActionBar;
+ break;
+ case 4: // tomorrow
+ id = R.style.AppTheme_BlackActionBar_NoActionBar;
+ break;
+ }
+ return id;
+ }
+
+
+ public int getCurrentThemeId() {
+ return currentThemeId;
+ }
}
diff --git a/app/src/main/java/org/bienvenidoainternet/baiparser/ThreadListAdapter.java b/app/src/main/java/org/bienvenidoainternet/baiparser/ThreadListAdapter.java
index 118e9c6..7a85c1f 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<BoardItem>{
private ThemeManager tm;
Typeface monaFont;
public boolean listThreads = false;
+ private ArrayList<BoardItem> boardItems = new ArrayList<BoardItem>();
+ private static final String EXTRA_FILELIST = "fileList";
public ThreadListAdapter(Context context, List<BoardItem> objects, ThemeManager tm) {
super(context, 0, objects);
@@ -55,6 +53,10 @@ public class ThreadListAdapter extends ArrayAdapter<BoardItem>{
monaFont = Typeface.createFromAsset(context.getAssets(), "fonts/mona.ttf");
}
+ public void updateBoardItems(ArrayList<BoardItem> boardItems){
+ this.boardItems = boardItems;
+ }
+
private String intToHexString(int i){
return String.format("#%06X", (0xFFFFFF & i));
}
@@ -73,7 +75,7 @@ public class ThreadListAdapter extends ArrayAdapter<BoardItem>{
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<BoardItem>{
}else {
Intent in = new Intent(convertView.getContext(), ViewerActivity.class);
Bundle b = new Bundle();
- b.putParcelable("boardItem", boardItem);
+ ArrayList<BoardItemFile> fileList = new ArrayList<BoardItemFile>();
+ 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);
}
@@ -215,12 +228,21 @@ public class ThreadListAdapter extends ArrayAdapter<BoardItem>{
txtReplies.setVisibility(boardItem.isReply ? View.GONE : View.VISIBLE);
txtReplies.setText(boardItem.getTotalReplies() + " respuestas " + (boardItem.getTotalFiles() == 0 ? "" : ", " + boardItem.getTotalFiles() + " archivos"));
+ String fileExt = "";
+ if (!boardItem.getFile().isEmpty()){
+ String[] pathSplit = boardItem.getFile().split("\\.");
+ if (pathSplit.length != 0){
+ fileExt = pathSplit[1].toUpperCase();
+ }
+ }
txtFileInfo.setVisibility(boardItem.getThumb().isEmpty() ? View.GONE : View.VISIBLE);
- txtFileInfo.setText((boardItem.getFileSize() / 1024) + " KB " + boardItem.getThumbHeight() + "x" + boardItem.getThumbWidth());
+ txtFileInfo.setText(fileExt + " " + (boardItem.getFileSize() / 1024) + " KB " + boardItem.getThumbHeight() + "x" + boardItem.getThumbWidth());
// Trasnparentar items con sage
if (convertView != null){
- convertView.setAlpha(boardItem.isSage() ? 0.75F : 1.0F);
+ if (settings.getBoolean("pref_transparent_sage", true)){
+ convertView.setAlpha(boardItem.isSage() ? 0.75F : 1.0F);
+ }
}
/*
diff --git a/app/src/main/java/org/bienvenidoainternet/baiparser/ViewerActivity.java b/app/src/main/java/org/bienvenidoainternet/baiparser/ViewerActivity.java
index 4501c0f..8dc1262 100644
--- a/app/src/main/java/org/bienvenidoainternet/baiparser/ViewerActivity.java
+++ b/app/src/main/java/org/bienvenidoainternet/baiparser/ViewerActivity.java
@@ -2,55 +2,71 @@ 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 pl.droidsonroids.gif.GifImageView;
-
-public class ViewerActivity extends AppCompatActivity {
- private SubsamplingScaleImageView imageView;
- private GifImageView gifView;
- private BoardItem bi;
- File imagePath;
+import layout.FragmentImage;
+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<BoardItemFile> fileList = new ArrayList<BoardItemFile>();
+ 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.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ getSupportActionBar().setSubtitle("(" + (position + 1) + " / " + fileList.size() + ") " + fileList.get(position).file);
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+
+ }
+ });
+ imagePager.setCurrentItem(relativePosition);
this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@@ -61,9 +77,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 +92,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 +112,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<InputStream>() {
- @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<Void, Void, File> {
-
- @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<BoardItemFile> CREATOR = new Creator<BoardItemFile>() {
+ @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);
+ }
+}