Skip to content

Commit

Permalink
Merge pull request #11 from kaelaela/develop
Browse files Browse the repository at this point in the history
Version 1.2.0
  • Loading branch information
kaelaela authored Sep 19, 2017
2 parents ef718df + 08b0aee commit af9fed6
Show file tree
Hide file tree
Showing 12 changed files with 93 additions and 60 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
}
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ COMPILE_SDK_VERSION=25
BUILD_TOOLS_VERSION=23.0.3
MIN_SDK_VERSION=16
TARGET_SDK_VERSION=25
SUPPORT_APP_COMPAT_VERSION=25.1.0
SUPPORT_APP_COMPAT_VERSION=25.3.1

VERSION_NAME=1.1.0
VERSION_CODE=5
Expand Down
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Wed Oct 19 21:01:30 JST 2016
#Tue May 09 20:25:21 JST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
1 change: 1 addition & 0 deletions library/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
buildToolsVersion '25.0.2'
}

def file = project.rootProject.file('local.properties')
Expand Down
62 changes: 35 additions & 27 deletions library/src/main/java/me/kaelaela/opengraphview/OGParser.java
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
package me.kaelaela.opengraphview;

import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import me.kaelaela.opengraphview.network.model.OGData;

public class OGParser {
public class OGParser implements Parser {

private static final String DECODE_UTF8 = "UTF-8";
private static final String TITLE = "og:title";
private static final String IMAGE = "\"og:image\"";
private static final String URL = "og:url";
private static final String DESC = "og:description";
private final String DECODE_UTF8 = "UTF-8";
private final String TITLE = "og:title";
private final String IMAGE = "\"og:image\"";
private final String URL = "og:url";
private final String DESC = "og:description";

private static final String TWITTER_TITLE = "twitter:title";
private static final String TWITTER_IMAGE = "\"twitter:image\"";
private static final String TWITTER_URL = "twitter:url";
private static final String TWITTER_DESC = "twitter:description";
private final String TWITTER_TITLE = "twitter:title";
private final String TWITTER_IMAGE = "\"twitter:image\"";
private final String TWITTER_URL = "twitter:url";
private final String TWITTER_DESC = "twitter:description";

private static final String HEAD_START_TAG = "<head";
private static final String HEAD_END_TAG = "</head>";
private static final String META_START_TAG = "<meta";
private static final String CONTENT_PROPERTY = "content=\"";
private final String HEAD_START_TAG = "<head";
private final String HEAD_END_TAG = "</head>";
private final String META_START_TAG = "<meta";
private final String CONTENT_PROPERTY = "content=\"";

private static OGData ogData;
private OGData ogData;

public static OGData parse(InputStream inputStream) throws IOException {
@Override
public OGData parse(InputStream inputStream) throws IOException {
ogData = new OGData();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, DECODE_UTF8);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String headContents = "";
String metaTags = "";
String sourceTextLine;
String headContents = "", metaTags = "", sourceTextLine;
boolean readingHead = false;
while ((sourceTextLine = bufferedReader.readLine()) != null) {
int headStart;
int headEnd;
int headStart, headEnd;
if (sourceTextLine.contains(HEAD_START_TAG)) {
headStart = sourceTextLine.indexOf(">", sourceTextLine.indexOf(HEAD_START_TAG));
if (headStart < sourceTextLine.length()) {
if (headStart + 1 < sourceTextLine.length()) {
headContents = headContents + sourceTextLine.substring(headStart + 1);
}
if (sourceTextLine.contains(HEAD_END_TAG)) {
parseFromOneLineHeader(headContents);
}
readingHead = true;
} else if (sourceTextLine.contains(HEAD_END_TAG)) {
headEnd = sourceTextLine.indexOf(HEAD_END_TAG);
Expand Down Expand Up @@ -71,10 +71,18 @@ public static OGData parse(InputStream inputStream) throws IOException {
return ogData;
}

private static String formattingMetaTags(String headText) {
private void parseFromOneLineHeader(String content) {
int first = content.indexOf(META_START_TAG), last = content.lastIndexOf(META_START_TAG);
while (first < last) {
int tabLength = META_START_TAG.length();
setOGData(content.substring(first, content.indexOf(META_START_TAG, first + tabLength)));
first = content.indexOf(META_START_TAG, first + tabLength);
}
}

private String formattingMetaTags(String headText) {
String formattedText = "";
int start = headText.indexOf(META_START_TAG);
int end = headText.indexOf(">", start) + 1;
int start = headText.indexOf(META_START_TAG), end = headText.indexOf(">", start) + 1;
formattedText = formattedText + headText.substring(start, end) + "\n";
int length = headText.length();
while (end < length) {
Expand All @@ -89,7 +97,7 @@ private static String formattingMetaTags(String headText) {
return formattedText;
}

private static void setOGData(String line) throws IOException {
private void setOGData(String line) {
int start = line.indexOf(CONTENT_PROPERTY) + CONTENT_PROPERTY.length();
int end = line.indexOf("\"", start);
if (line.contains(TITLE) || line.contains(TWITTER_TITLE)) {
Expand Down
21 changes: 13 additions & 8 deletions library/src/main/java/me/kaelaela/opengraphview/OpenGraphView.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,9 @@
import android.support.v4.content.ContextCompat;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.URLUtil;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
Expand Down Expand Up @@ -53,6 +51,7 @@ public enum IMAGE_POSITION {
private RectF mStrokeRect = new RectF();
private Paint mFill = new Paint();
private Paint mStroke = new Paint();
private Parser mParser;
private static OGCache mOGCache = OGCache.getInstance();

public OpenGraphView(Context context) {
Expand Down Expand Up @@ -102,9 +101,10 @@ public OpenGraphView(Context context, AttributeSet attrs, int defStyleAttr) {
setImagePosition((attrPosition == 0 || attrPosition != 1) ? IMAGE_POSITION.LEFT : IMAGE_POSITION.RIGHT);
mSeparate = array.getBoolean(R.styleable.OpenGraphView_separateImage, true);
mSeparator.setVisibility(mSeparate ? VISIBLE : GONE);
mRoundableImageView.setImageDrawable(array.getDrawable(R.styleable.OpenGraphView_imagePlaceHolder));
((ImageView) findViewById(R.id.favicon))
.setImageDrawable(array.getDrawable(R.styleable.OpenGraphView_faviconPlaceHolder));
mRoundableImageView.setBackgroundColor(array.getColor(R.styleable.OpenGraphView_imagePlaceHolder,
ContextCompat.getColor(getContext(), R.color.light_gray)));
findViewById(R.id.favicon).setBackgroundColor(array.getColor(R.styleable.OpenGraphView_faviconPlaceHolder,
ContextCompat.getColor(getContext(), R.color.light_gray)));
array.recycle();
}

Expand Down Expand Up @@ -185,6 +185,10 @@ public void setOnLoadListener(OnLoadListener listener) {
mOnLoadListener = listener;
}

public void setCustomParser(Parser parser) {
mParser = parser;
}

public void loadFrom(@Nullable final String url) {
if (TextUtils.isEmpty(url) || mSeparator == null || !URLUtil.isNetworkUrl(url)
|| url.equals("http://") || url.equals("https://")) {
Expand Down Expand Up @@ -227,7 +231,7 @@ public void onLoadError() {
mOnLoadListener.onLoadError();
}
}
}).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, url);
}, mParser).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, url);
} else {
loadImage(ogData.getImage());
loadFavicon(mUrl);
Expand Down Expand Up @@ -292,6 +296,7 @@ public void onLoadError() {
}

private void setImage(@Nullable Bitmap bitmap) {
mRoundableImageView.setBackgroundColor(ContextCompat.getColor(getContext(), android.R.color.transparent));
mRoundableImageView.setVisibility(bitmap == null ? GONE : VISIBLE);
mSeparator.setVisibility(bitmap == null ? GONE : VISIBLE);
mRoundableImageView.setImageBitmap(bitmap);
Expand Down Expand Up @@ -378,10 +383,10 @@ public Uri getUri() {
}

public void clear() {
mRoundableImageView.setImageDrawable(null);
mRoundableImageView.setImageResource(0);
((TextView) findViewById(R.id.og_url)).setText("");
((TextView) findViewById(R.id.og_title)).setText("");
((TextView) findViewById(R.id.og_description)).setText("");
((ImageView) findViewById(R.id.favicon)).setImageURI(Uri.parse(""));
((ImageView) findViewById(R.id.favicon)).setImageResource(0);
}
}
9 changes: 9 additions & 0 deletions library/src/main/java/me/kaelaela/opengraphview/Parser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package me.kaelaela.opengraphview;

import java.io.IOException;
import java.io.InputStream;
import me.kaelaela.opengraphview.network.model.OGData;

public interface Parser {
OGData parse(InputStream inputStream) throws IOException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,9 @@
import android.graphics.Shader;
import android.support.v4.content.ContextCompat;
import android.util.AttributeSet;
import android.widget.ImageView;
import android.widget.RelativeLayout;

public class RoundableImageView extends ImageView {
public class RoundableImageView extends android.support.v7.widget.AppCompatImageView {

private int mSide;
private int mMargin;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package me.kaelaela.opengraphview.network.tasks;

import android.os.AsyncTask;
import android.util.Log;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import me.kaelaela.opengraphview.OGParser;
import me.kaelaela.opengraphview.Parser;
import me.kaelaela.opengraphview.network.model.OGData;

public class LoadOGDataTask extends AsyncTask<String, Void, OGData> {
Expand All @@ -21,11 +23,13 @@ public void onLoadError() {
}
}

private OnLoadListener listener;
private OGData data = new OGData();
private final Parser mParser;
private OnLoadListener mListener;
private OGData mData = new OGData();

public LoadOGDataTask(OnLoadListener listener) {
this.listener = listener;
public LoadOGDataTask(OnLoadListener listener, Parser parser) {
mListener = listener;
mParser = (parser == null) ? new OGParser() : parser;
}

private InputStream downloadUrl(String urlString) throws IOException {
Expand All @@ -34,42 +38,42 @@ private InputStream downloadUrl(String urlString) throws IOException {
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("GET");
conn.setRequestProperty("User-Agent","");
conn.setRequestProperty("User-Agent", "");
conn.setDoInput(true);
conn.connect();
return conn.getInputStream();
}

@Override
protected OGData doInBackground(String... urls) {
listener.onLoadStart();
mListener.onLoadStart();
InputStream inputStream = null;
try {
inputStream = downloadUrl(urls[0]);
data = OGParser.parse(inputStream);
mData = mParser.parse(inputStream);
} catch (IOException e) {
listener.onLoadError();
mListener.onLoadError();
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
listener.onLoadError();
mListener.onLoadError();
e.printStackTrace();
}
}
}
return data;
return mData;
}

@Override
protected void onPostExecute(OGData og) {
super.onPostExecute(og);
if (og == null) {
listener.onLoadError();
mListener.onLoadError();
return;
}
listener.onLoadSuccess(og);
mListener.onLoadSuccess(og);
}
}
1 change: 1 addition & 0 deletions sample/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
buildToolsVersion '25.0.2'
}

dependencies {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public LinkListAdapter() {
linkList.add("https://twitter.com/kaelaela31");
linkList.add("https://about.me/kaelaela");
linkList.add("https://twitter.com/kaelaela31/status/815744327951392768");
linkList.add("https://www.reddit.com/r/androiddev/");
}

@Override
Expand Down
19 changes: 12 additions & 7 deletions sample/src/main/java/me/kaelaela/sample/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,18 @@ public void onClick(View v) {
}
});
}

findViewById(R.id.open_list_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LinkListActivity.launch(v.getContext());
}
});

if (openGraphView == null) {
return;
}

findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Expand Down Expand Up @@ -101,12 +113,5 @@ public void onStopTrackingTouch(SeekBar seekBar) {

}
});

findViewById(R.id.open_list_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LinkListActivity.launch(v.getContext());
}
});
}
}

0 comments on commit af9fed6

Please sign in to comment.