Commit c52dd29f authored by fallenstardust's avatar fallenstardust

整理

parent 204a7f8d
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" >
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type="text/css">
pre {color: #01fcf3; padding: 0.2em; white-space: pre-wrap; }
</style>
</head>
<body style="font-family: Droid Sans;background-color:transparent;">
......@@ -16,7 +17,16 @@
特别感谢: 菜菜,尸体,废话多,大毛,龙道香姐,晓L,幻兽L 的支持与努力.
</pre>
<ul>
<li style="color:#ffff00">3.3.1</li>
<li style="color:#ffff00">3.3.2</li>
</ul>
<pre>
更新:
1.更新ygo内核;
优化:
1.启动ygo时增加tips
</pre>
<ul>
<li style="color:#ffffff">3.3.1</li>
</ul>
<pre>
更新:
......@@ -179,14 +189,14 @@
3.残局录像中一些连锁中出现的闪退问题.
</pre>
<ul>
<li style="color:#ffffff">3.1.2</li>
<li style="color:#ffffff">3.1.2</li>
</ul>
<pre>
更新:
1.更新ygo内核;
2.更新LEDD+17PR+YS+YA新卡;
</pre>
<li style="color:#ffffff">3.1.1</li>
<li style="color:#ffffff">3.1.1</li>
</ul>
<pre>
更新:
......
......@@ -18,7 +18,7 @@ public class App extends GameApplication {
@Override
public NativeInitOptions getNativeInitOptions() {
NativeInitOptions options= AppsSettings.get().getNativeInitOptions();
NativeInitOptions options = AppsSettings.get().getNativeInitOptions();
return options;
}
......@@ -88,23 +88,26 @@ public class App extends GameApplication {
public boolean canNdkCash() {
return false;
}
@Override
public boolean isImmerSiveMode() {
return AppsSettings.get().isImmerSiveMode();
}
public boolean isSensorRefresh(){
public boolean isSensorRefresh() {
return AppsSettings.get().isSensorRefresh();
}
@Override
public float getScreenHeight() {
return AppsSettings.get().getScreenHeight();
}
@Override
public void runWindbot(String args) {
public void runWindbot(String args) {
Intent intent = new Intent();
intent.putExtra("args", args);
intent.setAction("RUN_WINDBOT");
getBaseContext().sendBroadcast(intent);
}
}
}
......@@ -13,11 +13,9 @@ import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import cn.garymb.ygomobile.core.GameConfig;
import cn.garymb.ygomobile.ui.preference.PreferenceFragmentPlus;
import cn.garymb.ygomobile.utils.SystemUtils;
import ocgcore.handler.CardManager;
......@@ -35,7 +33,6 @@ import static cn.garymb.ygomobile.Constants.PREF_LOCK_SCREEN;
import static cn.garymb.ygomobile.Constants.PREF_ONLY_GAME;
import static cn.garymb.ygomobile.Constants.PREF_READ_EX;
import static cn.garymb.ygomobile.Constants.PREF_SENSOR_REFRESH;
import static cn.garymb.ygomobile.Constants.PREF_CHECK_UPDATE;
public class AppsSettings {
private static AppsSettings sAppsSettings;
......@@ -171,7 +168,7 @@ public class AppsSettings {
Arrays.sort(cdbs, (file, t1) -> {
return file.getName().compareTo(t1.getName());
});
}catch (Exception e){
} catch (Exception e) {
//
}
for (File file : cdbs) {
......
......@@ -59,7 +59,7 @@ public interface Constants {
String CORE_SKIN_PATH = "textures";
String CORE_SKIN_PENDULUM_PATH = CORE_SKIN_PATH + "/extra";
String CORE_DECK_PATH = "deck";
String CORE_EXPANSIONS ="expansions";
String CORE_EXPANSIONS = "expansions";
String CORE_SINGLE_PATH = "single";
String CORE_IMAGE_PATH = "pics";
String CORE_IMAGE_FIELD_PATH = "field";
......
......@@ -10,9 +10,9 @@ import android.widget.Toast;
import java.io.File;
import cn.garymb.ygodata.YGOGameOptions;
import cn.garymb.ygomobile.ui.cards.DeckManagerActivity;
import cn.garymb.ygomobile.bean.Deck;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.cards.DeckManagerActivity;
import static cn.garymb.ygomobile.Constants.ACTION_OPEN_DECK;
import static cn.garymb.ygomobile.Constants.ACTION_OPEN_GAME;
......@@ -54,7 +54,7 @@ public class GameUriManager {
Toast.makeText(getActivity(), R.string.start_game_error, Toast.LENGTH_SHORT).show();
activity.finish();
}
}else{
} else {
return false;
}
return true;
......
......@@ -3,16 +3,13 @@ package cn.garymb.ygomobile;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
......@@ -26,13 +23,9 @@ import java.io.File;
import java.util.HashMap;
import cn.garymb.ygodata.YGOGameOptions;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.YGOMobileActivity;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.plus.ViewTargetPlus;
import cn.garymb.ygomobile.utils.ComponentUtils;
import cn.garymb.ygomobile.utils.ToastUtil;
public class YGOStarter {
......@@ -117,7 +110,7 @@ public class YGOStarter {
}
activityShowInfo.oldRequestedOrientation = activity.getRequestedOrientation();
// Log.w("checker", "activityShowInfo.oldRequestedOrientation=" + activityShowInfo.oldRequestedOrientation);
if(activityShowInfo.oldRequestedOrientation == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED){
if (activityShowInfo.oldRequestedOrientation == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) {
activityShowInfo.oldRequestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
activityShowInfo.mRoot = activity.getWindow().getDecorView();
......@@ -161,13 +154,11 @@ public class YGOStarter {
if (System.currentTimeMillis() - lasttime >= 1000) {
lasttime = System.currentTimeMillis();
showLoadingBg(activity);
if(!ComponentUtils.isActivityRunning(activity, new ComponentName(activity, YGOMobileActivity.class))) {
if (!ComponentUtils.isActivityRunning(activity, new ComponentName(activity, YGOMobileActivity.class))) {
String[] tipsList = activity.getResources().getStringArray(R.array.tips);
int x=(int)(Math.random() * tipsList.length);
String tips=tipsList[x];
//Toast.makeText(activity, tips, Toast.LENGTH_LONG).show();
ToastUtil toastUtil=new ToastUtil();
toastUtil.Short(activity,tips).setToastColor(Color.RED,activity.getResources().getColor(R.color.colorAccent)).show();
int x = (int) (Math.random() * tipsList.length);
String tips = tipsList[x];
Toast.makeText(activity, tips, Toast.LENGTH_LONG).show();
}
Intent intent = new Intent(activity, YGOMobileActivity.class);
if (options != null) {
......
......@@ -161,21 +161,21 @@ public class Deck implements Parcelable {
}
public void addMain(Integer id) {
if(mainlist.size()>=Constants.DECK_MAIN_MAX){
if (mainlist.size() >= Constants.DECK_MAIN_MAX) {
return;
}
mainlist.add(id);
}
public void addExtra(Integer id) {
if(extraList.size()>=Constants.DECK_EXTRA_MAX){
if (extraList.size() >= Constants.DECK_EXTRA_MAX) {
return;
}
extraList.add(id);
}
public void addSide(Integer id) {
if(sideList.size()>=Constants.DECK_SIDE_MAX){
if (sideList.size() >= Constants.DECK_SIDE_MAX) {
return;
}
sideList.add(id);
......
......@@ -7,7 +7,7 @@ import java.util.List;
@XmlElement("servers")
public class ServerList {
@XmlElement("version")
private int vercode=0;
private int vercode = 0;
@XmlElement("server")
private List<ServerInfo> mServerInfoList;
......@@ -19,9 +19,9 @@ public class ServerList {
return vercode;
}
public ServerList(int version,List<ServerInfo> serverInfoList) {
public ServerList(int version, List<ServerInfo> serverInfoList) {
mServerInfoList = serverInfoList;
this.vercode =version;
this.vercode = version;
}
public List<ServerInfo> getServerInfoList() {
......
......@@ -3,14 +3,13 @@ package cn.garymb.ygomobile.ui.adapters;
import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
import android.view.View;
import android.view.ViewGroup;
import org.greenrobot.eventbus.EventBus;
import cn.garymb.ygomobile.bean.ServerInfo;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.bean.events.ServerInfoEvent;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.home.ServerInfoViewHolder;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
......@@ -42,9 +41,9 @@ public class ServerListAdapter extends BaseRecyclerAdapterPlus<ServerInfo, Serve
});
builder.show();
});
if(position==0){
if (position == 0) {
holder.iv_fond.setBackgroundResource(R.drawable.cube);
}else{
} else {
holder.iv_fond.setBackgroundResource(R.drawable.cube2);
}
bindMenu(holder, position);
......
......@@ -56,8 +56,9 @@ import cn.garymb.ygomobile.ui.plus.ServiceDuelAssistant;
import cn.garymb.ygomobile.ui.preference.SettingsActivity;
import cn.garymb.ygomobile.utils.AlipayPayUtils;
abstract class HomeActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener{
abstract class HomeActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener {
protected SwipeMenuRecyclerView mServerList;
long exitLasttime = 0;
private ServerListAdapter mServerListAdapter;
private ServerListManager mServerListManager;
......@@ -83,11 +84,11 @@ abstract class HomeActivity extends BaseActivity implements NavigationView.OnNav
initBoomMenuButton($(R.id.bmb));
AnimationShake();
//trpay
TrPay.getInstance(HomeActivity.this).initPaySdk("e1014da420ea4405898c01273d6731b6","YGOMobile");
TrPay.getInstance(HomeActivity.this).initPaySdk("e1014da420ea4405898c01273d6731b6", "YGOMobile");
//autoupadte checking
checkForceUpdateSilent();
//ServiceDuelAssistant
startService(new Intent(this,ServiceDuelAssistant.class));
startService(new Intent(this, ServiceDuelAssistant.class));
BtnJoinQQGroup();
}
......@@ -230,8 +231,6 @@ abstract class HomeActivity extends BaseActivity implements NavigationView.OnNav
return true;
}
long exitLasttime = 0;
@Override
public void onBackPressed() {
if (System.currentTimeMillis() - exitLasttime <= 3000) {
......@@ -378,17 +377,18 @@ abstract class HomeActivity extends BaseActivity implements NavigationView.OnNav
UpdateHelper.getInstance().autoUpdate(getPackageName(), false, intervalMillis);
}
public void AnimationShake(){
public void AnimationShake() {
Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);//加载动画资源文件
findViewById(R.id.cube).startAnimation(shake); //给组件播放动画效果
}
public void BtnJoinQQGroup() {
$(R.id.btn_join_qq_group).setOnClickListener((v) -> {
String key ="dRkD2L9QgYiYmQoqJUgkR4QUth9UhuT4";
String key = "dRkD2L9QgYiYmQoqJUgkR4QUth9UhuT4";
joinQQGroup(key);
});
}
public boolean joinQQGroup(String key) {
Intent intent = new Intent();
intent.setData(Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26k%3D" + key));
......
......@@ -20,7 +20,6 @@ import java.util.zip.ZipFile;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.loader.CardLoader;
import cn.garymb.ygomobile.ui.activities.BaseActivity;
......@@ -355,7 +354,7 @@ public class ImageUpdater implements DialogInterface.OnCancelListener {
}
String jpg = new File(picsPath, code + Constants.IMAGE_URL_EX).getAbsolutePath();
String jpgUrl = String.format(Constants.IMAGE_URL, code + "");
mCardStatus.add(new Item(jpgUrl, jpg,code, false));
mCardStatus.add(new Item(jpgUrl, jpg, code, false));
}
mCount = mCardStatus.size();
}
......
......@@ -120,11 +120,11 @@ public class ResCheckTask extends AsyncTask<Void, Integer, Integer> {
AppsSettings.get().setUseExtraCards(false);
}
}
/* if (needsUpdate) {
* if(AppsSettings.get().resetGameVersion() == 0){
* VUiKit.show(mContext, mContext.getString(R.string.reset_game_ver_fail));
* }
* }*/
/* if (needsUpdate) {
* if(AppsSettings.get().resetGameVersion() == 0){
* VUiKit.show(mContext, mContext.getString(R.string.reset_game_ver_fail));
* }
* }*/
//设置字体
new ConfigManager(mSettings.getSystemConfig()).setFontSize(mSettings.getFontSize());
// copyCoreConfig(new File(mSettings.getResourcePath(), GameSettings.CORE_CONFIG_PATH).getAbsolutePath());
......@@ -153,17 +153,17 @@ public class ResCheckTask extends AsyncTask<Void, Integer, Integer> {
}
setMessage(mContext.getString(R.string.check_things, mContext.getString(R.string.cards_cdb)));
copyCdbFile(needsUpdate);
if (IOUtils.hasAssets(mContext, getDatapath(Constants.CORE_PICS_ZIP))) {
setMessage(mContext.getString(R.string.check_things, mContext.getString(R.string.images)));
IOUtils.copyFilesFromAssets(mContext, getDatapath(Constants.CORE_PICS_ZIP),
resPath, needsUpdate);
}
if (IOUtils.hasAssets(mContext, getDatapath(Constants.CORE_PICS_ZIP))) {
setMessage(mContext.getString(R.string.check_things, mContext.getString(R.string.images)));
IOUtils.copyFilesFromAssets(mContext, getDatapath(Constants.CORE_PICS_ZIP),
resPath, needsUpdate);
}
//if (needsUpdate) {
File filesDir = mContext.getFilesDir();
IOUtils.copyFilesFromAssets(mContext, getDatapath(Constants.WINDBOT_PATH),
filesDir.getPath(), needsUpdate);
// }
File filesDir = mContext.getFilesDir();
IOUtils.copyFilesFromAssets(mContext, getDatapath(Constants.WINDBOT_PATH),
filesDir.getPath(), needsUpdate);
// }
if (needsUpdate) {
setMessage(mContext.getString(R.string.check_things, mContext.getString(R.string.ex_pack)));
......@@ -325,39 +325,41 @@ public class ResCheckTask extends AsyncTask<Void, Integer, Integer> {
void onResCheckFinished(int result, boolean isNewVersion);
}
public void checkWindbot(){
public void checkWindbot() {
Log.i("路径", mContext.getFilesDir().getPath());
Log.i("路径2", mSettings.getDataBasePath()+"/"+ DATABASE_NAME);
WindBot.initAndroid(mContext.getFilesDir().getPath(),mSettings.getDataBasePath()+"/"+ DATABASE_NAME);
Log.i("路径2", mSettings.getDataBasePath() + "/" + DATABASE_NAME);
WindBot.initAndroid(mContext.getFilesDir().getPath(), mSettings.getDataBasePath() + "/" + DATABASE_NAME);
ResCheckTask.MessageReceiver mReceiver = new ResCheckTask.MessageReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("RUN_WINDBOT");
mContext.registerReceiver(mReceiver, filter);
}
public class MessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("RUN_WINDBOT")) {
String args=intent.getStringExtra("args");
String args = intent.getStringExtra("args");
WindBot.runAndroid(args);
}
}
};
Handler han=new Handler(){
@Override
public void handleMessage(Message msg)
{
// TODO: Implement this method
super.handleMessage(msg);
switch(msg.what){
case 0:
checkWindbot();
break;
}
}
;
Handler han = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO: Implement this method
super.handleMessage(msg);
switch (msg.what) {
case 0:
checkWindbot();
break;
}
}
};
}
package cn.garymb.ygomobile.ui.home;
import android.app.Dialog;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
......@@ -100,7 +99,7 @@ public class ServerListManager {
public void showEditDialog(int position) {
final boolean isAdd = position < 0;
final DialogPlus dialog = new DialogPlus(getContext());
final DialogPlus dialog = new DialogPlus(getContext());
dialog.setContentView(R.layout.dialog_server_edit);
dialog.show();
ServerInfoViewHolder editViewHolder = new ServerInfoViewHolder(dialog.getContentView());
......
package cn.garymb.ygomobile.ui.plus;
import android.util.Log;
import com.tencent.smtt.export.external.interfaces.ConsoleMessage;
import com.tencent.smtt.sdk.WebChromeClient;
import cn.garymb.ygomobile.lite.BuildConfig;
public class DefWebChromeClient extends WebChromeClient {
/* @Override
public void onConsoleMessage(String message, int lineNumber, String sourceID) {
......
......@@ -23,7 +23,7 @@ import cn.garymb.ygomobile.ui.widget.WebViewPlus;
import static android.view.WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW;
public class DialogPlus extends Dialog {
public static final int TYPE_KEYGUARD = FIRST_SYSTEM_WINDOW+4;
public static final int TYPE_KEYGUARD = FIRST_SYSTEM_WINDOW + 4;
private Context context;
private LayoutInflater mLayoutInflater;
private View mView;
......@@ -163,7 +163,7 @@ public class DialogPlus extends Dialog {
@Override
public void setCancelable(boolean flag) {
super.setCancelable(flag);
if(!flag){
if (!flag) {
closeView.setVisibility(View.INVISIBLE);
}
}
......@@ -183,7 +183,7 @@ public class DialogPlus extends Dialog {
@Override
public void setTitle(@Nullable CharSequence title) {
setTitleText(title == null ? null : title.toString());
if(TextUtils.isEmpty(title)){
if (TextUtils.isEmpty(title)) {
hideTitleBar();
}
}
......
package cn.garymb.ygomobile.ui.plus;
import android.app.*;
import android.content.*;
import android.graphics.*;
import android.os.*;
import android.view.*;
import android.view.View.*;
import android.widget.*;
import android.app.Service;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.os.Handler;
import android.os.IBinder;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.*;
import android.support.v7.widget.*;
import cn.garymb.ygodata.YGOGameOptions;
import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.YGOStarter;
import cn.garymb.ygomobile.bean.ServerInfo;
import cn.garymb.ygomobile.bean.ServerList;
import cn.garymb.ygomobile.lite.R;
......@@ -27,204 +32,203 @@ import cn.garymb.ygomobile.utils.XmlUtils;
import static cn.garymb.ygomobile.Constants.ASSET_SERVER_LIST;
public class ServiceDuelAssistant extends Service
{
private LinearLayout mFloatLayout;
private TextView ds_text;
private Button ds_join,ds_qx;
//是否可以移除悬浮窗上面的视图
private boolean isdis=false;
String[] passwordPrefix={"M,","T,","PR,","AI,","M#","T#","PR#","S#","AI#"};
//private List<Card> lc;
private WindowManager.LayoutParams wmParams;
private WindowManager mWindowManager;
//private CardListRecyclerViewAdapter cladp;
//private DialogUtils du;
@Override
public IBinder onBind(Intent p1)
{
// TODO: Implement this method
return null;
}
@Override
public void onCreate() {
// TODO: Implement this method
super.onCreate();
//lc = new ArrayList<Card>();
//cladp = new CardListRecyclerViewAdapter(this, lc);
// du = DialogUtils.getdx(this);
final ClipboardManager cm=(ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
createFloatView();
cm.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
final String ss=cm.getText().toString().trim();
/*final int ssi=ss.indexOf("卡查");
if (ssi != -1) {
cxCard(ss, ssi);
} else {*/
int start=-1;
for (String st:passwordPrefix) {
start = ss.indexOf(st);
if (start != -1) {
break;
}
}
public class ServiceDuelAssistant extends Service {
private LinearLayout mFloatLayout;
private TextView ds_text;
private Button ds_join, ds_qx;
if (start != -1) {
joinRoom(ss, start);
}
//}
}
//是否可以移除悬浮窗上面的视图
private boolean isdis = false;
String[] passwordPrefix = {"M,", "T,", "PR,", "AI,", "M#", "T#", "PR#", "S#", "AI#"};
//private List<Card> lc;
});
private WindowManager.LayoutParams wmParams;
private WindowManager mWindowManager;
//private CardListRecyclerViewAdapter cladp;
//private DialogUtils du;
}
private void joinRoom(String ss, int start) {
final String password = ss.substring(start, ss.length());
ds_text.setText(getString(R.string.quick_join) + password + "\"");
ds_join.setText(R.string.join);
ds_qx.setText(R.string.search_close);
disJoinDialog();
showJoinDialog();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (isdis) {
isdis = false;
mWindowManager.removeView(mFloatLayout);
}
}
}, 3000);
ds_qx.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View p1) {
disJoinDialog();
}
});
ds_join.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View p1) {
if (isdis) {
isdis = false;
mWindowManager.removeView(mFloatLayout);
}
ServerListAdapter mServerListAdapter=new ServerListAdapter(ServiceDuelAssistant.this);
ServerListManager mServerListManager = new ServerListManager(ServiceDuelAssistant.this, mServerListAdapter);
mServerListManager.syncLoadData();
File xmlFile = new File(getFilesDir(), Constants.SERVER_FILE);
VUiKit.defer().when(() -> {
ServerList assetList = readList(ServiceDuelAssistant.this.getAssets().open(ASSET_SERVER_LIST));
ServerList fileList = xmlFile.exists() ? readList(new FileInputStream(xmlFile)) : null;
if (fileList == null) {
return assetList;
}
if (fileList.getVercode() < assetList.getVercode()) {
xmlFile.delete();
return assetList;
}
return fileList;
}).done((list) -> {
if (list != null) {
ServerInfo serverInfo=list.getServerInfoList().get(0);
duelIntent(ServiceDuelAssistant.this,serverInfo.getServerAddr(),serverInfo.getPort(),serverInfo.getPlayerName(),password);
}
});
}
});
}
private ServerList readList(InputStream in) {
ServerList list = null;
try {
list = XmlUtils.get().getObject(ServerList.class, in);
} catch (Exception e) {
} finally {
IOUtils.close(in);
}
return list;
}
//决斗跳转
public static void duelIntent(Context context,String ip, int dk, String name, String password){
Intent intent1=new Intent("ygomobile.intent.action.GAME");
intent1.putExtra("host", ip);
intent1.putExtra("port", dk);
intent1.putExtra("user", name);
intent1.putExtra("room", password);
intent1.setPackage("cn.garymb.ygomobile");
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
}
private void disJoinDialog() {
if (isdis) {
isdis = false;
mWindowManager.removeView(mFloatLayout);
}
}
private void showJoinDialog(){
if(!isdis){
mWindowManager.addView(mFloatLayout, wmParams);
isdis = true;
}
}
private void createFloatView() {
wmParams = new WindowManager.LayoutParams();
//获取的是WindowManagerImpl.CompatModeWrapper
mWindowManager = (WindowManager)getApplication().getSystemService(getApplication().WINDOW_SERVICE);
//设置window type
wmParams.type = android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
//设置背景透明
wmParams.format = PixelFormat.TRANSLUCENT;
//设置浮动窗口不可聚焦(实现操作除浮动窗口外的其他可见窗口的操作)
//实现悬浮窗到状态栏
wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_BLUR_BEHIND;
//调整悬浮窗显示的停靠位置为左侧置顶
wmParams.gravity = Gravity.LEFT | Gravity.TOP;
// 以屏幕左上角为原点,设置x、y初始值,相对于gravity
wmParams.x = 0;
wmParams.y = 0;
//设置悬浮窗口长宽数据
wmParams.width = WindowManager.LayoutParams.MATCH_PARENT;
wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
LayoutInflater inflater = LayoutInflater.from(this);
//获取浮动窗口视图所在布局
mFloatLayout = (LinearLayout) inflater.inflate(R.layout.duel_assistant_service, null);
//添加mFloatLayout
ds_join = mFloatLayout.findViewById(R.id.ds_join);
ds_text = mFloatLayout.findViewById(R.id.ds_text);
ds_qx = mFloatLayout.findViewById(R.id.ds_qx);
}
@Override
public IBinder onBind(Intent p1) {
// TODO: Implement this method
return null;
}
@Override
public void onCreate() {
// TODO: Implement this method
super.onCreate();
//lc = new ArrayList<Card>();
//cladp = new CardListRecyclerViewAdapter(this, lc);
// du = DialogUtils.getdx(this);
final ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
createFloatView();
cm.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
final String ss = cm.getText().toString().trim();
/*final int ssi=ss.indexOf("卡查");
if (ssi != -1) {
cxCard(ss, ssi);
} else {*/
int start = -1;
for (String st : passwordPrefix) {
start = ss.indexOf(st);
if (start != -1) {
break;
}
}
if (start != -1) {
joinRoom(ss, start);
}
//}
}
});
}
private void joinRoom(String ss, int start) {
final String password = ss.substring(start, ss.length());
ds_text.setText(getString(R.string.quick_join) + password + "\"");
ds_join.setText(R.string.join);
ds_qx.setText(R.string.search_close);
disJoinDialog();
showJoinDialog();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (isdis) {
isdis = false;
mWindowManager.removeView(mFloatLayout);
}
}
}, 3000);
ds_qx.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View p1) {
disJoinDialog();
}
});
ds_join.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View p1) {
if (isdis) {
isdis = false;
mWindowManager.removeView(mFloatLayout);
}
ServerListAdapter mServerListAdapter = new ServerListAdapter(ServiceDuelAssistant.this);
ServerListManager mServerListManager = new ServerListManager(ServiceDuelAssistant.this, mServerListAdapter);
mServerListManager.syncLoadData();
File xmlFile = new File(getFilesDir(), Constants.SERVER_FILE);
VUiKit.defer().when(() -> {
ServerList assetList = readList(ServiceDuelAssistant.this.getAssets().open(ASSET_SERVER_LIST));
ServerList fileList = xmlFile.exists() ? readList(new FileInputStream(xmlFile)) : null;
if (fileList == null) {
return assetList;
}
if (fileList.getVercode() < assetList.getVercode()) {
xmlFile.delete();
return assetList;
}
return fileList;
}).done((list) -> {
if (list != null) {
ServerInfo serverInfo = list.getServerInfoList().get(0);
duelIntent(ServiceDuelAssistant.this, serverInfo.getServerAddr(), serverInfo.getPort(), serverInfo.getPlayerName(), password);
}
});
}
});
}
private ServerList readList(InputStream in) {
ServerList list = null;
try {
list = XmlUtils.get().getObject(ServerList.class, in);
} catch (Exception e) {
} finally {
IOUtils.close(in);
}
return list;
}
//决斗跳转
public static void duelIntent(Context context, String ip, int dk, String name, String password) {
Intent intent1 = new Intent("ygomobile.intent.action.GAME");
intent1.putExtra("host", ip);
intent1.putExtra("port", dk);
intent1.putExtra("user", name);
intent1.putExtra("room", password);
intent1.setPackage("cn.garymb.ygomobile");
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
}
private void disJoinDialog() {
if (isdis) {
isdis = false;
mWindowManager.removeView(mFloatLayout);
}
}
private void showJoinDialog() {
if (!isdis) {
mWindowManager.addView(mFloatLayout, wmParams);
isdis = true;
}
}
private void createFloatView() {
wmParams = new WindowManager.LayoutParams();
//获取的是WindowManagerImpl.CompatModeWrapper
mWindowManager = (WindowManager) getApplication().getSystemService(getApplication().WINDOW_SERVICE);
//设置window type
wmParams.type = android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
//设置背景透明
wmParams.format = PixelFormat.TRANSLUCENT;
//设置浮动窗口不可聚焦(实现操作除浮动窗口外的其他可见窗口的操作)
//实现悬浮窗到状态栏
wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_BLUR_BEHIND;
//调整悬浮窗显示的停靠位置为左侧置顶
wmParams.gravity = Gravity.LEFT | Gravity.TOP;
// 以屏幕左上角为原点,设置x、y初始值,相对于gravity
wmParams.x = 0;
wmParams.y = 0;
//设置悬浮窗口长宽数据
wmParams.width = WindowManager.LayoutParams.MATCH_PARENT;
wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
LayoutInflater inflater = LayoutInflater.from(this);
//获取浮动窗口视图所在布局
mFloatLayout = (LinearLayout) inflater.inflate(R.layout.duel_assistant_service, null);
//添加mFloatLayout
ds_join = mFloatLayout.findViewById(R.id.ds_join);
ds_text = mFloatLayout.findViewById(R.id.ds_text);
ds_qx = mFloatLayout.findViewById(R.id.ds_qx);
}
/*private void cxCard(String ss, int ssi) {
final String card=ss.substring(ssi + 2, ss.length());
......
......@@ -2,7 +2,6 @@ package cn.garymb.ygomobile.ui.plus;
import android.content.Context;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.util.TypedValue;
......@@ -12,8 +11,8 @@ import org.jdeferred.android.AndroidDeferredManager;
/**
* @author Lody
* <p>
* A set of tools for UI.
* <p>
* A set of tools for UI.
*/
public class VUiKit {
private static final AndroidDeferredManager gDM = new AndroidDeferredManager();
......@@ -23,6 +22,7 @@ public class VUiKit {
public static AndroidDeferredManager defer() {
return gDM;
}
public static int dpToPx(Context context, int dp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,
context.getResources().getDisplayMetrics());
......
......@@ -24,19 +24,19 @@ public class AlipayPayUtils {
/***
*支付宝
*/
public static boolean openAlipayPayPage(Context context, String qrcode) {
try {
qrcode = URLEncoder.encode(ALIPAY_URL, "utf-8");
} catch (Exception e) {
}
try {
final String alipayqr = "alipayqr://platformapi/startapp?saId=10000007&clientVersion=3.7.0.0718&qrcode=" + qrcode;
openUri(context, alipayqr + "%3F_s%3Dweb-other&_t=" + System.currentTimeMillis());
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
public static boolean openAlipayPayPage(Context context, String qrcode) {
try {
qrcode = URLEncoder.encode(ALIPAY_URL, "utf-8");
} catch (Exception e) {
}
try {
final String alipayqr = "alipayqr://platformapi/startapp?saId=10000007&clientVersion=3.7.0.0718&qrcode=" + qrcode;
openUri(context, alipayqr + "%3F_s%3Dweb-other&_t=" + System.currentTimeMillis());
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private static void openUri(Context context, String s) {
......@@ -48,7 +48,7 @@ public class AlipayPayUtils {
/***
*微信支付(图灵trpay)
*/
public static void inputMoney(Activity activity){
public static void inputMoney(Activity activity) {
DialogPlus dialog = new DialogPlus(activity);
dialog.setTitle("输入微信捐赠金额(元)");
EditText editText = new EditText(activity);
......@@ -61,12 +61,12 @@ public class AlipayPayUtils {
dlg.dismiss();
});
dialog.setLeftButtonListener((dlg, s) -> {
String message=editText.getText().toString().trim();
if(!message.equals("")){
String message = editText.getText().toString().trim();
if (!message.equals("")) {
long money = Long.parseLong(message);
if(money!=0){
if (money != 0) {
money = money * 100;
WeChatPay(activity,money);
WeChatPay(activity, money);
dlg.dismiss();
}
}
......@@ -74,16 +74,16 @@ public class AlipayPayUtils {
}
public static void WeChatPay(Activity activity,Long money){
String id = UUID.randomUUID()+"";
public static void WeChatPay(Activity activity, Long money) {
String id = UUID.randomUUID() + "";
String notifyurl = "192.168.1.1";
TrPay.getInstance(activity).callWxPay("感谢您对YGOMobile的支持", id, money, "",notifyurl, AlipayPayUtils.getIMEI(activity), new PayResultListener() {
public void onPayFinish(Context context, String outtradeno, int resultCode, String resultString, int payType, Long amount, String tradename){
if (resultCode == TrPayResult.RESULT_CODE_SUCC.getId()) {
} else if (resultCode == TrPayResult.RESULT_CODE_FAIL.getId()) {
TrPay.getInstance(activity).callWxPay("感谢您对YGOMobile的支持", id, money, "", notifyurl, AlipayPayUtils.getIMEI(activity), new PayResultListener() {
public void onPayFinish(Context context, String outtradeno, int resultCode, String resultString, int payType, Long amount, String tradename) {
if (resultCode == TrPayResult.RESULT_CODE_SUCC.getId()) {
} else if (resultCode == TrPayResult.RESULT_CODE_FAIL.getId()) {
}
}
}
});
});
}
public static String getIMEI(Context context) {
......@@ -91,5 +91,5 @@ public class AlipayPayUtils {
String imei = telephonyManager.getDeviceId();
return imei;
}
}
}
......@@ -4,6 +4,7 @@ package cn.garymb.ygomobile.utils;
public class StringUtils {
/**
* 半角转全角
*
* @param input String.
* @return 全角字符串.
*/
......@@ -22,6 +23,7 @@ public class StringUtils {
/**
* 全角转半角
*
* @param input String.
* @return 半角字符串
*/
......
package cn.garymb.ygomobile.utils;
import android.content.Context;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
/*ToastUtil toastUtil=new ToastUtil();
toastUtil.Short(MainActivity.this,"自定义message字体、背景色").setToastColor(Color.WHITE, getResources().getColor(R.color.colorAccent)).show();
*/
public class ToastUtil {
private Toast toast;
private LinearLayout toastView;
/**
* 修改原布局的Toast
*/
public ToastUtil() {
}
/**
* 完全自定义布局Toast
* @param context
* @param view
*/
public ToastUtil(Context context, View view,int duration){
toast=new Toast(context);
toast.setView(view);
toast.setDuration(duration);
}
/**
* 向Toast中添加自定义view
* @param view
* @param postion
* @return
*/
public ToastUtil addView(View view,int postion) {
toastView = (LinearLayout) toast.getView();
toastView.addView(view, postion);
return this;
}
/**
* 设置Toast字体及背景颜色
* @param messageColor
* @param backgroundColor
* @return
*/
public ToastUtil setToastColor(int messageColor, int backgroundColor) {
View view = toast.getView();
if(view!=null){
TextView message=((TextView) view.findViewById(android.R.id.message));
message.setBackgroundColor(backgroundColor);
message.setTextColor(messageColor);
}
return this;
}
/**
* 设置Toast字体及背景
* @param messageColor
* @param background
* @return
*/
public ToastUtil setToastBackground(int messageColor, int background) {
View view = toast.getView();
if(view!=null){
TextView message=((TextView) view.findViewById(android.R.id.message));
message.setBackgroundResource(background);
message.setTextColor(messageColor);
}
return this;
}
/**
* 短时间显示Toast
*/
public ToastUtil Short(Context context, CharSequence message){
if(toast==null||(toastView!=null&&toastView.getChildCount()>1)){
toast= Toast.makeText(context, message, Toast.LENGTH_SHORT);
toastView=null;
}else{
toast.setText(message);
toast.setDuration(Toast.LENGTH_SHORT);
}
return this;
}
/**
* 短时间显示Toast
*/
public ToastUtil Short(Context context, int message) {
if(toast==null||(toastView!=null&&toastView.getChildCount()>1)){
toast= Toast.makeText(context, message, Toast.LENGTH_SHORT);
toastView=null;
}else{
toast.setText(message);
toast.setDuration(Toast.LENGTH_SHORT);
}
return this;
}
/**
* 长时间显示Toast
*/
public ToastUtil Long(Context context, CharSequence message){
if(toast==null||(toastView!=null&&toastView.getChildCount()>1)){
toast= Toast.makeText(context, message, Toast.LENGTH_LONG);
toastView=null;
}else{
toast.setText(message);
toast.setDuration(Toast.LENGTH_LONG);
}
return this;
}
/**
* 长时间显示Toast
*
* @param context
* @param message
*/
public ToastUtil Long(Context context, int message) {
if(toast==null||(toastView!=null&&toastView.getChildCount()>1)){
toast= Toast.makeText(context, message, Toast.LENGTH_LONG);
toastView=null;
}else{
toast.setText(message);
toast.setDuration(Toast.LENGTH_LONG);
}
return this;
}
/**
* 自定义显示Toast时间
*
* @param context
* @param message
* @param duration
*/
public ToastUtil Indefinite(Context context, CharSequence message, int duration) {
if(toast==null||(toastView!=null&&toastView.getChildCount()>1)){
toast= Toast.makeText(context, message,duration);
toastView=null;
}else{
toast.setText(message);
toast.setDuration(duration);
}
return this;
}
/**
* 自定义显示Toast时间
*
* @param context
* @param message
* @param duration
*/
public ToastUtil Indefinite(Context context, int message, int duration) {
if(toast==null||(toastView!=null&&toastView.getChildCount()>1)){
toast= Toast.makeText(context, message,duration);
toastView=null;
}else{
toast.setText(message);
toast.setDuration(duration);
}
return this;
}
/**
* 显示Toast
* @return
*/
public ToastUtil show (){
toast.show();
return this;
}
/**
* 获取Toast
* @return
*/
public Toast getToast(){
return toast;
}
}
package cn.garymb.ygomobile.utils;
import android.util.Log;
import net.kk.xml.XmlOptions;
import net.kk.xml.XmlReader;
import net.kk.xml.XmlWriter;
......@@ -15,8 +13,6 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class XmlUtils {
public static boolean DEBUG = false;
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="opengl_version_value" translatable="false">
<string-array name="opengl_version_value" translatable="false">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
<string-array name="card_quality_value" translatable="false">
<string-array name="card_quality_value" translatable="false">
<item>0</item>
<item>1</item>
</string-array>
<string-array name="tips">
<item>游戏王圈子不大,珍惜一起玩的人</item>
<item>点击卡片却偏到另一张?试试去「设置」→打勾/取消「在游戏隐藏虚拟键」</item>
<item>主页每个服务器按住左划就会出现「编辑」和「删除」哦</item>
<item>试试点击左下角浮动的「贤者之石」会有更多功能</item>
<item>想不联网也打人机?左下角→「单人游戏」→「人机模式」</item>
<item>卡图怎么没了?点击左下角→「重置资源」</item>
<item>卡组自己组更能享受游戏乐趣,自己组也更容易神抽哦</item>
<item>看到每个服务器右下的宝石了吗?点点看吧</item>
<item>先行卡和正式卡密码不同,打了补丁要注意区分哦</item>
<item>觉得遇到BUG先确定是否真的是BUG再进行反馈哈</item>
<item>不懂怎么更新?去设置-「检查更新」看看</item>
<item>不知道怎么用,可以点开左下-「教程」查看使用方法</item>
<item>维护开发不容易,欢迎前往左下角→「支持我们」留下您的心意</item>
<item>没有所谓的“大师规则4”只有「新大师规则」哦</item>
<item>录像出错就删了吧,暂时还没有解决办法</item>
<item>상대에 대한 예의를 지켜 게임을 즐기십시오.</item>
<item>설정에서 가상키를 끄고 킬 수 있습니다.</item>
<item>메인화면의 각 서버들은 좌측으로 밀어줄 경우 수정과 삭제가 가능합니다.</item>
<item>좌측 하단의 마크를 눌러줄 경우 더 많은 설정들을 확인할 수 있습니다.</item>
<item>ai대전을 원할 경우 각 서버의 비밀번호에 ai를 입력후 참여 하십시오.</item>
<item>이미지 파일이 없어졌을 경우 리소스 리셋 기능을 사용하십시오.</item>
<item>주변에서 같이 게임을 즐길 오프라인 친구들을 찾아 그룹을 만들어 보세요.</item>
<item>서버들의 오른쪽에 있는 마크를 통해 서버 우선순위를 확인할 수 있습니다.</item>
<item>몇몇 특수한 카드들을 제외하고 8자리 코드번호를 초과하는 카드들은 프리릴리즈 카드로, 프리릴리즈카드를 허용하는 서버 에서만 사용이 가능합니다.</item>
<item>bug제보를 하기 전에 게임 진행 상황을 살펴보십시오. bug가 아닐 수 있습니다.</item>
<item>최신버전은 유무는 실탄은땅콩님에게 문의하십시오.</item>
<item>좌측 하단의 도움말을 통해 사용법을 알 수 있습니다.</item>
<item>앱의 유지 보수를 위해 많은 시간과 노력이 필요합니다. 좌측하단의 마크를 통해 기부를 해주시면 감사하겠습니다.</item>
<item>"마스터룰4"가 아니라 "뉴마스터룰"입니다.</item>
<item>리플레이 오류는 보통 서버와 클라이언트의 스크립트 차이로 발생하며 마땅한 해결법은 아직 없습니다. 가능한 클라우드 리플레이를 이용해주십시오. </item>
</string-array>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="opengl_version_value" translatable="false">
<string-array name="opengl_version_value" translatable="false">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
<string-array name="card_quality_value" translatable="false">
<string-array name="card_quality_value" translatable="false">
<item>0</item>
<item>1</item>
</string-array>
<string-array name="tips">
<item>游戏王圈子不大,珍惜一起玩的人</item>
<item>点击卡片却偏到另一张?试试去「设置」→打勾/取消「在游戏隐藏虚拟键」</item>
<item>界面偏了还点不准?试试去「设置」→打勾/取消「在游戏隐藏虚拟键」</item>
<item>主页每个服务器按住左划就会出现「编辑」和「删除」哦</item>
<item>试试点击左下角浮动的「贤者之石」会有更多功能</item>
<item>想不联网也打人机?左下角→「单人游戏」→「人机模式」</item>
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="opengl_version_value" translatable="false">
<string-array name="opengl_version_value" translatable="false">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
<string-array name="card_quality_value" translatable="false">
<string-array name="card_quality_value" translatable="false">
<item>0</item>
<item>1</item>
</string-array>
......
......@@ -11,6 +11,8 @@ import android.util.Base64;
import android.util.Log;
import android.webkit.JavascriptInterface;
import com.tencent.smtt.sdk.WebView;
import org.json.JSONArray;
import java.io.BufferedInputStream;
......@@ -27,8 +29,6 @@ import cn.garymb.ygomobile.YGOStarter;
import cn.garymb.ygomobile.ui.cards.DeckManagerActivity;
import cn.garymb.ygomobile.ui.plus.DefWebViewClient;
import com.tencent.smtt.sdk.*;
import static junit.framework.Assert.assertEquals;
public class MyCard {
......@@ -79,10 +79,10 @@ public class MyCard {
mUser.avatar_url = info.getQueryParameter("avatar_url");
mUser.admin = info.getBooleanQueryParameter("admin", false);
mUser.moderator = info.getBooleanQueryParameter("moderator", false);
lastModified.edit().putString("user_external_id", mUser.external_id+"").apply();
lastModified.edit().putString("user_external_id", mUser.external_id + "").apply();
lastModified.edit().putString("user_name", mUser.username).apply();
//UserManagement.setUserName(mUser.username);
//UserManagement.setUserPassword(mUser.external_id+"");
//UserManagement.setUserName(mUser.username);
//UserManagement.setUserPassword(mUser.external_id+"");
mUser.login = true;
if (getMyCardListener() != null) {
getMyCardListener().onLogin(mUser.name, mUser.avatar_url, null);
......@@ -262,11 +262,11 @@ public class MyCard {
}
/*
* 列目录
* path: 文件夹路径
* return: 文件名数组的 JSON 字符串
* 失败抛异常或返回空数组
*/
* 列目录
* path: 文件夹路径
* return: 文件名数组的 JSON 字符串
* 失败抛异常或返回空数组
*/
@JavascriptInterface
public String readdir(String path) {
File file = new File(settings.getResourcePath(), path);
......@@ -275,11 +275,11 @@ public class MyCard {
}
/*
* 读取文件内容
* path: 文件绝对路径
* return: 文件内容的 base64
* 读取失败抛异常
*/
* 读取文件内容
* path: 文件绝对路径
* return: 文件内容的 base64
* 读取失败抛异常
*/
@JavascriptInterface
public String readFile(String path) throws IOException {
File file = new File(settings.getResourcePath(), path);
......@@ -291,11 +291,11 @@ public class MyCard {
}
/*
* 写入内容到指定文件
* path: 文件路径
* data: 文件内容的 base64
* 写入失败抛异常
*/
* 写入内容到指定文件
* path: 文件路径
* data: 文件内容的 base64
* 写入失败抛异常
*/
@JavascriptInterface
public void writeFile(String path, String data) throws IOException {
File file = new File(settings.getResourcePath(), path);
......@@ -305,9 +305,9 @@ public class MyCard {
}
/*
* 删除文件
* 删除失败返回 false
*/
* 删除文件
* 删除失败返回 false
*/
@JavascriptInterface
public boolean unlink(String path) {
File file = new File(settings.getResourcePath(), path);
......@@ -316,11 +316,11 @@ public class MyCard {
}
/*
* 获取文件修改时间
* path: 文件绝对路径
* return: 修改时间
* 文件不存在返回 0
*/
* 获取文件修改时间
* path: 文件绝对路径
* return: 修改时间
* 文件不存在返回 0
*/
@JavascriptInterface
public long getFileLastModified(String path) {
File file = new File(settings.getResourcePath(), path);
......@@ -342,10 +342,10 @@ public class MyCard {
}
/*
* 设置文件修改时间
* path: 文件绝对路径
* time: 时间
*/
* 设置文件修改时间
* path: 文件绝对路径
* time: 时间
*/
@JavascriptInterface
public void setFileLastModified(String path, long time) {
File file = new File(settings.getResourcePath(), path);
......
......@@ -9,7 +9,6 @@ import android.support.annotation.Nullable;
import android.support.design.widget.NavigationView;
import android.support.v4.widget.DrawerLayout;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
......@@ -20,8 +19,9 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.tencent.smtt.sdk.*;
import com.tencent.smtt.sdk.WebChromeClient;
import com.tencent.smtt.sdk.WebSettings;
import com.tencent.smtt.sdk.WebView;
import java.text.MessageFormat;
......@@ -31,7 +31,6 @@ import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.activities.BaseActivity;
import cn.garymb.ygomobile.ui.cards.DeckManagerActivity;
import cn.garymb.ygomobile.ui.online.mcchat.SplashActivity;
import cn.garymb.ygomobile.ui.plus.X5WebView;
public class MyCardActivity extends BaseActivity implements MyCard.MyCardListener, NavigationView.OnNavigationItemSelectedListener {
......@@ -189,7 +188,7 @@ public class MyCardActivity extends BaseActivity implements MyCard.MyCardListene
mWebViewPlus.loadUrl(mMyCard.getBBSUrl());
break;
case R.id.action_chat:
startActivity(new Intent(MyCardActivity.this,SplashActivity.class));
startActivity(new Intent(MyCardActivity.this, SplashActivity.class));
break;
default:
return false;
......@@ -200,7 +199,7 @@ public class MyCardActivity extends BaseActivity implements MyCard.MyCardListene
@Override
public void onLogin(String name, String icon, String statu) {
if(!TextUtils.isEmpty(icon)){
if (!TextUtils.isEmpty(icon)) {
Glide.with(this).load(Uri.parse(icon)).into(mHeadView);
}
mNameView.setText(name);
......@@ -260,7 +259,7 @@ public class MyCardActivity extends BaseActivity implements MyCard.MyCardListene
return false;
}
public void ProgressBar(){
public void ProgressBar() {
}
}
package cn.garymb.ygomobile.ui.online.mcchat;
import org.jivesoftware.smack.packet.Message;
import cn.garymb.ygomobile.ui.online.mcchat.management.*;
public class ChatMessage
{
private String name;
//private String time;
private String message;
private String avatar;
public void setAvatar(String avatar)
{
this.avatar = avatar;
}
public String getAvatar()
{
return avatar;
}
public void setMessage(String message)
{
this.message = message;
}
public String getMessage()
{
return message;
}
public void setName(String name)
{
this.name = name;
this.avatar=getAvatarUrl(name);
}
public String getName()
{
return name;
}
/*
public void setTime(String time)
{
this.time = time;
}
public String getTime()
{
return time;
}
*/
public static ChatMessage toChatMessage(Message message){
if(message.getBody()!=null)
{
String xs=message.toXML().toString();
int cc=xs.indexOf("stamp='");
if(cc!=-1){
String ss=xs.substring(cc+7,xs.indexOf("'",cc+7));
}else{
}
String names=message.getFrom().toString();
String name=names.substring(names.indexOf(ServiceManagement.GROUP_ADDRESS)+ServiceManagement.GROUP_ADDRESS.length()+1,names.length());
ChatMessage cm=new ChatMessage();
cm.setName(name);
//cm.setTime(ss);
cm.setMessage(message.getBody());
return cm;
}
return null;
}
public String getAvatarUrl(String userName){
return "https://api.moecube.com/accounts/users/"+userName+".png";
}
}
import cn.garymb.ygomobile.ui.online.mcchat.management.ServiceManagement;
public class ChatMessage {
private String name;
//private String time;
private String message;
private String avatar;
/*
public void setTime(String time)
{
this.time = time;
}
public String getTime()
{
return time;
}
*/
public static ChatMessage toChatMessage(Message message) {
if (message.getBody() != null) {
String xs = message.toXML().toString();
int cc = xs.indexOf("stamp='");
if (cc != -1) {
String ss = xs.substring(cc + 7, xs.indexOf("'", cc + 7));
} else {
}
String names = message.getFrom().toString();
String name = names.substring(names.indexOf(ServiceManagement.GROUP_ADDRESS) + ServiceManagement.GROUP_ADDRESS.length() + 1, names.length());
ChatMessage cm = new ChatMessage();
cm.setName(name);
//cm.setTime(ss);
cm.setMessage(message.getBody());
return cm;
}
return null;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
this.avatar = getAvatarUrl(name);
}
public String getAvatarUrl(String userName) {
return "https://api.moecube.com/accounts/users/" + userName + ".png";
}
}
package cn.garymb.ygomobile.ui.online.mcchat;
import android.app.*;
import android.content.Context;
import android.os.*;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.jivesoftware.smack.packet.Message;
import android.widget.*;
import android.support.v7.widget.*;
import android.view.View.*;
import android.view.*;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.online.mcchat.adapter.*;
import cn.garymb.ygomobile.ui.online.mcchat.util.*;
import cn.garymb.ygomobile.ui.online.mcchat.management.*;
public class McchatActivity extends Activity implements ChatListener
{
@Override
public void reLogin(boolean state)
{
main_bottom_bar.setVisibility(View.GONE);
if(state){
main_title.setText("登录成功");
}else{
main_title.setText("连接断开,重新登录中……");
}
// TODO: Implement this method
}
@Override
public void reJoin(boolean state)
{
if(state){
main_bottom_bar.setVisibility(View.VISIBLE);
main_title.setText(getResources().getString(R.string.app_name));
}else{
main_bottom_bar.setVisibility(View.GONE);
main_title.setText("重新加入聊天室中……");
}
// TODO: Implement this method
}
@Override
public void addMessage(Message message)
{
cadp.sx();
main_rec.smoothScrollToPosition(su.getData().size()-1);
// TODO: Implement this method
}
@Override
public void removeMessage(Message message)
{
// TODO: Implement this method
}
private EditText main_send_message;
private ImageButton main_send;
private RecyclerView main_rec;
private TextView main_title;
private LinearLayout main_bottom_bar;
private ChatAdapter cadp;
private ServiceManagement su;
import cn.garymb.ygomobile.ui.online.mcchat.adapter.ChatAdapter;
import cn.garymb.ygomobile.ui.online.mcchat.management.ServiceManagement;
import cn.garymb.ygomobile.ui.online.mcchat.management.UserManagement;
import cn.garymb.ygomobile.ui.online.mcchat.util.Util;
public class McchatActivity extends Activity implements ChatListener {
@Override
public void reLogin(boolean state) {
main_bottom_bar.setVisibility(View.GONE);
if (state) {
main_title.setText("登录成功");
} else {
main_title.setText("连接断开,重新登录中……");
}
// TODO: Implement this method
}
@Override
public void reJoin(boolean state) {
if (state) {
main_bottom_bar.setVisibility(View.VISIBLE);
main_title.setText(getResources().getString(R.string.app_name));
} else {
main_bottom_bar.setVisibility(View.GONE);
main_title.setText("重新加入聊天室中……");
}
// TODO: Implement this method
}
@Override
public void addMessage(Message message) {
cadp.sx();
main_rec.smoothScrollToPosition(su.getData().size() - 1);
// TODO: Implement this method
}
@Override
public void removeMessage(Message message) {
// TODO: Implement this method
}
private EditText main_send_message;
private ImageButton main_send;
private RecyclerView main_rec;
private TextView main_title;
private LinearLayout main_bottom_bar;
private ChatAdapter cadp;
private ServiceManagement su;
@Override
protected void onCreate(Bundle savedInstanceState)
{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();
initView();
}
private void initView() {
main_rec = (RecyclerView) findViewById(R.id.main_rec);
main_send = (ImageButton) findViewById(R.id.main_send);
main_send_message = (EditText) findViewById(R.id.main_send_message);
main_title = (TextView) findViewById(R.id.main_title);
main_bottom_bar = (LinearLayout) findViewById(R.id.main_bottom_bar);
su = ServiceManagement.getDx();
cadp = new ChatAdapter(this, su.getData());
su.addListener(this);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(McchatActivity.this, LinearLayoutManager.VERTICAL, false);
linearLayoutManager.setStackFromEnd(true); //关键 设置此项,当软键盘弹出时,布局会自动顶上去,在结合AndroidManifest.xml设置属性
main_rec.setLayoutManager(linearLayoutManager);
main_rec.setAdapter(cadp);
initListener();
// TODO: Implement this method
}
private void initListener() {
main_send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View p1) {
String message = main_send_message.getText().toString().trim();
if (message.equals("")) {
Util.show(McchatActivity.this, getString(R.string.noting_to_send));
} else {
try {
su.sendMessage(message);
main_send_message.setText("");
} catch (Exception e) {
Util.show(McchatActivity.this, getString(R.string.sending_failed));
}
}
// TODO: Implement this method
}
});
// TODO: Implement this method
}
@Override
protected void onDestroy() {
// TODO: Implement this method
super.onDestroy();
su.disClass();
UserManagement.setUserName(null);
UserManagement.setUserPassword(null);
finish();
}
private void initView()
{
main_rec=(RecyclerView) findViewById(R.id.main_rec);
main_send=(ImageButton) findViewById(R.id.main_send);
main_send_message=(EditText) findViewById(R.id.main_send_message);
main_title=(TextView) findViewById(R.id.main_title);
main_bottom_bar=(LinearLayout) findViewById(R.id.main_bottom_bar);
su=ServiceManagement.getDx();
cadp=new ChatAdapter(this,su.getData());
su.addListener(this);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(McchatActivity.this, LinearLayoutManager.VERTICAL, false);
linearLayoutManager.setStackFromEnd(true); //关键 设置此项,当软键盘弹出时,布局会自动顶上去,在结合AndroidManifest.xml设置属性
main_rec.setLayoutManager(linearLayoutManager);
main_rec.setAdapter(cadp);
initListener();
// TODO: Implement this method
}
private void initListener()
{
main_send.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View p1)
{
String message=main_send_message.getText().toString().trim();
if(message.equals("")){
Util.show(McchatActivity.this,getString(R.string.noting_to_send));
}else{
try
{
su.sendMessage(message);
main_send_message.setText("");
}catch (Exception e){
Util.show(McchatActivity.this,getString(R.string.sending_failed));
}
}
// TODO: Implement this method
}
});
// TODO: Implement this method
}
@Override
protected void onDestroy()
{
// TODO: Implement this method
super.onDestroy();
su.disClass();
UserManagement.setUserName(null);
UserManagement.setUserPassword(null);
finish();
}
}
package cn.garymb.ygomobile.ui.online.mcchat;
import android.app.*;
import android.os.*;
import android.content.*;
import android.widget.*;
import android.view.*;
import android.view.View.*;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.online.MyCardActivity;
import cn.garymb.ygomobile.ui.online.mcchat.util.*;
import cn.garymb.ygomobile.ui.online.mcchat.management.*;
public class SplashActivity extends Activity
{
ServiceManagement su;
ProgressBar sp_jz;
TextView sp_tv;
LinearLayout sp_li;
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO: Implement this method
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
initView();
import cn.garymb.ygomobile.ui.online.mcchat.management.ServiceManagement;
import cn.garymb.ygomobile.ui.online.mcchat.management.UserManagement;
import cn.garymb.ygomobile.ui.online.mcchat.util.Util;
public class SplashActivity extends Activity {
ServiceManagement su;
ProgressBar sp_jz;
TextView sp_tv;
LinearLayout sp_li;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO: Implement this method
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
initView();
/*String name=getIntent().getStringExtra("name");
String password=getIntent().getStringExtra("password");
UserManagement.setUserName(name);
UserManagement.setUserPassword(password);*/
//UserManagement.setUserName("废话多");
//UserManagement.setUserPassword("19709");
SharedPreferences lastModified = getSharedPreferences("lastModified", Context.MODE_PRIVATE);
UserManagement.setUserName(lastModified.getString("user_name",null));
UserManagement.setUserPassword(lastModified.getString("user_external_id",null));
su = ServiceManagement.getDx();
join();
}
private void join()
{
if (!su.isListener())
{
new Thread(new Runnable(){
@Override
public void run()
{
if (!su.isConnected()){
han.sendEmptyMessage(4);
login();
}
if(su.isConnected()){
han.sendEmptyMessage(3);
try
{
su.joinChat();
han.sendEmptyMessage(1);
}
catch (Exception e)
{
han.sendEmptyMessage(2);
}
}
// TODO: Implement this method
}
}).start();
}else{
han.sendEmptyMessage(1);
}
// TODO: Implement this method
}
private void initView()
{
sp_jz=findViewById(R.id.sp_jz);
sp_tv=findViewById(R.id.sp_tv);
sp_li=findViewById(R.id.sp_li);
sp_li.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View p1)
{
join();
// TODO: Implement this method
}
});
// TODO: Implement this method
}
private void login()
{
String name=UserManagement.getUserName();
String password =UserManagement.getUserPassword();
if (name != null && password != null)
{
try
{
su.login(name, password);
}catch (Exception e){
Message me=new Message();
me.obj=e;
me.what=0;
han.sendMessage(me);
}
}else{
han.sendEmptyMessage(5);
}
// TODO: Implement this method
}
Handler han=new Handler(){
@Override
public void handleMessage(Message msg)
{
// TODO: Implement this method
super.handleMessage(msg);
switch(msg.what){
case 0:
su.setIsConnected(false);
sp_jz.setVisibility(View.GONE);
sp_tv.setText(getString(R.string.logining_failed));
Util.show(SplashActivity.this,getString(R.string.failed_reason)+msg.obj);
break;
case 1:
startActivity(new Intent(SplashActivity.this,McchatActivity.class));
finish();
break;
case 2:
su.setIsListener(false);
sp_jz.setVisibility(View.GONE);
sp_tv.setText(getString(R.string.logining_failed));
break;
case 3:
sp_jz.setVisibility(View.VISIBLE);
sp_tv.setText(getString(R.string.logining_in));
break;
case 4:
sp_jz.setVisibility(View.VISIBLE);
sp_tv.setText(getString(R.string.logining_in));
break;
case 5:
//UserManagement.setUserName("废话多");
//UserManagement.setUserPassword("19709");
SharedPreferences lastModified = getSharedPreferences("lastModified", Context.MODE_PRIVATE);
UserManagement.setUserName(lastModified.getString("user_name", null));
UserManagement.setUserPassword(lastModified.getString("user_external_id", null));
su = ServiceManagement.getDx();
join();
}
private void join() {
if (!su.isListener()) {
new Thread(new Runnable() {
@Override
public void run() {
if (!su.isConnected()) {
han.sendEmptyMessage(4);
login();
}
if (su.isConnected()) {
han.sendEmptyMessage(3);
try {
su.joinChat();
han.sendEmptyMessage(1);
} catch (Exception e) {
han.sendEmptyMessage(2);
}
}
// TODO: Implement this method
}
}).start();
} else {
han.sendEmptyMessage(1);
}
// TODO: Implement this method
}
private void initView() {
sp_jz = findViewById(R.id.sp_jz);
sp_tv = findViewById(R.id.sp_tv);
sp_li = findViewById(R.id.sp_li);
sp_li.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View p1) {
join();
// TODO: Implement this method
}
});
// TODO: Implement this method
}
private void login() {
String name = UserManagement.getUserName();
String password = UserManagement.getUserPassword();
if (name != null && password != null) {
try {
su.login(name, password);
} catch (Exception e) {
Message me = new Message();
me.obj = e;
me.what = 0;
han.sendMessage(me);
}
} else {
han.sendEmptyMessage(5);
}
// TODO: Implement this method
}
Handler han = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO: Implement this method
super.handleMessage(msg);
switch (msg.what) {
case 0:
su.setIsConnected(false);
sp_jz.setVisibility(View.GONE);
sp_tv.setText(getString(R.string.logining_failed));
Util.show(SplashActivity.this, getString(R.string.failed_reason) + msg.obj);
break;
case 1:
startActivity(new Intent(SplashActivity.this, McchatActivity.class));
finish();
break;
case 2:
su.setIsListener(false);
sp_jz.setVisibility(View.GONE);
sp_tv.setText(getString(R.string.logining_failed));
break;
case 3:
sp_jz.setVisibility(View.VISIBLE);
sp_tv.setText(getString(R.string.logining_in));
break;
case 4:
sp_jz.setVisibility(View.VISIBLE);
sp_tv.setText(getString(R.string.logining_in));
break;
case 5:
/*sp_jz.setVisibility(View.GONE);
sp_tv.setText("用户名或密码为空");*/
startActivity(new Intent(SplashActivity.this,MyCardActivity.class));
finish();
break;
}
}
};
startActivity(new Intent(SplashActivity.this, MyCardActivity.class));
finish();
break;
}
}
};
}
package cn.garymb.ygomobile.ui.plus;
import android.annotation.*;
import android.content.*;
import android.graphics.*;
import android.os.*;
import android.util.*;
import android.view.*;
import android.widget.*;
import com.tencent.smtt.sdk.*;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
import com.tencent.smtt.sdk.WebSettings;
import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient;
public class X5WebView extends WebView {
private WebViewClient client = new WebViewClient() {
/**
* 防止加载网页时调起系统浏览器
*/
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
};
private WebViewClient client = new WebViewClient() {
/**
* 防止加载网页时调起系统浏览器
*/
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
};
@SuppressLint("SetJavaScriptEnabled")
public X5WebView(Context arg0, AttributeSet arg1) {
super(arg0, arg1);
this.setWebViewClient(client);
// this.setWebChromeClient(chromeClient);
// WebStorage webStorage = WebStorage.getInstance();
initWebViewSettings();
this.getView().setClickable(true);
}
@SuppressLint("SetJavaScriptEnabled")
public X5WebView(Context arg0, AttributeSet arg1) {
super(arg0, arg1);
this.setWebViewClient(client);
// this.setWebChromeClient(chromeClient);
// WebStorage webStorage = WebStorage.getInstance();
initWebViewSettings();
this.getView().setClickable(true);
}
private void initWebViewSettings() {
WebSettings webSetting = this.getSettings();
webSetting.setJavaScriptEnabled(true);
webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
webSetting.setAllowFileAccess(true);
//webSetting.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
webSetting.setSupportZoom(true);
webSetting.setBuiltInZoomControls(true);
webSetting.setUseWideViewPort(true);
webSetting.setSupportMultipleWindows(false);
// webSetting.setLoadWithOverviewMode(true);
webSetting.setAppCacheEnabled(true);
// webSetting.setDatabaseEnabled(true);
webSetting.setDomStorageEnabled(true);
webSetting.setGeolocationEnabled(true);
webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
// webSetting.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);
webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
// webSetting.setRenderPriority(WebSettings.RenderPriority.HIGH);
webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);
webSetting.setDatabaseEnabled(true);
webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
}
private void initWebViewSettings() {
WebSettings webSetting = this.getSettings();
webSetting.setJavaScriptEnabled(true);
webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
webSetting.setAllowFileAccess(true);
//webSetting.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
webSetting.setSupportZoom(true);
webSetting.setBuiltInZoomControls(true);
webSetting.setUseWideViewPort(true);
webSetting.setSupportMultipleWindows(false);
// webSetting.setLoadWithOverviewMode(true);
webSetting.setAppCacheEnabled(true);
// webSetting.setDatabaseEnabled(true);
webSetting.setDomStorageEnabled(true);
webSetting.setGeolocationEnabled(true);
webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
// webSetting.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);
webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
// webSetting.setRenderPriority(WebSettings.RenderPriority.HIGH);
webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);
webSetting.setDatabaseEnabled(true);
webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
}
@Override
protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
@Override
protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
/*boolean ret = super.drawChild(canvas, child, drawingTime);
canvas.save();
Paint paint = new Paint();
......@@ -77,13 +78,13 @@ public class X5WebView extends WebView {
canvas.drawText(Build.MODEL, 10, 200, paint);
canvas.restore();
return ret;*/
return super.drawChild(canvas,child,drawingTime);
}
return super.drawChild(canvas, child, drawingTime);
}
public X5WebView(Context arg0) {
super(arg0);
setBackgroundColor(85621);
}
public X5WebView(Context arg0) {
super(arg0);
setBackgroundColor(85621);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment