package com.forfan.bigbang.component.activity;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.annotation.NonNull;
import android.support.v4.widget.ContentLoadingProgressBar;
import android.support.v7.widget.CardView;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewStub;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.forfan.bigbang.R;
import com.forfan.bigbang.component.base.BaseActivity;
import com.forfan.bigbang.network.RetrofitHelper;
import com.forfan.bigbang.onestep.AppsAdapter;
import com.forfan.bigbang.onestep.ResolveInfoWrap;
import com.forfan.bigbang.util.ClipboardUtils;
import com.forfan.bigbang.util.ColorUtil;
import com.forfan.bigbang.util.ConstantUtil;
import com.forfan.bigbang.util.LogUtil;
import com.forfan.bigbang.util.RegexUtil;
import com.forfan.bigbang.util.SearchEngineUtil;
import com.forfan.bigbang.util.SharedIntentHelper;
import com.forfan.bigbang.util.ToastUtil;
import com.forfan.bigbang.util.UrlCountUtil;
import com.forfan.bigbang.util.ViewUtil;
import com.forfan.bigbang.view.BigBangLayout;
import com.forfan.bigbang.view.BigBangLayoutWrapper;
import com.shang.commonjar.contentProvider.SPHelper;
import com.umeng.onlineconfig.OnlineConfigAgent;
import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView;
import com.yanzhenjie.recyclerview.swipe.touch.OnItemMoveListener;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* Created by penglu on 2016/10/27.
*/
public class BigBangActivity extends BaseActivity {
public static final String TO_SPLIT_STR = "to_split_str";
private BigBangLayout bigBangLayout;
private BigBangLayoutWrapper bigBangLayoutWrapper;
private ContentLoadingProgressBar loading;
private boolean remainSymbol = true;
private EditText toTrans;
private EditText transResult;
private RelativeLayout transRl;
private String originString;
private List<String> netWordSegments;
int alpha;
int lastPickedColor;
private SwipeMenuRecyclerView mAppsRecyclerView;
private View mAppsRecyclerViewLL;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
private void init() {
OnlineConfigAgent.getInstance().updateOnlineConfig(getApplicationContext());
boolean fullScreen = SPHelper.getBoolean(ConstantUtil.IS_FULL_SCREEN, false);
boolean stickHeader = SPHelper.getBoolean(ConstantUtil.IS_STICK_HEADER, false);
alpha = SPHelper.getInt(ConstantUtil.BIGBANG_ALPHA, 100);
lastPickedColor = SPHelper.getInt(ConstantUtil.BIGBANG_DIY_BG_COLOR, Color.parseColor("#94a4bb"));
int value = (int) ((alpha / 100.0f) * 255);
RegexUtil.refreshSymbolSelection();
if (fullScreen) {
setTheme(R.style.PreSettingTheme);
setContentView(R.layout.activity_big_bang);
getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.bigbang_activity_window_full));
getWindow().getDecorView().setBackgroundColor(Color.argb(value, Color.red(lastPickedColor), Color.green(lastPickedColor), Color.blue(lastPickedColor)));
showAppList4OneStep();
} else {
CardView cardView = new CardView(this);
View view = LayoutInflater.from(this).inflate(R.layout.activity_big_bang, null, false);
cardView.setRadius(ViewUtil.dp2px(10));
cardView.setCardBackgroundColor(Color.argb(value, Color.red(lastPickedColor), Color.green(lastPickedColor), Color.blue(lastPickedColor)));
cardView.addView(view);
getWindow().getDecorView().setBackgroundColor(getResources().getColor(R.color.trans));
setContentView(cardView);
}
// CardView cardView = new CardView(this);
// View view = LayoutInflater.from(this).inflate(R.layout.activity_big_bang, null, false);
// cardView.setRadius(ViewUtil.dp2px(10));
//
// int value = (int) ((alpha / 100.0f) * 255);
// cardView.setCardBackgroundColor(Color.argb(value, Color.red(lastPickedColor), Color.green(lastPickedColor), Color.blue(lastPickedColor)));
// cardView.addView(view);
//
// getWindow().getDecorView().setBackgroundColor(getResources().getColor(R.color.trans));
// setContentView(cardView);
Intent intent = getIntent();
String str =null;
try {
str = intent.getStringExtra(TO_SPLIT_STR);
} catch (Throwable e) {
e.printStackTrace();
}
if (TextUtils.isEmpty(str)) {
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
str = sharedText;
}
}
}
if (TextUtils.isEmpty(str)) {
finish();
return;
}
mSelectText = str;
str = str.replaceAll("@", " @ ");
remainSymbol = SPHelper.getBoolean(ConstantUtil.REMAIN_SYMBOL, true);
int text = SPHelper.getInt(ConstantUtil.TEXT_SIZE, ConstantUtil.DEFAULT_TEXT_SIZE);
int line = SPHelper.getInt(ConstantUtil.LINE_MARGIN, ConstantUtil.DEFAULT_LINE_MARGIN);
int item = SPHelper.getInt(ConstantUtil.ITEM_MARGIN, ConstantUtil.DEFAULT_ITEM_MARGIN);
int padding = SPHelper.getInt(ConstantUtil.ITEM_PADDING, (int) ViewUtil.dp2px(ConstantUtil.DEFAULT_ITEM_PADDING));
bigBangLayout = (BigBangLayout) findViewById(R.id.bigbang);
loading = (ContentLoadingProgressBar) findViewById(R.id.loading);
bigBangLayoutWrapper = (BigBangLayoutWrapper) findViewById(R.id.bigbang_wrap);
loading.show();
bigBangLayout.reset();
bigBangLayoutWrapper.setVisibility(View.GONE);
if (fullScreen) {
bigBangLayoutWrapper.setFullScreenMode(true);
}
bigBangLayoutWrapper.setStickHeader(stickHeader);
bigBangLayout.setTextSize(text);
bigBangLayout.setLineSpace(line);
bigBangLayout.setItemSpace(item);
bigBangLayout.setTextPadding(padding);
// bigBangLayoutWrapper.setBackgroundColorWithAlpha(lastPickedColor, alpha);
// if (!remainSymbol){
// str = str.replaceAll("[,\\./:\"\\\\\\[\\]\\|`~!@#\\$%\\^&\\*\\(\\)_\\+=<->\\?;',。、;:‘’“”【】《》?\\{\\}!¥…()—=]","");
// }
bigBangLayoutWrapper.setShowSymbol(remainSymbol);
bigBangLayoutWrapper.setShowSection(SPHelper.getBoolean(ConstantUtil.REMAIN_SECTION, false));
originString = str;
String finalStr = str;
bigBangLayoutWrapper.setActionListener(bigBangActionListener);
bigBangLayoutWrapper.onSwitchType(SPHelper.getBoolean(ConstantUtil.DEFAULT_LOCAL, false));
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
netWordSegments = null;
originString=null;
init();
}
private void showAppList4OneStep() {
mAppsRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.app_list);
mAppsRecyclerViewLL = findViewById(R.id.app_list_ll);
if (SPHelper.getBoolean(ConstantUtil.IS_STICK_SHAREBAR, true)) {
mAppsRecyclerViewLL.setVisibility(View.VISIBLE);
mAppsRecyclerView.setLayoutManager(new LinearLayoutManager(this));
List<ResolveInfoWrap> addedItems = SharedIntentHelper.listFilterIntents(this);
mAppsRecyclerView.setHasFixedSize(true);// 如果Item够简单,高度是确定的,打开FixSize将提高性能。
mAppsRecyclerView.setItemAnimator(new DefaultItemAnimator());// 设置Item默认动画,加也行,不加也行。
AppsAdapter appsAdapter = new AppsAdapter(this);
appsAdapter.setItems(addedItems);
appsAdapter.setOnItemClickListener(new AppsAdapter.OnItemClickListener() {
@Override
public void onItemClicked(ResolveInfoWrap item) {
if (!TextUtils.isEmpty(mSelectText)) {
try {
SharedIntentHelper.share(BigBangActivity.this, item, mSelectText);
} catch (Exception e) {
e.printStackTrace();
}
} else {
ToastUtil.show("请选择文字");
}
}
});
mAppsRecyclerView.setLongPressDragEnabled(true);// 开启拖拽,就这么简单一句话。
mAppsRecyclerView.setOnItemMoveListener(new OnItemMoveListener() {
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
// 当Item被拖拽的时候。
Collections.swap(addedItems, fromPosition, toPosition);
appsAdapter.notifyItemMoved(fromPosition,toPosition);
SharedIntentHelper.saveShareAppIndexs2Sp(addedItems,BigBangActivity.this);
return true;// 返回true表示处理了,返回false表示你没有处理。
}
@Override
public void onItemDismiss(int position) {
}
});
mAppsRecyclerView.setAdapter(appsAdapter);
} else {
mAppsRecyclerViewLL.setVisibility(View.GONE);
}
}
private void getSegment(String str) {
RetrofitHelper.getWordSegmentService()
.getWordSegsList(str)
.compose(this.bindToLifecycle())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.timeout(5000, TimeUnit.MILLISECONDS)
.subscribe(recommendInfo -> {
LogUtil.d(recommendInfo.toString());
List<String> txts = recommendInfo.get(0).getWord();
netWordSegments = txts;
bigBangLayout.reset();
for (String t : txts) {
bigBangLayout.addTextItem(t);
}
loading.hide();
bigBangLayoutWrapper.setVisibility(View.VISIBLE);
if (!SPHelper.getBoolean(ConstantUtil.HAD_SHOW_LONG_PRESS_TOAST,false)){
ToastUtil.show(R.string.bb_long_press_toast);
SPHelper.save(ConstantUtil.HAD_SHOW_LONG_PRESS_TOAST,true);
}
}, throwable -> {
runOnUiThread(new Runnable() {
@Override
public void run() {
LogUtil.d(throwable.toString());
ToastUtil.show(R.string.no_internet_for_fenci);
// List<String> txts= new ArrayList<String>();
// for(int index = 0; index < finalStr.length() ; index++){
// txts.add(finalStr.charAt(index)+"");
// }
// for (String t:txts) {
// bigBangLayout.addTextItem(t);
// }
// loading.hide();
// bigBangLayoutWrapper.setBottomVibility(View.VISIBLE);
bigBangLayoutWrapper.onSwitchType(true);
}
});
});
}
private String mSelectText;
BigBangLayoutWrapper.ActionListener bigBangActionListener = new BigBangLayoutWrapper.ActionListener() {
@Override
public void onSelected(String text) {
mSelectText = text;
}
@Override
public void onSearch(String text) {
if (TextUtils.isEmpty(text)) {
text = originString;
}
UrlCountUtil.onEvent(UrlCountUtil.CLICK_BIGBANG_SEARCH);
boolean isUrl = false;
Uri uri = null;
try {
// Pattern p = Pattern.compile("^(http|www|ftp|)?(://)?(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*((:\\d+)?)(/(\\w+(-\\w+)*))*(\\.?(\\w)*)(\\?)?(((\\w*%)*(\\w*\\?)*(\\w*:)*(\\w*\\+)*(\\w*\\.)*(\\w*&)*(\\w*-)*(\\w*=)*(\\w*%)*(\\w*\\?)*(\\w*:)*(\\w*\\+)*(\\w*\\.)*(\\w*&)*(\\w*-)*(\\w*=)*)*(\\w*)*)$", Pattern.CASE_INSENSITIVE );
Pattern p = Pattern.compile("^((https?|ftp|news):\\/\\/)?([a-z]([a-z0-9\\-]*[\\.。])+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\\/[a-z0-9_\\-\\.~]+)*(\\/([a-z0-9_\\-\\.]*)(\\?[a-z0-9+_\\-\\.%=&]*)?)?(#[a-z][a-z0-9_]*)?$", Pattern.CASE_INSENSITIVE);
Matcher matcher = p.matcher(text);
if (!matcher.matches()) {
uri = Uri.parse(SearchEngineUtil.getInstance().getSearchEngines().get(SPHelper.getInt(ConstantUtil.BROWSER_SELECTION,0)).url + URLEncoder.encode(text, "utf-8"));
isUrl = false;
} else {
uri = Uri.parse(text);
if (!text.startsWith("http"))
text = "http://" + text;
isUrl = true;
}
boolean t = SPHelper.getBoolean(ConstantUtil.USE_LOCAL_WEBVIEW, true);
Intent intent;
if (t) {
intent = new Intent();
if (isUrl) {
intent.putExtra("url", text);
} else {
intent.putExtra("query", text);
}
intent.setClass(BigBangActivity.this, WebActivity.class);
startActivity(intent);
} else {
intent = new Intent(Intent.ACTION_VIEW, uri);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
}
} catch (Exception e) {
e.printStackTrace();
Intent intent = new Intent();
if (isUrl) {
intent.putExtra("url", text);
} else {
intent.putExtra("query", text);
}
intent.setClass(BigBangActivity.this, WebActivity.class);
startActivity(intent);
}
}
@Override
public void onShare(String text) {
if (TextUtils.isEmpty(text)) {
text = originString;
}
UrlCountUtil.onEvent(UrlCountUtil.CLICK_BIGBANG_SHARAE);
// Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
// sharingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// sharingIntent.setType("text/plain");
// sharingIntent.putExtra(Intent.EXTRA_TEXT, text);
SharedIntentHelper.sendShareIntent(BigBangActivity.this, text);
// finish();
}
@Override
public void onCopy(String text) {
if (TextUtils.isEmpty(text)) {
text = originString;
}
UrlCountUtil.onEvent(UrlCountUtil.CLICK_BIGBANG_COPY);
Intent intent = new Intent(ConstantUtil.BROADCAST_SET_TO_CLIPBOARD);
intent.putExtra(ConstantUtil.BROADCAST_SET_TO_CLIPBOARD_MSG, text);
sendBroadcast(intent);
String finalText = text;
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
ClipboardUtils.setText(getApplicationContext(), finalText);
ToastUtil.show("已复制");
finish();
}
}, 100);
}
@Override
public void onTrans(String text) {
if (mAppsRecyclerView != null)
mAppsRecyclerViewLL.setVisibility(View.GONE);
if (TextUtils.isEmpty(text)) {
text = originString;
}
UrlCountUtil.onEvent(UrlCountUtil.CLICK_BIGBANG_TRANSLATE);
// loading.show();
if (transRl == null) {
ViewStub viewStub = (ViewStub) findViewById(R.id.trans_view_stub);
viewStub.inflate();
transRl = (RelativeLayout) findViewById(R.id.trans_rl);
toTrans = (EditText) findViewById(R.id.to_translate);
transResult = (EditText) findViewById(R.id.translate_result);
TextView title = (TextView) findViewById(R.id.title);
title.setTextColor(ColorUtil.getPropertyTextColor(lastPickedColor,alpha));
toTrans.setTextColor(ColorUtil.getPropertyTextColor(lastPickedColor,alpha));
transResult.setTextColor(ColorUtil.getPropertyTextColor(lastPickedColor,alpha));
findViewById(R.id.trans_again).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!TextUtils.isEmpty(toTrans.getText())) {
translate(toTrans.getText().toString());
}
ViewUtil.hideInputMethod(toTrans);
}
});
}
translate(text);
}
@Override
public void onDrag() {
UrlCountUtil.onEvent(UrlCountUtil.CLICK_BIGBANG_DRAG);
}
@Override
public void onSwitchType(boolean isLocal) {
showSegment(isLocal);
}
@Override
public void onSwitchSymbol(boolean isShow) {
SPHelper.save(ConstantUtil.REMAIN_SYMBOL, isShow);
UrlCountUtil.onEvent(UrlCountUtil.CLICK_BIGBANG_REMAIN_SYMBOL);
}
@Override
public void onSwitchSection(boolean isShow) {
SPHelper.save(ConstantUtil.REMAIN_SECTION, isShow);
UrlCountUtil.onEvent(UrlCountUtil.CLICK_BIGBANG_REMAIN_SECTION);
}
@Override
public void onDragSelection() {
UrlCountUtil.onEvent(UrlCountUtil.CLICK_BIGBANG_DRAG_SELECTION);
}
};
private void showSegment(boolean isLocal) {
loading.show();
UrlCountUtil.onEvent(UrlCountUtil.CLICK_BIGBANG_SWITCH_TYPE);
bigBangLayout.reset();
if (!isLocal) {
if (netWordSegments == null) {
getSegment(originString);
} else {
for (String t : netWordSegments) {
bigBangLayout.addTextItem(t);
}
loading.hide();
bigBangLayoutWrapper.setVisibility(View.VISIBLE);
}
} else {
List<String> txts = getLocalSegments(originString);
for (String t : txts) {
bigBangLayout.addTextItem(t);
}
loading.hide();
bigBangLayoutWrapper.setVisibility(View.VISIBLE);
}
}
private static final String DEVIDER="__DEVIDER___DEVIDER__";
@NonNull
private List<String> getLocalSegments(String str) {
List<String> txts = new ArrayList<String>();
String s = "";
for (int i = 0; i < str.length(); i++) {
char first = str.charAt(i);
//当到达末尾的时候
if (i + 1 >= str.length()) {
s = s + first;
break;
}
char next = str.charAt(i + 1);
if ((RegexUtil.isChinese(first) && !RegexUtil.isChinese(next)) || (!RegexUtil.isChinese(first) && RegexUtil.isChinese(next)) ||
(Character.isLetter(first) && !Character.isLetter(next)) || (Character.isDigit(first) && !Character.isDigit(next))) {
s = s + first + DEVIDER;
} else if (RegexUtil.isSymbol(first)) {
s = s + DEVIDER + first + DEVIDER;
} else {
s = s + first;
}
}
str = s;
str.replace("\n", DEVIDER+"\n"+DEVIDER);
String[] texts = str.split(DEVIDER);
for (String text : texts) {
if (text.equals(DEVIDER))
continue;
//当首字母是英文字母时,默认该字符为英文
if (RegexUtil.isEnglish(text)) {
txts.add(text);
continue;
}
if (RegexUtil.isNumber(text)) {
txts.add(text);
continue;
}
for (int i = 0; i < text.length(); i++) {
txts.add(text.charAt(i) + "");
}
}
return txts;
}
private void translate(String text) {
if (TextUtils.isEmpty(text)) {
transResult.setText("");
return;
}
bigBangLayoutWrapper.setVisibility(View.GONE);
transRl.setVisibility(View.VISIBLE);
toTrans.setText(text);
toTrans.setSelection(text.length());
transResult.setText("正在翻译");
RetrofitHelper.getTranslationService()
.getTranslationItem(text.replaceAll("\n", ""))
.compose(BigBangActivity.this.bindToLifecycle())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(recommendInfo -> {
List<String> transes = recommendInfo.getTranslation();
if (transes.size() > 0) {
String trans = transes.get(0);
transResult.setText(trans);
}
LogUtil.d(recommendInfo.toString());
}, throwable -> {
LogUtil.d(throwable.toString());
});
}
@Override
public void onBackPressed() {
if (bigBangLayoutWrapper != null && bigBangLayoutWrapper.getVisibility() == View.GONE) {
boolean stickSharebar = SPHelper.getBoolean(ConstantUtil.IS_STICK_SHAREBAR, false);
if (mAppsRecyclerViewLL != null)
mAppsRecyclerViewLL.setVisibility(stickSharebar ? View.VISIBLE : View.GONE);
bigBangLayoutWrapper.setVisibility(View.VISIBLE);
if (transRl != null) {
transRl.setVisibility(View.GONE);
}
} else {
super.onBackPressed();
}
}
}