Commit 633dde66 authored by feihuaduo's avatar feihuaduo

WebActivity支持打开卡组

parent d1780756
...@@ -9,6 +9,7 @@ import android.net.Uri; ...@@ -9,6 +9,7 @@ import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.text.TextUtils;
import android.view.Gravity; import android.view.Gravity;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
...@@ -24,6 +25,9 @@ import androidx.annotation.NonNull; ...@@ -24,6 +25,9 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import com.ourygo.lib.duelassistant.listener.OnDuelAssistantListener;
import com.ourygo.lib.duelassistant.util.DuelAssistantManagement;
import com.ourygo.lib.duelassistant.util.Util;
import com.tencent.smtt.sdk.DownloadListener; import com.tencent.smtt.sdk.DownloadListener;
import com.tencent.smtt.sdk.ValueCallback; import com.tencent.smtt.sdk.ValueCallback;
import com.tencent.smtt.sdk.WebChromeClient; import com.tencent.smtt.sdk.WebChromeClient;
...@@ -32,6 +36,7 @@ import com.tencent.smtt.sdk.WebView; ...@@ -32,6 +36,7 @@ import com.tencent.smtt.sdk.WebView;
import java.io.File; import java.io.File;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.util.List;
import cn.garymb.ygomobile.AppsSettings; import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants; import cn.garymb.ygomobile.Constants;
...@@ -41,6 +46,7 @@ import cn.garymb.ygomobile.ui.file.FileOpenType; ...@@ -41,6 +46,7 @@ import cn.garymb.ygomobile.ui.file.FileOpenType;
import cn.garymb.ygomobile.ui.mycard.MyCard; import cn.garymb.ygomobile.ui.mycard.MyCard;
import cn.garymb.ygomobile.ui.plus.DefWebChromeClient; import cn.garymb.ygomobile.ui.plus.DefWebChromeClient;
import cn.garymb.ygomobile.ui.plus.DefWebViewClient; import cn.garymb.ygomobile.ui.plus.DefWebViewClient;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.widget.WebViewPlus; import cn.garymb.ygomobile.ui.widget.WebViewPlus;
import cn.garymb.ygomobile.utils.DownloadUtil; import cn.garymb.ygomobile.utils.DownloadUtil;
import cn.garymb.ygomobile.utils.FileUtils; import cn.garymb.ygomobile.utils.FileUtils;
...@@ -49,7 +55,7 @@ import cn.garymb.ygomobile.utils.YGOUtil; ...@@ -49,7 +55,7 @@ import cn.garymb.ygomobile.utils.YGOUtil;
import ocgcore.DataManager; import ocgcore.DataManager;
import ocgcore.data.Card; import ocgcore.data.Card;
public class WebActivity extends BaseActivity implements View.OnClickListener { public class WebActivity extends BaseActivity implements View.OnClickListener, OnDuelAssistantListener {
private static String TAG = "WebActivity"; private static String TAG = "WebActivity";
private static final int FILE_CHOOSER_REQUEST = 100; private static final int FILE_CHOOSER_REQUEST = 100;
private ValueCallback<Uri[]> mFilePathCallback; private ValueCallback<Uri[]> mFilePathCallback;
...@@ -113,7 +119,7 @@ public class WebActivity extends BaseActivity implements View.OnClickListener { ...@@ -113,7 +119,7 @@ public class WebActivity extends BaseActivity implements View.OnClickListener {
return true; return true;
} }
}); });
mWebViewPlus.setWebViewClient(new DefWebViewClient() { mWebViewPlus.setWebViewClient(new DefWebViewClient(DefWebViewClient.CHECK_ID_WEB_VIEW_NEW_ACTIVITY) {
@Override @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) { public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url); return super.shouldOverrideUrlLoading(view, url);
...@@ -186,6 +192,7 @@ public class WebActivity extends BaseActivity implements View.OnClickListener { ...@@ -186,6 +192,7 @@ public class WebActivity extends BaseActivity implements View.OnClickListener {
}); });
} }
}); });
DuelAssistantManagement.getInstance().addDuelAssistantListener(this);
} }
@Override @Override
...@@ -284,6 +291,7 @@ public class WebActivity extends BaseActivity implements View.OnClickListener { ...@@ -284,6 +291,7 @@ public class WebActivity extends BaseActivity implements View.OnClickListener {
mWebViewPlus.stopLoading(); mWebViewPlus.stopLoading();
mWebViewPlus.setWebChromeClient(null); mWebViewPlus.setWebChromeClient(null);
mWebViewPlus.setWebViewClient(null); mWebViewPlus.setWebViewClient(null);
DuelAssistantManagement.getInstance().removeDuelAssistantListener(this);
//mWebViewPlus.onDestroy(); //mWebViewPlus.onDestroy();
super.onDestroy(); super.onDestroy();
} }
...@@ -355,4 +363,41 @@ public class WebActivity extends BaseActivity implements View.OnClickListener { ...@@ -355,4 +363,41 @@ public class WebActivity extends BaseActivity implements View.OnClickListener {
String uri = Constants.WIKI_SEARCH_URL + String.format("%08d", cardInfo.getCode()) + "#faq"; String uri = Constants.WIKI_SEARCH_URL + String.format("%08d", cardInfo.getCode()) + "#faq";
WebActivity.open(context, cardInfo.Name, uri); WebActivity.open(context, cardInfo.Name, uri);
} }
@Override
public void onJoinRoom(String host, int port, String password, int id) {
}
@Override
public void onCardQuery(String key, int id) {
}
@Override
public boolean isListenerEffective() {
return Util.isContextExisted(getActivity());
}
@Override
public void onSaveDeck(Uri uri, List<Integer> mainList, List<Integer> exList, List<Integer> sideList, boolean isCompleteDeck, String exception, int id) {
if (!TextUtils.isEmpty(exception)) {
YGOUtil.showTextToast("卡组解析失败,原因为:" + exception);
return;
}
DialogPlus dialog = new DialogPlus(getContext());
dialog.setTitle(R.string.question);
dialog.setMessage(getString(R.string.web_warn_save_deck));
dialog.setMessageGravity(Gravity.CENTER_HORIZONTAL);
dialog.setLeftButtonText(R.string.Cancel);
dialog.setRightButtonText(R.string.open);
dialog.show();
dialog.setLeftButtonListener((dlg, s) -> {
dialog.dismiss();
});
dialog.setRightButtonListener((dlg, s) -> {
dialog.dismiss();
finish();
});
}
} }
...@@ -72,6 +72,7 @@ import cn.garymb.ygomobile.ui.cards.CardDetailRandom; ...@@ -72,6 +72,7 @@ import cn.garymb.ygomobile.ui.cards.CardDetailRandom;
import cn.garymb.ygomobile.ui.mycard.McNews; import cn.garymb.ygomobile.ui.mycard.McNews;
import cn.garymb.ygomobile.ui.mycard.MyCard; import cn.garymb.ygomobile.ui.mycard.MyCard;
import cn.garymb.ygomobile.ui.mycard.mcchat.util.ImageUtil; import cn.garymb.ygomobile.ui.mycard.mcchat.util.ImageUtil;
import cn.garymb.ygomobile.ui.plus.DefWebViewClient;
import cn.garymb.ygomobile.ui.plus.DialogPlus; import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit; import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.ui.widget.Shimmer; import cn.garymb.ygomobile.ui.widget.Shimmer;
...@@ -131,6 +132,13 @@ public class HomeFragment extends BaseFragemnt implements OnDuelAssistantListene ...@@ -131,6 +132,13 @@ public class HomeFragment extends BaseFragemnt implements OnDuelAssistantListene
private Bundle mBundle; private Bundle mBundle;
private View layoutView; private View layoutView;
private boolean isShouldSaveAndOpenDeck = false;
private Uri pendingUri;
private List<Integer> pendingMainList;
private List<Integer> pendingExList;
private List<Integer> pendingSideList;
private boolean pendingIsCompleteDeck;
@Nullable @Nullable
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
...@@ -565,11 +573,11 @@ public class HomeFragment extends BaseFragemnt implements OnDuelAssistantListene ...@@ -565,11 +573,11 @@ public class HomeFragment extends BaseFragemnt implements OnDuelAssistantListene
@Override @Override
public void onSaveDeck(Uri uri, List<Integer> mainList, List<Integer> exList, List<Integer> sideList, boolean isCompleteDeck, String exception, int id) { public void onSaveDeck(Uri uri, List<Integer> mainList, List<Integer> exList, List<Integer> sideList, boolean isCompleteDeck, String exception, int id) {
saveDeck(uri, mainList, exList, sideList, isCompleteDeck, exception); saveDeck(uri, mainList, exList, sideList, isCompleteDeck, exception, id != DefWebViewClient.CHECK_ID_WEB_VIEW_NEW_ACTIVITY);
} }
public void saveDeck(Uri uri, List<Integer> mainList, List<Integer> exList, List<Integer> sideList, boolean isCompleteDeck, String exception) { public void saveDeck(Uri uri, List<Integer> mainList, List<Integer> exList, List<Integer> sideList, boolean isCompleteDeck, String exception, boolean isShowDialog) {
if (!TextUtils.isEmpty(exception)) { if (isShowDialog && !TextUtils.isEmpty(exception)) {
YGOUtil.showTextToast("卡组解析失败,原因为:" + exception); YGOUtil.showTextToast("卡组解析失败,原因为:" + exception);
return; return;
} }
...@@ -598,36 +606,54 @@ public class HomeFragment extends BaseFragemnt implements OnDuelAssistantListene ...@@ -598,36 +606,54 @@ public class HomeFragment extends BaseFragemnt implements OnDuelAssistantListene
sideList.set(sideList.indexOf(id), ArrayUtil.get(newIDsArray, ArrayUtil.indexOf(oldIDsArray, id))); sideList.set(sideList.indexOf(id), ArrayUtil.get(newIDsArray, ArrayUtil.indexOf(oldIDsArray, id)));
} }
} }
DialogPlus dialog = new DialogPlus(getContext());
dialog.setTitle(R.string.question); if (isShowDialog) {
dialog.setMessage(R.string.find_deck_text); DialogPlus dialog = new DialogPlus(getContext());
dialog.setMessageGravity(Gravity.CENTER_HORIZONTAL); dialog.setTitle(R.string.question);
dialog.setLeftButtonText(R.string.Cancel); dialog.setMessage(R.string.find_deck_text);
dialog.setRightButtonText(R.string.save_n_open); dialog.setMessageGravity(Gravity.CENTER_HORIZONTAL);
dialog.show(); dialog.setLeftButtonText(R.string.Cancel);
dialog.setLeftButtonListener((dlg, s) -> { dialog.setRightButtonText(R.string.save_n_open);
dialog.dismiss(); dialog.show();
}); dialog.setLeftButtonListener((dlg, s) -> {
dialog.setRightButtonListener((dlg, s) -> { dialog.dismiss();
dialog.dismiss(); });
Deck deck; dialog.setRightButtonListener((dlg, s) -> {
//如果是卡组url dialog.dismiss();
if (uri != null) { saveAndOpenDeck(uri, mainList, exList, sideList, isCompleteDeck);
deck = new Deck(uri, mainList, exList, sideList); });
} else {
if (isAdded() && isResumed()) {
saveAndOpenDeck(uri, mainList, exList, sideList, isCompleteDeck);
} else { } else {
deck = new Deck(getString(R.string.rename_deck) + System.currentTimeMillis(), mainList, exList, sideList); isShouldSaveAndOpenDeck = true;
} pendingUri = uri;
deck.setCompleteDeck(isCompleteDeck); pendingMainList = mainList;
File file = deck.saveTemp(AppsSettings.get().getDeckDir()); pendingExList = exList;
if (!deck.isCompleteDeck()) { pendingSideList = sideList;
YGOUtil.showTextToast(activity.getString(R.string.tip_deckInfo_isNot_completeDeck)); pendingIsCompleteDeck = isCompleteDeck;
} }
if (!file.getAbsolutePath().isEmpty()) { }
mBundle.putString("setDeck", file.getAbsolutePath()); }
activity.fragment_deck_cards.setArguments(mBundle);
} private void saveAndOpenDeck(Uri uri, List<Integer> mainList, List<Integer> exList, List<Integer> sideList, boolean isCompleteDeck) {
activity.switchFragment(activity.fragment_deck_cards, 2, true); Deck deck;
}); //如果是卡组url
if (uri != null) {
deck = new Deck(uri, mainList, exList, sideList);
} else {
deck = new Deck(getString(R.string.rename_deck) + System.currentTimeMillis(), mainList, exList, sideList);
}
deck.setCompleteDeck(isCompleteDeck);
File file = deck.saveTemp(AppsSettings.get().getDeckDir());
if (!deck.isCompleteDeck()) {
YGOUtil.showTextToast(activity.getString(R.string.tip_deckInfo_isNot_completeDeck));
}
if (!file.getAbsolutePath().isEmpty()) {
mBundle.putString("setDeck", file.getAbsolutePath());
activity.fragment_deck_cards.setArguments(mBundle);
}
activity.switchFragment(activity.fragment_deck_cards, 2, true);
} }
@Override @Override
...@@ -725,6 +751,19 @@ public class HomeFragment extends BaseFragemnt implements OnDuelAssistantListene ...@@ -725,6 +751,19 @@ public class HomeFragment extends BaseFragemnt implements OnDuelAssistantListene
BacktoDuel(); BacktoDuel();
//server list //server list
mServerListManager.syncLoadData(); mServerListManager.syncLoadData();
if (isShouldSaveAndOpenDeck
&& pendingMainList != null
&& pendingExList != null
&& pendingSideList != null
) {
saveAndOpenDeck(pendingUri, pendingMainList, pendingExList, pendingSideList, pendingIsCompleteDeck);
isShouldSaveAndOpenDeck = false;
pendingUri = null;
pendingMainList = null;
pendingExList = null;
pendingSideList = null;
pendingIsCompleteDeck = false;
}
} }
@Override @Override
......
...@@ -6,11 +6,24 @@ import com.tencent.smtt.sdk.WebView; ...@@ -6,11 +6,24 @@ import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient; import com.tencent.smtt.sdk.WebViewClient;
public class DefWebViewClient extends WebViewClient { public class DefWebViewClient extends WebViewClient {
private static final int CHECK_ID_WEB_VIEW = 100; public static final int CHECK_ID_WEB_VIEW = 100;
public static final int CHECK_ID_WEB_VIEW_NEW_ACTIVITY = 101;
private final int daCheckId;
public DefWebViewClient() {
this(CHECK_ID_WEB_VIEW);
}
public DefWebViewClient(int daCheckId) {
super();
this.daCheckId = daCheckId;
}
@Override @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) { public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith(DARecord.DECK_URL_PREFIX)) { if (url.startsWith(DARecord.DECK_URL_PREFIX)) {
DuelAssistantManagement.getInstance().deckCheck(url, CHECK_ID_WEB_VIEW); DuelAssistantManagement.getInstance().deckCheck(url, daCheckId);
return true; return true;
} }
return false; return false;
......
...@@ -375,5 +375,7 @@ ...@@ -375,5 +375,7 @@
<string name="replay_list">lista de reproducción</string> <string name="replay_list">lista de reproducción</string>
<string name="user_privacy_policy">Política de Privacidad del Usuario</string> <string name="user_privacy_policy">Política de Privacidad del Usuario</string>
<string name="about_user_privacy_policy">Explicación de los permisos utilizados por YGOMobile</string> <string name="about_user_privacy_policy">Explicación de los permisos utilizados por YGOMobile</string>
<string name="open">打开</string>
<string name="web_warn_save_deck">打开卡组将关闭正在浏览的网页,是否关闭网页并打开卡组</string>
</resources> </resources>
...@@ -369,4 +369,6 @@ ...@@ -369,4 +369,6 @@
<string name="replay_list">リプレイ</string> <string name="replay_list">リプレイ</string>
<string name="user_privacy_policy">ユーザーのプライバシーポリシー</string> <string name="user_privacy_policy">ユーザーのプライバシーポリシー</string>
<string name="about_user_privacy_policy">このアプリが使用する権限についての説明</string> <string name="about_user_privacy_policy">このアプリが使用する権限についての説明</string>
<string name="open">打开</string>
<string name="web_warn_save_deck">打开卡组将关闭正在浏览的网页,是否关闭网页并打开卡组</string>
</resources> </resources>
...@@ -370,4 +370,6 @@ ...@@ -370,4 +370,6 @@
<string name="replay_list">재생 목록</string> <string name="replay_list">재생 목록</string>
<string name="user_privacy_policy">사용자 개인정보 보호정책</string> <string name="user_privacy_policy">사용자 개인정보 보호정책</string>
<string name="about_user_privacy_policy">이 앱에서 사용하는 권한에 대한 설명</string> <string name="about_user_privacy_policy">이 앱에서 사용하는 권한에 대한 설명</string>
<string name="open">打开</string>
<string name="web_warn_save_deck">打开卡组将关闭正在浏览的网页,是否关闭网页并打开卡组</string>
</resources> </resources>
...@@ -369,4 +369,6 @@ ...@@ -369,4 +369,6 @@
<string name="tip_download_OK">已保存至</string> <string name="tip_download_OK">已保存至</string>
<string name="user_privacy_policy">用户隐私政策</string> <string name="user_privacy_policy">用户隐私政策</string>
<string name="about_user_privacy_policy">关于本应用使用的权限进行说明</string> <string name="about_user_privacy_policy">关于本应用使用的权限进行说明</string>
<string name="open">打开</string>
<string name="web_warn_save_deck">打开卡组将关闭正在浏览的网页,是否关闭网页并打开卡组</string>
</resources> </resources>
...@@ -379,4 +379,6 @@ ...@@ -379,4 +379,6 @@
<string name="card_related">Related</string> <string name="card_related">Related</string>
<string name="user_privacy_policy">User Privacy Policy</string> <string name="user_privacy_policy">User Privacy Policy</string>
<string name="about_user_privacy_policy">Explanation of the permissions used by YGOMObile</string> <string name="about_user_privacy_policy">Explanation of the permissions used by YGOMObile</string>
<string name="open">打开</string>
<string name="web_warn_save_deck">打开卡组将关闭正在浏览的网页,是否关闭网页并打开卡组</string>
</resources> </resources>
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