package com.lgq.rssreader;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.framework.Platform.ShareParams;
import cn.sharesdk.onekeyshare.OnekeyShare;
import cn.sharesdk.onekeyshare.ShareContentCustomizeCallback;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.evernote.client.android.EvernoteSession;
import com.evernote.client.android.EvernoteUtil;
import com.evernote.client.android.OnClientCallback;
import com.evernote.edam.type.Note;
import com.evernote.edam.type.Notebook;
import com.evernote.thrift.transport.TTransportException;
import com.google.gson.Gson;
import com.lgq.rssreader.MainActivity.PivotPagerAdapter;
import com.lgq.rssreader.R.drawable;
import com.lgq.rssreader.controls.GestureListener;
import com.lgq.rssreader.core.Config;
import com.lgq.rssreader.core.ManualResetEvent;
import com.lgq.rssreader.core.ReaderApp;
import com.lgq.rssreader.dal.BlogDalHelper;
import com.lgq.rssreader.dal.ImageRecordDalHelper;
import com.lgq.rssreader.dal.SyncStateDalHelper;
import com.lgq.rssreader.entity.Blog;
import com.lgq.rssreader.entity.Channel;
import com.lgq.rssreader.entity.ImageRecord;
import com.lgq.rssreader.entity.SyncState;
import com.lgq.rssreader.enums.RssAction;
import com.lgq.rssreader.enums.RssTab;
import com.lgq.rssreader.enums.Theme;
import com.lgq.rssreader.formatter.CacheEventArgs;
import com.lgq.rssreader.formatter.ContentFormatter;
import com.lgq.rssreader.formatter.DescriptionFormatter;
import com.lgq.rssreader.formatter.BlogFormatter.CacheCompleteHandler;
import com.lgq.rssreader.formatter.BlogFormatter.FlashCompleteHandler;
import com.lgq.rssreader.formatter.BlogFormatter.RenderCompleteHandler;
import com.lgq.rssreader.parser.FeedlyParser;
import com.lgq.rssreader.parser.HttpResponseHandler;
import com.lgq.rssreader.utils.Helper;
import com.lgq.rssreader.utils.HtmlHelper;
import com.lgq.rssreader.utils.NotificationHelper;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences.Editor;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.NavUtils;
import android.support.v4.app.Fragment.SavedState;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.util.TypedValue;
import android.view.GestureDetector;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.ext.SatelliteMenu;
import android.view.ext.SatelliteMenuItem;
import android.view.ext.SatelliteMenu.SateliteClickedListener;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebSettings.PluginState;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.actionbarsherlock.view.MenuItem;
/**
* An activity representing a single Blog detail screen. This
* activity is only used on handset devices. On tablet-size devices,
* item details are presented side-by-side with a list of items
* in a {@link MainActivity}.
* <p>
* This activity is mostly just a 'shell' activity containing nothing
* more than a {@link BlogContentFragment}.
*/
public class BlogContentActivity extends SherlockFragmentActivity {
/*
* 状态改变过的数据
*/
public List<Blog> Blogs;
/*
* 状态从未读到已读或已读到未读
*/
public int Count;
/**
* The fragment argument representing the item ID that this fragment
* represents.
*/
public static final String ARG_ITEM_ID = "item_id";
public static final String CURRENT = "current";
public static final String CHANNEL = "channel";
public static final String KEYWORD = "keyword";
/**
* This is usede to present iframe.
*/
private boolean isPageLoaded;
private ContentFormatter content;
private DescriptionFormatter desc;
GestureListener simpleListner;
GestureDetector gesture;
ScaleGestureDetector scaleDetector;
/**
* The blog this fragment is presenting.
*/
private Blog current;
/**
* Read Settings.
*/
private View readSetting;
public View getReadSetting(){return readSetting;}
/**
* The fragment argument representing the rss tab that this fragment
* represents.
*/
public static final String ARG_TAB_ID = "tsstab";
/**
* The fragment argument representing the uioptions
*/
public static final String UI_OPTIONS = "uioptions";
/**
* The data source of this fragment represents.
*/
public RssTab from;
/**
* The Channel this fragment is presenting.
*/
private Channel channel;
private ImageView processImage;
private TextView processMsg;
private View processContainer;
private ProgressDialog mProgressDialog;
/**
* The view container
*/
private List<View> views;
/**
* Identify the IMMERSIVE mode status
*/
private boolean immersiveMode;
/**
* Identify the initial status
*/
private int uiOptions;
/**
* The WebView of this fragment to present.
*/
private View view;
private WebView browser;
private TextView blogTitle;
private SatelliteMenu menu;
//private BlogDalHelper helper;
public SatelliteMenu getMenu(){return menu;}
private ManualResetEvent loadEvent;
private ManualResetEvent jsEvent;
public TextView Title;
private static final EvernoteSession.EvernoteService EVERNOTE_SERVICE = EvernoteSession.EvernoteService.PRODUCTION;
public EvernoteSession mEvernoteSession;
private static final int CONTENT = 1;
private static final int DESC = 2;
private static final int FLASH = 3;
private static final int SHARE = 4;
private static final int SHAKE = 5;
@Override
public void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_blog_detail);
initData();
initViews();
initFormatter();
}
private void initData(){
processExtraData(null);
if(getIntent().getExtras().containsKey(CURRENT)){
if(getIntent().getExtras().get(CURRENT) instanceof String){
current = new Gson().fromJson(getIntent().getExtras().getString(CURRENT), Blog.class);
}
if(getIntent().getExtras().get(CURRENT) instanceof Blog){
current = (Blog)getIntent().getExtras().get(CURRENT);
}
}
if(getIntent().getExtras().containsKey(CHANNEL)){
if(getIntent().getExtras().get(CHANNEL) instanceof String){
channel = new Gson().fromJson(getIntent().getExtras().getString(CHANNEL), Channel.class);
}
if(getIntent().getExtras().get(CHANNEL) instanceof Channel){
channel = (Channel)getIntent().getExtras().get(CHANNEL);
}
}
if(getIntent().getExtras().containsKey(ARG_TAB_ID))
from = (RssTab)getIntent().getExtras().get(ARG_TAB_ID);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
//restore from savedInstanceState
if(savedInstanceState != null && savedInstanceState.containsKey(CURRENT))
current = (Blog) savedInstanceState.getSerializable(CURRENT);
if(savedInstanceState != null && savedInstanceState.containsKey(CHANNEL))
channel = (Channel) savedInstanceState.getSerializable(CHANNEL);
if(savedInstanceState != null && savedInstanceState.containsKey(ARG_TAB_ID)){
from = (RssTab) savedInstanceState.getSerializable(ARG_TAB_ID);
}
}
@SuppressLint("NewApi")
private void initViews(){
this.registerGestureOnTouchListener(new BlogContentActivity.GestureOnTouchListener() {
@Override
public void onTouch(MotionEvent ev) {
gesture.onTouchEvent(ev);
scaleDetector.onTouchEvent(ev);
//if(isScrolling && ev.getAction() == MotionEvent.ACTION_UP){
if(ev.getAction() == MotionEvent.ACTION_UP){
simpleListner.onScrollComplete(ev);
}
}
});
menu = (SatelliteMenu)findViewById(R.id.pathmenu);
initPathMenu();
if(ReaderApp.getSettings().FullScreen){
//Helper.toggleImmersiveMode(getActivity());
uiOptions = getWindow().getDecorView().getSystemUiVisibility();
Helper.hideSystemUI(this);
immersiveMode = true;
}
browser = (WebView)findViewById(R.id.browser);
browser.getSettings().setJavaScriptEnabled(true);
browser.addJavascriptInterface(this, "external");
browser.getSettings().setPluginState(PluginState.ON);
view = findViewById(R.id.content);
simpleListner = new GestureListener(new com.lgq.rssreader.controls.GestureListener.IGestureListener() {
@Override
public void onRight() {
Blog tmp = GetNext(current);
if(tmp != null){
jsEvent.reset();
current = tmp;
new Thread(){public void run(){desc.Render(current);}}.start();
showProcess("");
}
else{
Toast.makeText(BlogContentActivity.this, BlogContentActivity.this.getResources().getString(R.string.content_nonextitem), Toast.LENGTH_SHORT).show();
}
}
public void onUp(){
//int uiOptions = getActivity().getWindow().getDecorView().getSystemUiVisibility();
//boolean isImmersiveModeEnabled =((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions);
if(ReaderApp.getSettings().FullScreen && immersiveMode){
//Helper.toggleImmersiveMode(getActivity());
Helper.showSystemUI(BlogContentActivity.this, uiOptions);
immersiveMode = false;
}
}
@Override
public void onDown(){
//int uiOptions = getActivity().getWindow().getDecorView().getSystemUiVisibility();
//boolean isImmersiveModeEnabled =((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions);
if(ReaderApp.getSettings().FullScreen && !immersiveMode){
//Helper.toggleImmersiveMode(getActivity());
Helper.hideSystemUI(BlogContentActivity.this);
immersiveMode = true;
}
}
@Override
public void onDoubleTap() {
if(readSetting != null && readSetting.getVisibility() == View.GONE){
jsEvent.reset();
initProgressDialog(true);
new Thread(){public void run(){content.Render(current);}}.start();
}
}
@Override
public void onLeft() {
Blog tmp = GetPrevious(current);
if(tmp != null){
jsEvent.reset();
current = tmp;
new Thread(){public void run(){desc.Render(current);}}.start();
showProcess("");
}
else{
Toast.makeText(BlogContentActivity.this, BlogContentActivity.this.getResources().getString(R.string.content_nopreviousitem), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onScale(double scale) {
if(scale == 1.0)
return;
Log.i("RssReader", "on scale:" + scale);
int size = (int) (ReaderApp.getSettings().FontSize * scale);
//ReaderApp.getSettings().FontSize = size;
Editor e = PreferenceManager.getDefaultSharedPreferences(ReaderApp.getAppContext()).edit();
e.putString("format_fontsize", String.valueOf(size)).commit();
ReaderApp.saveSettings();
Helper.saveHtml(BlogContentActivity.this, true);
browser.loadUrl("javascript: fontsize(" + size + ")");
}
},
view,
(int) (getWindowManager().getDefaultDisplay().getWidth() * 0.33),
(int) (getWindowManager().getDefaultDisplay().getHeight() * 0.33));
gesture = new GestureDetector(this, simpleListner);
scaleDetector= new ScaleGestureDetector(this, simpleListner);
blogTitle = (TextView)findViewById(R.id.blog_content_title);
readSetting = findViewById(R.id.readSetting);
initReadSetting();
//blogTitle = (TextView)getActivity().findViewById(R.id.blog_content_title);
blogTitle.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
browser.loadUrl("javascript: moveToTop()");
}
});
//rootView.setBackgroundColor(Color.BLACK);
processImage = (ImageView)findViewById(R.id.process);
processMsg = (TextView)findViewById(R.id.blog_content_msg);
processContainer = findViewById(R.id.processContainer);
showProcess(getResources().getString(R.string.content_loading));
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//if ( 0 != (getActivity().getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE ) ) {
WebView.setWebContentsDebuggingEnabled(true);
//}
}
isPageLoaded = false;
browser.setWebViewClient(new WebViewClient() {
// Load opened URL in the application instead of standard browser
// application
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i("RssReader", url);
return true;
}
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// if(url.equals("file://" + android.os.Environment.getExternalStorageDirectory().getAbsolutePath() +
// Config.HTML_LOCATION + Config.HTML_NAME) && !isPageLoaded){
// isPageLoaded = true;
// new Thread(){public void run(){desc.Render(current);}}.start();
// }
}
});
browser.setOnLongClickListener(new OnLongClickListener(){
@Override
public boolean onLongClick(View v) {
Uri name = Uri.parse(HtmlHelper.unescape(current.Link));
Intent intent = new Intent(Intent.ACTION_VIEW, name);
startActivity(intent);
return true;
}
});
if (current != null) {
blogTitle.setText(current.Title);
markAsRead(current);
browser.loadUrl("file://" + android.os.Environment.getExternalStorageDirectory().getAbsolutePath() +
Config.HTML_LOCATION + Config.HTML_NAME);
}else{
browser.loadDataWithBaseURL(null,"<html><h1>Empty<h1><html>","text/html", "utf-8", null);
}
}
private void initFormatter(){
content = new ContentFormatter();
content.EnableCache = ReaderApp.getSettings().EnableCacheImage;
content.NoImageMode = ReaderApp.getSettings().NoImageMode;
content.setCacheCompleteHandler(new CacheCompleteHandler(){
public void onCache(Blog b, final CacheEventArgs args){
if(args.Cache != null && args.Cache != null){
BlogDalHelper helper = new BlogDalHelper();
helper.SynchronyContent2DB(args.Blog.BlogId, args.Cache.outerHtml());
helper.Close();
}
}
});
content.setRenderCompleteHandler(new RenderCompleteHandler(){
public void onRender(Blog b, final String Content){
b.Content = Content;
int index = Blogs.indexOf(b);
if(index == -1)
Blogs.add(b);
else
Blogs.get(index).Content = Content;
BlogDalHelper helper = new BlogDalHelper();
helper.SynchronyContent2DB(b.BlogId, Content);
helper.Close();
if(b.BlogId.equals(current.BlogId))
{
int what = CONTENT;
try {
loadEvent.waitOne();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Message m = myHandler.obtainMessage();
m.what = what;
m.obj = Content;
myHandler.sendMessage(m);
}
}
});
content.setFlashCompleteHandler(new FlashCompleteHandler(){
@Override
public void onFlash(final Object sender, final CacheEventArgs cacheArgs) {
int what = FLASH;
try {
jsEvent.waitOne();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Message m = myHandler.obtainMessage();
m.what = what;
m.obj = cacheArgs;
Bundle b = new Bundle();
b.putString("title", sender.toString());
m.setData(b);
myHandler.sendMessage(m);
}
});
desc = new DescriptionFormatter();
desc.EnableCache = ReaderApp.getSettings().EnableCacheImage;
desc.NoImageMode = ReaderApp.getSettings().NoImageMode;
desc.setCacheCompleteHandler(new CacheCompleteHandler(){
public void onCache(Blog b, final CacheEventArgs args){
if(args.Blog != null && args.Cache != null){
BlogDalHelper helper = new BlogDalHelper();
helper.SynchronyDescription2DB(args.Blog.BlogId, args.Cache.outerHtml());
helper.Close();
}
}
});
desc.setRenderCompleteHandler(new RenderCompleteHandler(){
public void onRender(Blog b, final String Content){
b.Description = Content;
int index = Blogs.indexOf(b);
if(index == -1)
Blogs.add(b);
else
Blogs.get(index).Description = Content;
BlogDalHelper helper = new BlogDalHelper();
helper.SynchronyDescription2DB(b.BlogId, Content);
helper.Close();
if(b.BlogId.equals(current.BlogId))
{
int what = DESC;
try {
Log.i("RssReader", "Waiting for page load complete");
loadEvent.waitOne();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Message m = myHandler.obtainMessage();
m.what = what;
m.obj = Content;
myHandler.sendMessage(m);
}
}
});
desc.setFlashCompleteHandler(new FlashCompleteHandler(){
@Override
public void onFlash(final Object sender, final CacheEventArgs cacheArgs) {
int what = FLASH;
try {
jsEvent.waitOne();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Message m = myHandler.obtainMessage();
m.what = what;
m.obj = cacheArgs;
Bundle b = new Bundle();
b.putString("title", sender.toString());
m.setData(b);
myHandler.sendMessage(m);
}
});
}
protected void hideProcess(){
runOnUiThread(new Runnable(){
public void run(){
processImage.clearAnimation();
processMsg.setText("");
processImage.setVisibility(View.GONE);
processMsg.setVisibility(View.GONE);
processContainer.setVisibility(View.GONE);
}
});
}
protected void hideProgressbar(){
runOnUiThread(new Runnable(){
public void run(){
if(mProgressDialog == null)
initProgressDialog(false);
mProgressDialog.hide();
mProgressDialog.dismiss();
}
});
}
protected void showProcess(final String msg){
runOnUiThread(new Runnable(){
public void run(){
processMsg.setText(msg);
processMsg.setVisibility(View.GONE);
processImage.setVisibility(View.VISIBLE);
processContainer.setVisibility(View.VISIBLE);
processImage.setAnimation(AnimationUtils.loadAnimation(BlogContentActivity.this, R.anim.rotate));
}
});
}
@JavascriptInterface
public void notifyJava(String args){
Log.i("RssReader", args);
String url = "";
if(args.startsWith("LinkHandle")){
url = args.replace("LinkHandle", "");
if(url.contains("mp4") || url.contains("f4v") || url.contains("flv")){
Intent intent = new Intent(Intent.ACTION_VIEW);
String type = "video/mp4";
Uri name = Uri.parse(HtmlHelper.unescape(url));
intent.setDataAndType(name, type);
startActivity(intent);
}
else{
Uri name = Uri.parse(HtmlHelper.unescape(url));
Intent intent = new Intent(Intent.ACTION_VIEW, name);
startActivity(intent);
}
}
if(args.startsWith("SaveToMediaLibrary")){
url = args.replace("SaveToMediaLibrary", "");
URL aURL;
try {
aURL = new URL(url);
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
Bitmap bm = BitmapFactory.decodeStream(bis);
ContentResolver cr = getContentResolver();
MediaStore.Images.Media.insertImage(cr, bm, "RssReader", "this is a Photo from RssReader");
Toast.makeText(this, getResources().getString(R.string.content_savetolibrary), Toast.LENGTH_SHORT).show();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(args.equals("reload")){
new Thread(){public void run(){desc.Render(current);}}.start();
}
}
@JavascriptInterface
public void loadComplete(String args){
Log.i("RssReader", "Page Load " + args);
if(args.equals("init")){
loadEvent.set();
new Thread(){public void run(){desc.Render(current);}}.start();
}
else if(args.equals("content")){
hideProgressbar();
if(!ReaderApp.getSettings().MenuShake){
Editor e = PreferenceManager.getDefaultSharedPreferences(ReaderApp.getAppContext()).edit();
e.putBoolean("MenuShake", true).commit();
ReaderApp.saveSettings();
Message m = myHandler.obtainMessage();
m.what = SHAKE;
myHandler.sendMessage(m);
}
}
else if(args.equals("description")){
hideProcess();
if(!ReaderApp.getSettings().MenuShake){
Editor e = PreferenceManager.getDefaultSharedPreferences(ReaderApp.getAppContext()).edit();
e.putBoolean("MenuShake", true).commit();
ReaderApp.saveSettings();
Message m = myHandler.obtainMessage();
m.what = SHAKE;
myHandler.sendMessage(m);
}
}
}
private void initReadSetting(){
final View container = findViewById(R.id.content);
LinearLayout readfonts = (LinearLayout)findViewById(R.id.readfonts);
List<File> fonts = Helper.detectFonts();
final List<TextView> texts = new ArrayList<TextView>();
double weight = 1.0/(fonts.size() + 1);
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (fonts.size() + 1) * 45, getResources().getDisplayMetrics());
int minHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 160, getResources().getDisplayMetrics());
readfonts.getLayoutParams().height = height > minHeight ? height : minHeight;
readfonts.requestLayout();
for(File f : fonts){
TextView text = new TextView(container.getContext());
text.setBackgroundResource(R.drawable.textviewbg);
text.setTextColor(getResources().getColor(R.color.white));
text.setText(f.getName().substring(0, f.getName().indexOf(".")));
text.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0);
lp.weight = (float) weight;
lp.setMargins(2,2,2,2);
text.setLayoutParams(lp);
readfonts.addView(text);
texts.add(text);
}
if(fonts.size()>0){
TextView text = new TextView(container.getContext());
text.setBackgroundResource(R.drawable.textviewbg);
text.setTextColor(getResources().getColor(R.color.white));
text.setText("Droid Sans");
text.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0);
lp.weight = (float) weight;
lp.setMargins(2,2,2,2);
text.setLayoutParams(lp);
readfonts.addView(text);
texts.add(text);
}else{
TextView text = new TextView(container.getContext());
text.setBackgroundResource(R.drawable.textviewbg);
text.setTextColor(getResources().getColor(R.color.white));
text.setText(R.string.blog_fontmsg);
text.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0);
lp.weight = (float) weight;
lp.setMargins(2,2,2,2);
text.setLayoutParams(lp);
readfonts.addView(text);
texts.add(text);
}
int currentFont = ReaderApp.getSettings().Font >= texts.size() ? 0 : ReaderApp.getSettings().Font;
texts.get(currentFont).setText(texts.get(currentFont).getText() + " √");
if(currentFont == texts.size() - 1 || Helper.detectFonts().size() == 0){
blogTitle.setTypeface(null);
}else{
Typeface typeFace = Typeface.createFromFile(Helper.detectFonts().get(currentFont));
blogTitle.setTypeface(typeFace);
}
OnClickListener familyListner = new OnClickListener(){
@Override
public void onClick(View v) {
if(texts.size() == 1){
return;
}
String family = "";
int chosen = -1;
int index = 0;
for(TextView view : texts){
if(v.equals(view)){
family = view.getText().toString().replace(" √", "");
view.setText(family + " √");
chosen = index;
}else{
view.setText(view.getText().toString().replace(" √", ""));
}
index++;
}
if(chosen == texts.size() - 1 || Helper.detectFonts().size() == 0){
blogTitle.setTypeface(null);
}else{
Typeface typeFace = Typeface.createFromFile(Helper.detectFonts().get(chosen));
blogTitle.setTypeface(typeFace);
}
Editor e = PreferenceManager.getDefaultSharedPreferences(ReaderApp.getAppContext()).edit();
e.putInt("format_font", chosen).commit();
ReaderApp.saveSettings();
Helper.saveHtml(BlogContentActivity.this, true);
browser.loadUrl("javascript: fontFamily('" + family + "')");
}
};
for(TextView view: texts){
view.setOnClickListener(familyListner);
}
final TextView setting_defaultcolor = (TextView)findViewById(R.id.setting_defaultcolor);
final TextView setting_lightcolor = (TextView)findViewById(R.id.setting_lightcolor);
final TextView setting_darkcolor = (TextView)findViewById(R.id.setting_darkcolor);
if(ReaderApp.getSettings().Theme == Theme.Default){
setting_defaultcolor.setText("√");
setting_lightcolor.setText("");
setting_darkcolor.setText("");
container.setBackgroundColor(getResources().getColor(R.color.readdefault));
((RelativeLayout)container.getParent()).setBackgroundColor(getResources().getColor(R.color.readdefault));
blogTitle.setBackgroundColor(getResources().getColor(R.color.readdefault));
blogTitle.setTextColor(getResources().getColor(R.color.readfontdefault));
}else if(ReaderApp.getSettings().Theme == Theme.Light){
setting_defaultcolor.setText("");
setting_lightcolor.setText("√");
setting_darkcolor.setText("");
container.setBackgroundColor(getResources().getColor(R.color.readlight));
((RelativeLayout)container.getParent()).setBackgroundColor(getResources().getColor(R.color.readlight));
blogTitle.setBackgroundColor(getResources().getColor(R.color.readlight));
blogTitle.setTextColor(getResources().getColor(R.color.readfontlight));
}else if(ReaderApp.getSettings().Theme == Theme.Dark){
setting_defaultcolor.setText("");
setting_lightcolor.setText("");
setting_darkcolor.setText("√");
container.setBackgroundColor(getResources().getColor(R.color.readdark));
((RelativeLayout)container.getParent()).setBackgroundColor(getResources().getColor(R.color.readdark));
blogTitle.setBackgroundColor(getResources().getColor(R.color.readdark));
blogTitle.setTextColor(getResources().getColor(R.color.readfontdark));
}
OnClickListener colorListner = new OnClickListener(){
@Override
public void onClick(View v) {
String backgroundcolor = "";
String foregroundcolor = "";
Theme theme = Theme.Default;
if(v.equals(setting_defaultcolor)){
backgroundcolor = getResources().getString(R.color.readdefault);
foregroundcolor = getResources().getString(R.color.readfontdefault);
theme = Theme.Default;
setting_defaultcolor.setText("√");
setting_lightcolor.setText("");
setting_darkcolor.setText("");
((RelativeLayout)container.getParent()).setBackgroundColor(getResources().getColor(R.color.readdefault));
container.setBackgroundColor(getResources().getColor(R.color.readdefault));
blogTitle.setBackgroundColor(getResources().getColor(R.color.readdefault));
blogTitle.setTextColor(getResources().getColor(R.color.readfontdefault));
}else if(v.equals(setting_lightcolor)){
backgroundcolor = getResources().getString(R.color.readlight);
foregroundcolor = getResources().getString(R.color.readfontlight);
theme = Theme.Light;
setting_defaultcolor.setText("");
setting_lightcolor.setText("√");
setting_darkcolor.setText("");
((RelativeLayout)container.getParent()).setBackgroundColor(getResources().getColor(R.color.readlight));
container.setBackgroundColor(getResources().getColor(R.color.readlight));
blogTitle.setBackgroundColor(getResources().getColor(R.color.readlight));
blogTitle.setTextColor(getResources().getColor(R.color.readfontlight));
}else if(v.equals(setting_darkcolor)){
backgroundcolor = getResources().getString(R.color.readdark);
foregroundcolor = getResources().getString(R.color.readfontdark);
theme = Theme.Dark;
setting_defaultcolor.setText("");
setting_lightcolor.setText("");
setting_darkcolor.setText("√");
((RelativeLayout)container.getParent()).setBackgroundColor(getResources().getColor(R.color.readdark));
container.setBackgroundColor(getResources().getColor(R.color.readdark));
blogTitle.setBackgroundColor(getResources().getColor(R.color.readdark));
blogTitle.setTextColor(getResources().getColor(R.color.readfontdark));
mProgressDialog = new ProgressDialog(BlogContentActivity.this, R.style.DarkAlertDialogStyle);
}
Editor e = PreferenceManager.getDefaultSharedPreferences(ReaderApp.getAppContext()).edit();
e.putString("view_backgroundcolor", backgroundcolor).commit();
e.putString("view_foregroundcolor", foregroundcolor).commit();
e.putInt("view_theme", theme.ordinal()).commit();
ReaderApp.saveSettings();
Helper.saveHtml(BlogContentActivity.this, true);
backgroundcolor = backgroundcolor.substring(3);
foregroundcolor = foregroundcolor.substring(3);
browser.loadUrl("javascript: backgroundColor('" + backgroundcolor + "')");
browser.loadUrl("javascript: fontColor('" + foregroundcolor + "')");
initProgressDialog(false);
}
};
setting_defaultcolor.setOnClickListener(colorListner);
setting_lightcolor.setOnClickListener(colorListner);
setting_darkcolor.setOnClickListener(colorListner);
final ImageView setting_bigfont = (ImageView)findViewById(R.id.setting_bigfont);
final ImageView setting_smallfont = (ImageView)findViewById(R.id.setting_smallfont);
OnClickListener fontListner = new OnClickListener(){
@Override
public void onClick(View v) {
int size = ReaderApp.getSettings().FontSize;
if(v.equals(setting_bigfont))
size = size + 1;
if(v.equals(setting_smallfont))
size = size - 1;
if(size <= 0)
size = 1;
//ReaderApp.getSettings().FontSize = size;
Editor e = PreferenceManager.getDefaultSharedPreferences(ReaderApp.getAppContext()).edit();
e.putString("format_fontsize", String.valueOf(size)).commit();
ReaderApp.saveSettings();
Helper.saveHtml(BlogContentActivity.this, true);
browser.loadUrl("javascript: fontsize(" + size + ")");
}
};
setting_bigfont.setOnClickListener(fontListner);
setting_smallfont.setOnClickListener(fontListner);
final ImageView setting_bigheight = (ImageView)findViewById(R.id.setting_bigheight);
final ImageView setting_smallheight = (ImageView)findViewById(R.id.setting_smallheight);
OnClickListener heightListner = new OnClickListener(){
@Override
public void onClick(View v) {
int height = ReaderApp.getSettings().LineHeight;
if(v.equals(setting_bigheight))
height = height + 10;
if(v.equals(setting_smallheight))
height = height - 10;
if(height <= 60)
height = 60;
//ReaderApp.getSettings().FontSize = size;
Editor e = PreferenceManager.getDefaultSharedPreferences(ReaderApp.getAppContext()).edit();
e.putString("format_line", String.valueOf(height)).commit();
ReaderApp.saveSettings();
Helper.saveHtml(BlogContentActivity.this, true);
browser.loadUrl("javascript: lineheight(" + height + ")");
}
};
setting_bigheight.setOnClickListener(heightListner);
setting_smallheight.setOnClickListener(heightListner);
final ImageView setting_lower = (ImageView)findViewById(R.id.setting_lower);
final ImageView setting_lighter = (ImageView)findViewById(R.id.setting_lighter);
OnClickListener brightListner = new OnClickListener(){
@Override
public void onClick(View v) {
int bright = 100;
if(v.equals(setting_lower))
bright = bright - 10;
if(v.equals(setting_lighter))
bright = bright + 10;
if(bright <= 30)
bright = 30;
if(bright >= 250)
bright = 250;
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.screenBrightness = bright/255.0f;
getWindow().setAttributes(layoutParams);
}
};
setting_lower.setOnClickListener(brightListner);
setting_lighter.setOnClickListener(brightListner);
final Button setting_close = (Button)findViewById(R.id.setting_close);
setting_close.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
menu.setVisibility(View.VISIBLE);
readSetting.setVisibility(View.GONE);
}
});
}
private void initPathMenu(){
final float scale = getResources().getDisplayMetrics().density;
menu.setSatelliteDistance((int) (200 * scale + 0.5f));
menu.setMainImage(R.drawable.main);
menu.setTotalSpacingDegree(90);
menu.setCloseItemsOnClick(true);
menu.setExpandDuration(500);
List<SatelliteMenuItem> items = new ArrayList<SatelliteMenuItem>();
if(current.IsStarred)
items.add(new SatelliteMenuItem(0, R.drawable.fav));
else
items.add(new SatelliteMenuItem(0, R.drawable.addfav));
if(current.IsRead)
items.add(new SatelliteMenuItem(1, R.drawable.unread));
else
items.add(new SatelliteMenuItem(1, R.drawable.read));
items.add(new SatelliteMenuItem(2, R.drawable.share));
items.add(new SatelliteMenuItem(3, R.drawable.reload));
items.add(new SatelliteMenuItem(4, R.drawable.full));
items.add(new SatelliteMenuItem(5, R.drawable.settings));
menu.addItems(items);
menu.setOnItemClickedListener(new SateliteClickedListener() {
public void eventOccured(int id) {
switch(id){
case 0:
if(!current.IsStarred)
menu.getMenuItems().get(id).setImgDrawable(ReaderApp.getAppContext().getResources().getDrawable(R.drawable.fav));
else
menu.getMenuItems().get(id).setImgDrawable(ReaderApp.getAppContext().getResources().getDrawable(R.drawable.addfav));
new Thread(){
public void run(){
current.IsStarred = !current.IsStarred;
if(current.IsStarred)
markTag(current, RssAction.AsStar);
else
markTag(current, RssAction.AsUnstar);
int index = Blogs.indexOf(current);
if(index == -1)
Blogs.add(current);
else
Blogs.get(index).IsStarred = current.IsStarred;
BlogDalHelper helper = new BlogDalHelper();
helper.MarkAsStar(current.BlogId, current.IsStarred);
helper.Close();
}
}.start();
break;
case 1:
if(!current.IsRead)
menu.getMenuItems().get(id).setImgDrawable(ReaderApp.getAppContext().getResources().getDrawable(R.drawable.read));
else
menu.getMenuItems().get(id).setImgDrawable(ReaderApp.getAppContext().getResources().getDrawable(R.drawable.unread));
new Thread(){
public void run(){
current.IsRead = !current.IsRead;
if(current.IsRead)
markTag(current, RssAction.AsRead);
else
markTag(current, RssAction.AsUnread);
int index = Blogs.indexOf(current);
if(current.IsRead)
Count++;
else
Count--;
if(index == -1)
Blogs.add(current);
else
Blogs.get(index).IsRead = current.IsRead;
BlogDalHelper helper = new BlogDalHelper();
helper.MarkAsRead(current.BlogId, current.IsRead);
helper.Close();
}
}.start();
break;
case 2:
new Thread(){
public void run(){
final OnekeyShare oks = new OnekeyShare();
// 令编辑页面显示为Dialog模式
oks.setDialogMode();
// 在自动授权时可以禁用SSO方式
oks.disableSSOWhenAuthorize();
oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
if(ReaderApp.getProfile() != null)
oks.setAddress(ReaderApp.getProfile().Email);
oks.setTitle(current.Title);
oks.setTitleUrl(current.Link);
oks.setText(HtmlHelper.HtmlToText(HtmlHelper.filterHtml(current.Content != null && current.Content.length() > 0 ? current.Content : current.Description)));
oks.setUrl(current.Link);
oks.setVenueName("RssReader");
oks.setVenueDescription("RssReader offers better experience!");
oks.setUrl(current.Link);
oks.setSite(getString(R.string.app_name));
oks.setSiteUrl(current.Link);
oks.setSilent(true);
String sDStateString = android.os.Environment.getExternalStorageState();
if (sDStateString.equals(android.os.Environment.MEDIA_MOUNTED)) {
try {
File SDFile = android.os.Environment.getExternalStorageDirectory();
List<Blog> tmp = new ArrayList<Blog>();
tmp.add(current);
List<ImageRecord> records = new ImageRecordDalHelper().GetImageRecordByBlog(tmp);
if(records != null && !records.isEmpty())
oks.setImagePath(SDFile.getAbsolutePath() + Config.IMAGES_LOCATION + records.get(0).StoredName);
} catch (Exception e) {
e.printStackTrace();
}// end of try
}
Bitmap logo = BitmapFactory.decodeResource(getResources(), R.drawable.logo_evernote);
String label = "Evernote";
OnClickListener listener = new OnClickListener() {
public void onClick(View v) {
if(!mEvernoteSession.isLoggedIn())
mEvernoteSession.authenticate(BlogContentActivity.this);
else
ShareEvernote();
oks.finish();
}
};
oks.setCustomerLogo(logo, label, 6, listener);
Bitmap copyLogo = BitmapFactory.decodeResource(getResources(), R.drawable.logo_copy);
String copyLabel = ReaderApp.getAppContext().getString(android.R.string.copy);
OnClickListener copyListener = new OnClickListener() {
public void onClick(View v) {
ClipboardManager clipboard = (ClipboardManager)ReaderApp.getAppContext().getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("RssReader", HtmlHelper.HtmlToText(HtmlHelper.filterHtml(current.Content != null ? current.Content : current.Description)));
clipboard.setPrimaryClip(clip);
Toast.makeText(ReaderApp.getAppContext(), ReaderApp.getAppContext().getString(R.string.content_addtoclipbroad), Toast.LENGTH_SHORT).show();
oks.finish();
}
};
oks.setCustomerLogo(copyLogo, copyLabel, -1, copyListener);
oks.setShareContentCustomizeCallback(new ShareContentCustomizeCallback(){
@Override
public void onShare(Platform platform, ShareParams paramsToShare) {
if("SinaWeibo".equals(platform.getName())){
paramsToShare.text = current.Title;
}
else if ("Twitter".equals(platform.getName())) {
paramsToShare.text = current.Title;
}
else if ("ShortMessage".equals(platform.getName())) {
paramsToShare.text = current.Title;
}
else if ("Instagram".equals(platform.getName())) {
paramsToShare.text = current.Title;
}
else if ("GooglePlus".equals(platform.getName())) {
paramsToShare.text = HtmlHelper.filterHtml(current.Content != null && current.Content.length() > 0 ? current.Content : current.Description);
}
else if ("Email".equals(platform.getName())) {
paramsToShare.text = HtmlHelper.filterHtml(current.Content != null && current.Content.length() > 0 ? current.Content : current.Description);
}
else if ("QQ".equals(platform.getName())) {
paramsToShare.text = HtmlHelper.filterHtml(current.Content != null && current.Content.length() > 0 ? current.Content : current.Description);
}
else if ("Evernote".equals(platform.getName())) {
paramsToShare.text = HtmlHelper.ConvertHtmlToEnml(current.Content != null && current.Content.length() > 0 ? current.Content : current.Description);
}
else if ("Wechat".equals(platform.getName())) {
paramsToShare.text = HtmlHelper.HtmlToText(HtmlHelper.filterHtml(current.Content != null && current.Content.length() > 0 ? current.Content : current.Description));
}
}
});
Message m = myHandler.obtainMessage();
m.what = SHARE;
m.obj = oks;
//myHandler.sendMessage(m);
oks.show(BlogContentActivity.this);
}
}.start();
break;
case 3:
new Thread(){public void run(){desc.Render(current);}}.start();
break;
case 4:
if(!ReaderApp.getSettings().FullScreen){
Helper.hideSystemUI(BlogContentActivity.this);
menu.getMenuItems().get(id).setImgDrawable(ReaderApp.getAppContext().getResources().getDrawable(R.drawable.small));
Toast.makeText(BlogContentActivity.this, ReaderApp.getAppContext().getString(R.string.content_immersiveon), Toast.LENGTH_SHORT).show();
}
else{
menu.getMenuItems().get(id).setImgDrawable(ReaderApp.getAppContext().getResources().getDrawable(R.drawable.full));
Helper.showSystemUI(BlogContentActivity.this, uiOptions);
Toast.makeText(BlogContentActivity.this, ReaderApp.getAppContext().getString(R.string.content_immersiveoff), Toast.LENGTH_SHORT).show();
}
new Thread(){
public void run(){
ReaderApp.getSettings().FullScreen = !ReaderApp.getSettings().FullScreen;
Editor e = PreferenceManager.getDefaultSharedPreferences(ReaderApp.getAppContext()).edit();
e.putBoolean("view_fullscreen", ReaderApp.getSettings().FullScreen).commit();
ReaderApp.saveSettings();
}
}.start();
break;
case 5:
if(readSetting.getVisibility() == View.GONE){
readSetting.setVisibility(View.VISIBLE);
menu.setVisibility(View.GONE);
}
else{
readSetting.setVisibility(View.GONE);
menu.setVisibility(View.VISIBLE);
}
break;
}
}
});
}
private void initProgressDialog(boolean isShowDialog){
if(ReaderApp.getSettings().Theme == Theme.Dark)
mProgressDialog = new ProgressDialog(BlogContentActivity.this, R.style.DialogDarkTheme);
if(ReaderApp.getSettings().Theme == Theme.Light)
mProgressDialog = new ProgressDialog(BlogContentActivity.this, R.style.DialogLightTheme);
if(ReaderApp.getSettings().Theme == Theme.Default)
mProgressDialog = new ProgressDialog(BlogContentActivity.this);
mProgressDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
mProgressDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.setIcon(R.id.process);
mProgressDialog.setMessage(BlogContentActivity.this.getResources().getString(R.string.content_loading) + "...");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.setIndeterminateDrawable(BlogContentActivity.this.getResources().getDrawable(drawable.spinner));
if(isShowDialog)
mProgressDialog.show();
mProgressDialog.getWindow().getDecorView().setSystemUiVisibility(BlogContentActivity.this.getWindow().getDecorView().getSystemUiVisibility());
//Clear the not focusable flag from the window
mProgressDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
}
@Override
public void onPause(){
super.onPause();
if(immersiveMode){
immersiveMode = false;
Helper.showSystemUI(BlogContentActivity.this, uiOptions);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable(CURRENT, current);
outState.putSerializable(CHANNEL, channel);
outState.putSerializable(ARG_TAB_ID, from);
outState.putSerializable(UI_OPTIONS, uiOptions);
}
public void onNewIntent(Intent intent){
super.onNewIntent(intent);
setIntent(intent);
processExtraData(intent.getExtras());
}
private void processExtraData(Bundle savedInstanceState){
mEvernoteSession = EvernoteSession.getInstance(this, "redelva", "453e8a5fdee809be", EVERNOTE_SERVICE);
ShareSDK.initSDK(this);
Blogs = new ArrayList<Blog>();
loadEvent = new ManualResetEvent(false);
jsEvent = new ManualResetEvent(false);
}
private Handler myHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
String Content = "";
if(msg.obj instanceof String)
Content = (String)msg.obj;
CacheEventArgs cacheArgs = null;
String title = "";
if(msg.obj instanceof CacheEventArgs){
cacheArgs = (CacheEventArgs)msg.obj;
title = msg.getData().getString("title");
}
//WebView view = null;
//TextView blogTitle = null;
if(browser != null){
switch(msg.what){
case CONTENT:
case DESC:
Log.i("RssReader", "Render content in js");
//check current blog is still the parsed blog
if(cacheArgs != null && cacheArgs.Blog.BlogId != current.BlogId)
return;
if(Content.length() != 0)
browser.loadUrl("javascript: LoadContent('" + HtmlHelper.trim(Content) + "','','" + (msg.what == CONTENT ? "content" : "description") + "')");
else
browser.loadUrl("javascript: LoadError('" + ReaderApp.getAppContext().getResources().getString(R.string.content_errortitle) + "','" +
ReaderApp.getAppContext().getResources().getString(R.string.content_errorcontent) + "','" +
ReaderApp.getAppContext().getResources().getString(R.string.content_errorload) + "','" +
(msg.what == CONTENT ? "content" : "description") + "')");
blogTitle.setText(current.Title);
//((BlogContentActivity)getActivity()).Title.setText(current.Title);
jsEvent.set();
break;
case FLASH:
if(cacheArgs != null && cacheArgs.Blog.BlogId == current.BlogId){
if (cacheArgs.Total != -1)
browser.loadUrl("javascript: replaceFlash('" + String.valueOf(cacheArgs.CompleteIndex) + "','" + cacheArgs.Cache.html().replace("'", "\"") + "','" + (ReaderApp.getAppContext().getResources().getString(R.string.blog_clicktoview) + " " + title.replace("'", "\"")) + "','True')");
else
browser.loadUrl("javascript: replaceFlash('" + String.valueOf(cacheArgs.CompleteIndex) + "','" + cacheArgs.Cache.html().replace("'", "\"") + "','" + title.replace("'", "\"") + "','True')");
}
break;
case SHARE:
OnekeyShare oks = (OnekeyShare)msg.obj;
oks.show(BlogContentActivity.this);
break;
case SHAKE:
Animation shake = AnimationUtils.loadAnimation(BlogContentActivity.this, R.anim.shake);
menu.startAnimation(shake);
break;
}
markAsRead(current);
}
}
};
public Blog GetNext(Blog b){
String keyword = "";
if(getIntent().getExtras() != null && getIntent().getExtras().containsKey(KEYWORD))
keyword = getIntent().getExtras().getString(KEYWORD);
BlogDalHelper helper = new BlogDalHelper();
Blog t = helper.FindBlogBy(from, keyword,channel, b, false);
helper.Close();
return t;
}
public Blog GetPrevious(Blog b){
String keyword = "";
if(getIntent().getExtras() != null && getIntent().getExtras().containsKey(KEYWORD))
keyword = getIntent().getExtras().getString(KEYWORD);
BlogDalHelper helper = new BlogDalHelper();
Blog t = helper.FindBlogBy(from, keyword, channel, b, true);
helper.Close();
return t;
}
private void markAsRead(final Blog b){
// read from setting before mark as read
if(ReaderApp.getSettings().MarkAsReadWhenView){
if(!b.IsRead){
b.IsRead = true;
Count++;
int index = Blogs.indexOf(b);
if(index == -1)
Blogs.add(b);
else
Blogs.get(index).IsRead = true;
//markTag(b, RssAction.AsRead);
BlogDalHelper helper = new BlogDalHelper();
helper.MarkAsRead(b.BlogId, b.IsRead);
helper.Close();
}
}
}
@Override
public void onStop(){
if(Blogs != null && Blogs.size() > 0){
final List<String> blogIDs = new ArrayList<String>();
for(Blog b : Blogs){
blogIDs.add(b.BlogId);
}
final FeedlyParser feedly = new FeedlyParser();
feedly.batchMarkTag(blogIDs, RssAction.AsRead, new HttpResponseHandler(){
@Override
public <RssAction> void onCallback(RssAction action, boolean result, String msg){
if(!result){
Log.i("RssReader", msg);
SyncStateDalHelper helper = new SyncStateDalHelper();
List<SyncState> states = new ArrayList<SyncState>();
for(Blog b : Blogs){
SyncState s = new SyncState();
s.BlogOriginId = b.BlogId;
s.Status = (com.lgq.rssreader.enums.RssAction) action;
s.TimeStamp = new Date();
states.add(s);
}
helper.SynchronyData2DB(states);
helper.Close();
}
}
});
}
super.onStop();
}
public void ShareEvernote(){
NotificationHelper.showNotification(2000, getResources().getString(R.string.sharing));
final Note note = new Note();
note.setTitle(current.Title);
note.setContent(EvernoteUtil.NOTE_PREFIX + HtmlHelper.ConvertHtmlToEnml(current.Content != null ? current.Content : current.Description) + EvernoteUtil.NOTE_SUFFIX);
try {
mEvernoteSession.getClientFactory().createNoteStoreClient().listNotebooks(new OnClientCallback<List<Notebook>>(){
@Override
public void onSuccess(List<Notebook> data) {
String rssreader = null;
for(Notebook book : data){
if(book.getName().toLowerCase().equals(ReaderApp.getAppContext().getResources().getString(R.string.app_name).toLowerCase())){
rssreader = book.getGuid();
break;
}
}
if(rssreader == null){
Notebook notebook = new Notebook();
notebook.setName(getResources().getString(R.string.app_name));
try {
mEvernoteSession.getClientFactory().createNoteStoreClient().createNotebook(notebook, new OnClientCallback<Notebook>() {
@Override
public void onSuccess(Notebook data) {
try {
note.setNotebookGuid(data.getGuid());
mEvernoteSession.getClientFactory().createNoteStoreClient().createNote(note, new OnClientCallback<Note>() {
@Override
public void onSuccess(Note data) {
NotificationHelper.showNotification(2000, ReaderApp.getAppContext().getResources().getString(R.string.share_completed));
}
@Override
public void onException(Exception exception) {
Log.e("RssReader", "Error saving note", exception);
NotificationHelper.showNotification(2000, ReaderApp.getAppContext().getResources().getString(R.string.share_failed));
}
});
} catch (TTransportException e) {
Log.e("RssReader", "Error saving note", e);
NotificationHelper.showNotification(2000, ReaderApp.getAppContext().getResources().getString(R.string.share_failed));
}
}
@Override
public void onException(Exception exception) {
Log.e("RssReader", "Error saving note", exception);
NotificationHelper.showNotification(2000, ReaderApp.getAppContext().getResources().getString(R.string.share_failed));
}
});
} catch (TTransportException e) {
Log.e("RssReader", "Error creating notebook", e);
NotificationHelper.showNotification(2000, ReaderApp.getAppContext().getResources().getString(R.string.share_failed));
}
}else{
try {
note.setNotebookGuid(rssreader);
mEvernoteSession.getClientFactory().createNoteStoreClient().createNote(note, new OnClientCallback<Note>() {
@Override
public void onSuccess(Note data) {
NotificationHelper.showNotification(2000, ReaderApp.getAppContext().getResources().getString(R.string.share_completed));
}
@Override
public void onException(Exception exception) {
Log.e("RssReader", "Error saving note", exception);
NotificationHelper.showNotification(2000, ReaderApp.getAppContext().getResources().getString(R.string.share_failed));
}
});
} catch (TTransportException e) {
Log.e("RssReader", "Error share note", e);
NotificationHelper.showNotification(2000, ReaderApp.getAppContext().getResources().getString(R.string.share_failed));
}
}
}
@Override
public void onException(Exception exception) {
Log.e("RssReader", "Error loading notebook", exception);
NotificationHelper.showNotification(2000, ReaderApp.getAppContext().getResources().getString(R.string.share_failed));
}});
} catch (TTransportException exception) {
Log.e("RssReader", "Error creating notestore", exception);
//Toast.makeText(ReaderApp.getAppContext(), R.string.share_failed, Toast.LENGTH_LONG).show();
NotificationHelper.showNotification(2000, ReaderApp.getAppContext().getResources().getString(R.string.share_failed));
}catch(Exception e){
Log.e("RssReader", "Error creating notestore", e);
//Toast.makeText(ReaderApp.getAppContext(), R.string.share_failed, Toast.LENGTH_LONG).show();
NotificationHelper.showNotification(2000, ReaderApp.getAppContext().getResources().getString(R.string.share_failed));
}
}
private void markTag(final Blog b, RssAction action){
final FeedlyParser feedly = new FeedlyParser();
feedly.markTag(b, action, new HttpResponseHandler(){
@Override
public <T> void onCallback(T action, boolean result, String msg){
if(!result){
Log.i("RssReader", msg);
Toast.makeText(BlogContentActivity.this, msg, Toast.LENGTH_SHORT).show();
SyncStateDalHelper helper = new SyncStateDalHelper();
List<SyncState> states = new ArrayList<SyncState>();
SyncState s = new SyncState();
s.BlogOriginId = b.BlogId;
s.Status = (com.lgq.rssreader.enums.RssAction) action;
s.TimeStamp = new Date();
states.add(s);
helper.SynchronyData2DB(states);
helper.Close();
}
}
});
}
@Override
public void onDestroy(){
ShareSDK.stopSDK(this);
super.onDestroy();
}
int oldEv = MotionEvent.ACTION_CANCEL;
private String displayEvent(MotionEvent ev){
int events[] = {MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE,
MotionEvent.ACTION_UP, MotionEvent.ACTION_MOVE, MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_OUTSIDE,
MotionEvent.ACTION_POINTER_DOWN,MotionEvent.ACTION_POINTER_UP,
MotionEvent.EDGE_TOP,MotionEvent.EDGE_BOTTOM,MotionEvent.EDGE_LEFT,MotionEvent.EDGE_RIGHT};
String szEvents[]={"ACTION_DOWN", "ACTION_MOVE",
"ACTION_UP", "ACTION_MOVE", "ACTION_CANCEL", "ACTION_OUTSIDE",
"ACTION_POINTER_DOWN","ACTION_POINTER_UP",
"EDGE_TOP","EDGE_BOTTOM","EDGE_LEFT","EDGE_RIGHT"};
for(int i=0; i < events.length; i++)
{
if(events[i] == ev.getAction())
{
if(oldEv != ev.getAction())
{
//Log.i("RssReader", szEvents[i]);
oldEv = ev.getAction();
return szEvents[i];
}
break;
}
}
return "";
}
private ArrayList<GestureOnTouchListener> onTouchListeners = new ArrayList<GestureOnTouchListener>(10);
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
for (GestureOnTouchListener listener : onTouchListeners) {
listener.onTouch(ev);
}
//displayEvent(ev);
return super.dispatchTouchEvent(ev);
}
public void registerGestureOnTouchListener(GestureOnTouchListener listener){
onTouchListeners.add(listener);
}
public interface GestureOnTouchListener {
public void onTouch(MotionEvent ev);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK ) {
if(getMenu() != null && getMenu().getVisibility() == View.GONE){
getMenu().setVisibility(View.VISIBLE);
getReadSetting().setVisibility(View.GONE);
return true;
}
else{
Intent intent = new Intent();
Gson g = new Gson();
StringBuilder sb = new StringBuilder();
for(Blog b : Blogs){
sb.append(g.toJson(b) + "____");
}
intent.putExtra("Blogs", sb.toString());
intent.putExtra("Count", Count);
intent.putExtra("requestCode", 0);
this.setResult(Activity.RESULT_OK, intent);
}
}
if (keyCode == KeyEvent.KEYCODE_MENU ) {
if(getMenu() != null && getMenu().getVisibility() == View.VISIBLE){
getMenu().toggle();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
/**
* Called when the control returns from an activity that we launched.
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
//Update UI when oauth activity returns result
case EvernoteSession.REQUEST_CODE_OAUTH:
if (resultCode == Activity.RESULT_OK) {
ShareEvernote();
}
break;
}
}
}