Browse Source

Attachments and logo fix.

pull/24/head
Apostolos Fanakis 8 years ago
parent
commit
6112e981f4
  1. 2
      app/src/main/AndroidManifest.xml
  2. 85
      app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicActivity.java
  3. 35
      app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicAdapter.java
  4. 24
      app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicParser.java
  5. 8
      app/src/main/java/gr/thmmy/mthmmy/data/Post.java
  6. 14
      app/src/main/java/gr/thmmy/mthmmy/utils/FontManager.java
  7. BIN
      app/src/main/res/drawable/logo_animated.gif
  8. 7
      app/src/main/res/layout/activity_login.xml
  9. 10
      app/src/main/res/layout/activity_topic.xml

2
app/src/main/AndroidManifest.xml

@ -4,6 +4,8 @@
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"

85
app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicActivity.java

@ -1,19 +1,24 @@
package gr.thmmy.mthmmy.activities.topic;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.util.SparseArray;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.MimeTypeMap;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.TextView;
@ -22,6 +27,9 @@ import android.widget.Toast;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@ -33,9 +41,12 @@ import gr.thmmy.mthmmy.activities.BaseActivity;
import gr.thmmy.mthmmy.activities.LoginActivity;
import gr.thmmy.mthmmy.data.Post;
import mthmmy.utils.Report;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Request;
import okhttp3.Response;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static gr.thmmy.mthmmy.session.SessionManager.LOGGED_IN;
import static gr.thmmy.mthmmy.session.SessionManager.LOGIN_STATUS;
@ -79,12 +90,15 @@ public class TopicActivity extends BaseActivity {
private String parsedTitle;
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
static String PACKAGE_NAME;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_topic);
PACKAGE_NAME = getApplicationContext().getPackageName();
Bundle extras = getIntent().getExtras();
topicTitle = getIntent().getExtras().getString("TOPIC_TITLE");
@ -452,4 +466,75 @@ public class TopicActivity extends BaseActivity {
}
}
//--------------------------------------REPETITIVE UPDATER END--------------------------------------
//------------------------------METHODS FOR DOWNLOADING ATTACHED FILES------------------------------
/**
* Create a File
*/
static void downloadFileAsync(final String downloadUrl, final String fileName, final Context context) {
Request request = new Request.Builder().url(downloadUrl).build();
//final File[] tmpFile = new File[1];
getClient().newCall(request).enqueue(new Callback() {
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
public void onResponse(Call call, Response response) throws IOException {
if (!response.isSuccessful()) {
throw new IOException("Failed to download file: " + response);
}
File tmpFile = getOutputMediaFile(PACKAGE_NAME, fileName);
if (tmpFile == null) {
Report.d(TAG
, "Error creating media file, check storage permissions!");
} else {
FileOutputStream fos = new FileOutputStream(tmpFile);
fos.write(response.body().bytes());
fos.close();
String filePath = tmpFile.getAbsolutePath();
String extension = MimeTypeMap.getFileExtensionFromUrl(
filePath.substring(filePath.lastIndexOf("/")));
String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(tmpFile), mime);
intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
});
}
/**
* Create a File
*/
private static File getOutputMediaFile(String packageName, String fileName) {
// To be safe, you should check that the SDCard is mounted
// using Environment.getExternalStorageState() before doing this.
File mediaStorageDir = new File(Environment.getExternalStorageDirectory()
+ "/Android/data/"
+ PACKAGE_NAME //TODO
+ "/Downloads");
// This location works best if you want the created files to be shared
// between applications and persist after your app has been uninstalled.
// Create the storage directory if it does not exist
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d(TAG, "problem!");
return null;
}
}
// Create a media file name
File mediaFile;
mediaFile = new File(mediaStorageDir.getPath() + File.separator + fileName);
return mediaFile;
}
//----------------------------METHODS FOR DOWNLOADING ATTACHED FILES END----------------------------
}

35
app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicAdapter.java

@ -5,15 +5,14 @@ import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.Build;
import android.os.Handler;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.text.Html;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
@ -37,15 +36,14 @@ import java.util.Objects;
import gr.thmmy.mthmmy.R;
import gr.thmmy.mthmmy.data.Post;
import gr.thmmy.mthmmy.utils.CircleTransform;
import gr.thmmy.mthmmy.utils.FontManager;
import mthmmy.utils.Report;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static gr.thmmy.mthmmy.activities.topic.TopicActivity.NO_POST_FOCUS;
import static gr.thmmy.mthmmy.activities.topic.TopicActivity.base_url;
import static gr.thmmy.mthmmy.activities.topic.TopicActivity.downloadFileAsync;
import static gr.thmmy.mthmmy.activities.topic.TopicActivity.postFocus;
import static gr.thmmy.mthmmy.activities.topic.TopicActivity.toQuoteList;
import static gr.thmmy.mthmmy.utils.FontManager.FONTAWESOME;
class TopicAdapter extends RecyclerView.Adapter<TopicAdapter.MyViewHolder> {
private static final String TAG = "TopicAdapter";
@ -54,7 +52,7 @@ class TopicAdapter extends RecyclerView.Adapter<TopicAdapter.MyViewHolder> {
private final Context context;
private final List<Post> postsList;
private boolean foundPostFocus = false;
private ArrayList<boolean[]> viewProperties = new ArrayList<>();
private final ArrayList<boolean[]> viewProperties = new ArrayList<>();
private static final int isPostDateAndNumberVisibile = 0;
private static final int isUserExtraInfoVisibile = 1;
private static final int isQuoteButtonChecked = 2;
@ -195,13 +193,29 @@ class TopicAdapter extends RecyclerView.Adapter<TopicAdapter.MyViewHolder> {
if (currentPost.getAttachedFiles().size() != 0) {
holder.bodyFooterDivider.setVisibility(View.VISIBLE);
for (String attachedFile : currentPost.getAttachedFiles()) {
TextView attached = new TextView(context);
String faFile = context.getResources().getString(R.string.fa_file);
int filesTextColor = context.getResources().getColor(R.color.accent);
for (final String[] attachedFile : currentPost.getAttachedFiles()) {
final TextView attached = new TextView(context);
attached.setTextSize(10f);
attached.setClickable(true);
attached.setMovementMethod(LinkMovementMethod.getInstance());
attached.setTypeface(Typeface.createFromAsset(context.getAssets()
, "fonts/fontawesome-webfont.ttf"));
attached.setText(faFile + " " + attachedFile[1] + attachedFile[2]);
attached.setTextColor(filesTextColor);
attached.setPadding(0, 3, 0, 3);
attached.setText(Html.fromHtml(attachedFile));
attached.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
downloadFileAsync(attachedFile[0], attachedFile[1], context);
} catch (Exception e) {
e.printStackTrace();
}
}
});
holder.postFooter.addView(attached);
}
@ -243,7 +257,8 @@ class TopicAdapter extends RecyclerView.Adapter<TopicAdapter.MyViewHolder> {
holder.personalText.setVisibility(View.GONE);
if (c_numberOfStars != 0) {
holder.stars.setTypeface(FontManager.getTypeface(context, FONTAWESOME));
holder.stars.setTypeface(Typeface.createFromAsset(context.getAssets()
, "fonts/fontawesome-webfont.ttf"));
String aStar = context.getResources().getString(R.string.fa_icon_star);
String usersStars = "";

24
app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicParser.java

@ -1,7 +1,6 @@
package gr.thmmy.mthmmy.activities.topic;
import android.graphics.Color;
import android.util.Log;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
@ -92,7 +91,7 @@ class TopicParser {
p_specialRank, p_gender, p_personalText, p_numberOfPosts;
int p_postNum, p_postIndex, p_numberOfStars, p_userColor;
boolean p_isDeleted = false;
ArrayList<String> p_attachedFiles;
ArrayList<String[]> p_attachedFiles;
//Initialize variables
p_rank = "Rank";
@ -185,17 +184,24 @@ class TopicParser {
//Find attached file's urls, names and info, if present
Elements postAttachments = item.select("div:containsOwn(downloaded)");
if (postAttachments != null) {
for (Element attached : postAttachments) {
Elements attachedFiles = postAttachments.select("a");
String postAttachmentsText = postAttachments.text();
for(int i = 0; i<attachedFiles.size(); ++i){
String[] attachedArray = new String[3];
//Get file's url and filename
Element tmpAttachedFileUrlAndName = attached.select("a").first();
tmpAttachedFileUrlAndName.select("img").remove().first();
Element tmpAttachedFileUrlAndName = attachedFiles.get(i);
attachedArray[0] = tmpAttachedFileUrlAndName.attr("href");
attachedArray[1] = tmpAttachedFileUrlAndName.text().substring(1);
//Get file's info (size and download count)
String tmpAttachedFileInfo = attached.text().trim();
tmpAttachedFileInfo = tmpAttachedFileInfo.substring(
tmpAttachedFileInfo.indexOf("("));
String postAttachmentsTextSbstr = postAttachmentsText.substring(
postAttachmentsText.indexOf(attachedArray[1]));
attachedArray[2] = postAttachmentsTextSbstr.substring(attachedArray[1].length()
, postAttachmentsTextSbstr.indexOf("times.)"));
p_attachedFiles.add(tmpAttachedFileUrlAndName + " " + tmpAttachedFileInfo);
p_attachedFiles.add(attachedArray);
}
}

8
app/src/main/java/gr/thmmy/mthmmy/data/Post.java

@ -21,13 +21,13 @@ public class Post {
private final String personalText;
private final int numberOfStars;
private final int userColor;
private final ArrayList<String> attachedFiles;
private final ArrayList<String[]> attachedFiles;
public Post(String thumbnailUrl, String author, String subject, String content
, int postIndex, int postNumber, String postDate, String rank
, String special_rank, String gender, String numberOfPosts
, String personalText, int numberOfStars, int userColor
, ArrayList<String> attachedFiles) {
, ArrayList<String[]> attachedFiles) {
this.thumbnailUrl = thumbnailUrl;
this.author = author;
this.subject = subject;
@ -48,7 +48,7 @@ public class Post {
public Post(String thumbnailUrl, String author, String subject, String content
, int postIndex, int postNumber, String postDate, int userColor
, ArrayList<String> attachedFiles) {
, ArrayList<String[]> attachedFiles) {
this.thumbnailUrl = thumbnailUrl;
this.author = author;
this.subject = subject;
@ -128,7 +128,7 @@ public class Post {
return userColor;
}
public ArrayList<String> getAttachedFiles() {
public ArrayList<String[]> getAttachedFiles() {
return attachedFiles;
}
}

14
app/src/main/java/gr/thmmy/mthmmy/utils/FontManager.java

@ -1,14 +0,0 @@
package gr.thmmy.mthmmy.utils;
import android.content.Context;
import android.graphics.Typeface;
public class FontManager {
public static final String ROOT = "fonts/",
FONTAWESOME = ROOT + "fontawesome-webfont.ttf";
public static Typeface getTypeface(Context context, String font) {
return Typeface.createFromAsset(context.getAssets(), font);
}
}

BIN
app/src/main/res/drawable/logo_animated.gif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 514 KiB

After

Width:  |  Height:  |  Size: 561 KiB

7
app/src/main/res/layout/activity_login.xml

@ -3,8 +3,8 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fitsSystemWindows="true"
android:background="@color/background">
android:background="@color/background"
android:fitsSystemWindows="true">
<ScrollView
android:id="@+id/inner_scroll_view"
@ -25,11 +25,12 @@
android:layout_height="100dp"/>
<pl.droidsonroids.gif.GifImageView
android:id="@+id/logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:contentDescription="@string/thmmy_img_description"
android:src="@drawable/logo_animated"
android:id="@+id/logo"
/>
<Space

10
app/src/main/res/layout/activity_topic.xml

@ -39,7 +39,7 @@
tools:context="gr.thmmy.mthmmy.activities.topic.TopicActivity">
</android.support.v7.widget.RecyclerView>
<LinearLayout
<android.support.v7.widget.FitWindowsLinearLayout
android:id="@+id/bottom_navigation_bar"
android:layout_width="match_parent"
android:layout_height="50dp"
@ -91,16 +91,18 @@
android:layout_weight="0.8"
android:contentDescription="@string/text_last"
app:srcCompat="@drawable/page_last"/>
</LinearLayout>
</android.support.v7.widget.FitWindowsLinearLayout>
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_gravity="center"
android:background="@drawable/progress_bar_bg"
android:indeterminate="true"
android:theme="@style/AppTheme"
android:visibility="invisible"/>
<android.support.design.widget.FloatingActionButton

Loading…
Cancel
Save