use of com.ichi2.anki.dialogs.ImportDialog.DIALOG_IMPORT_ADD_CONFIRM in project AnkiChinaAndroid by ankichinateam.
the class ImportDialog method onCreateDialog.
@Override
public MaterialDialog onCreateDialog(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int mType = getArguments().getInt("dialogType");
Resources res = getResources();
MaterialDialog.Builder builder = new MaterialDialog.Builder(getActivity());
builder.cancelable(true);
switch(mType) {
case DIALOG_IMPORT_HINT:
{
// Instruct the user that they need to put their APKG files into the AnkiDroid directory
return builder.title(res.getString(R.string.import_title)).content(res.getString(R.string.import_hint, CollectionHelper.getCurrentAnkiDroidDirectory(getActivity()))).positiveText(res.getString(R.string.dialog_ok)).negativeText(res.getString(R.string.dialog_cancel)).onPositive((dialog, which) -> mImportDialogListener.showImportDialog(DIALOG_IMPORT_SELECT)).onNegative((dialog, which) -> dismissAllDialogFragments()).show();
}
case DIALOG_IMPORT_SELECT:
{
// Allow user to choose from the list of available APKG files
List<File> fileList = Utils.getImportableDecks(getActivity());
if (fileList.size() == 0) {
UIUtils.showThemedToast(getActivity(), getResources().getString(R.string.upgrade_import_no_file_found, "'.apkg'"), false);
return builder.showListener(dialog -> dialog.cancel()).show();
} else {
String[] tts = new String[fileList.size()];
final String[] importValues = new String[fileList.size()];
for (int i = 0; i < tts.length; i++) {
tts[i] = fileList.get(i).getName();
importValues[i] = fileList.get(i).getAbsolutePath();
}
return builder.title(res.getString(R.string.import_select_title)).items(tts).itemsCallback((materialDialog, view, i, charSequence) -> {
String importPath = importValues[i];
// If collection package, we assume the collection will be replaced
if (ImportUtils.isCollectionPackage(filenameFromPath(importPath))) {
mImportDialogListener.showImportDialog(DIALOG_IMPORT_REPLACE_CONFIRM, importPath);
// Otherwise we add the file since exported decks / shared decks can't be imported via replace anyway
} else {
mImportDialogListener.showImportDialog(DIALOG_IMPORT_ADD_CONFIRM, importPath);
}
}).show();
}
}
case DIALOG_IMPORT_ADD_CONFIRM:
{
String displayFileName = convertToDisplayName(getArguments().getString("dialogMessage"));
return builder.title(res.getString(R.string.import_title)).content(res.getString(R.string.import_message_add_confirm, filenameFromPath(displayFileName))).positiveText(res.getString(R.string.import_message_add)).negativeText(res.getString(R.string.dialog_cancel)).onPositive((dialog, which) -> {
mImportDialogListener.importAdd(getArguments().getString("dialogMessage"));
dismissAllDialogFragments();
}).show();
}
case DIALOG_IMPORT_REPLACE_CONFIRM:
{
String displayFileName = convertToDisplayName(getArguments().getString("dialogMessage"));
return builder.title(res.getString(R.string.import_title)).content(res.getString(R.string.import_message_replace_confirm, displayFileName)).positiveText(res.getString(R.string.dialog_positive_replace)).negativeText(res.getString(R.string.dialog_cancel)).onPositive((dialog, which) -> {
mImportDialogListener.importReplace(getArguments().getString("dialogMessage"));
dismissAllDialogFragments();
}).show();
}
default:
return null;
}
}
use of com.ichi2.anki.dialogs.ImportDialog.DIALOG_IMPORT_ADD_CONFIRM in project AnkiChinaAndroid by ankichinateam.
the class WebViewActivity method onCreate.
@SuppressLint({ "AddJavascriptInterface", "SetJavaScriptEnabled" })
@Override
@SuppressWarnings("deprecation")
protected void onCreate(Bundle savedInstanceState) {
Themes.setThemeLegacy(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.web_view);
Toolbar toolbar = findViewById(R.id.toolbar);
if (toolbar != null) {
// toolbar.inflateMenu(R.menu.web_view);
setSupportActionBar(toolbar);
}
getSupportActionBar().setTitle(getIntent().getStringExtra("url"));
// Add a home button to the actionbar
// getSupportActionBar().setHomeButtonEnabled(true);
// getSupportActionBar().setDisplayHomeAsUpEnabled(true);
webView = findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
// webView.getSettings().setAppCacheMaxSize(1024*1024*8);
webView.getSettings().setUserAgentString("User-Agent:Android");
// 可以读取文件缓存
webView.getSettings().setAllowFileAccess(true);
// 开启H5(APPCache)缓存功能
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
webView.getSettings().setAppCachePath(appCachePath);
// webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY);
webView.setDownloadListener((url, userAgent, contentDisposition, mimeType, contentLength) -> {
String fileName = URLUtil.guessFileName(url, contentDisposition, mimeType);
Request request = new Request.Builder().url(url).build();
// 构建我们的进度监听器
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(), fileName);
final ProgressResponseBody.ProgressListener listener = (bytesRead, contentLength1, done) -> {
// 计算百分比并更新ProgressBar
if (contentLength1 != 0) {
final int percent = (int) (100 * bytesRead / contentLength1);
mProgressDialog.setProgress(percent);
}
if (done) {
runOnUiThread(() -> {
mProgressDialog.dismiss();
// fixme 下载的如果不是卡牌,需要执行通用程序
AsyncDialogFragment newFragment = ImportDialog.newInstance(DIALOG_IMPORT_ADD_CONFIRM, file.getAbsolutePath(), WebViewActivity.this);
showAsyncDialogFragment(newFragment);
});
}
};
OkHttpClient client = new OkHttpClient.Builder().addNetworkInterceptor(chain -> {
Response response = chain.proceed(chain.request());
return response.newBuilder().body(new ProgressResponseBody(response.body(), listener)).build();
}).build();
// 发送响应
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) {
Timber.i("onResponse:" + response.isSuccessful());
writeFile(file, response);
}
});
mProgressDialog = new MaterialDialog.Builder(WebViewActivity.this).title("正在下载").content("请不要做任何操作,保持屏幕常亮,切换页面或APP会导致下载中断!").progress(false, 100, false).cancelable(false).negativeText("取消下载").onNegative((dialog, which) -> {
call.cancel();
dialog.dismiss();
}).show();
});
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
writeData(getIntent().getStringExtra("token"));
WebViewActivity.this.getSupportActionBar().setTitle(title);
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
writeData(getIntent().getStringExtra("token"));
}
@SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Timber.i("shouldOverrideUrlLoading:%s", url);
if (url.startsWith("openexternalbrowser://url=")) {
// startThirdpartyApp("https://www.baidu.com");
openUrl(Uri.parse(url.replace("openexternalbrowser://url=", "")));
} else if (urlCanLoad(url.toLowerCase())) {
// 加载正常网页
view.loadUrl(url, map);
} else {
// 打开第三方应用或者下载apk等
startThirdpartyApp(url);
}
return true;
}
});
webView.setOnKeyListener((v, keyCode, event) -> {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
// 按返回键操作并且能回退网页
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
// 后退
webView.goBack();
return true;
}
}
// showShareDialog();
return false;
});
webView.addJavascriptInterface(new JavaScriptFunction(), "AnkiDroidJS");
map.put("Referer", "https://file.ankichinas.cn");
webView.loadUrl(getIntent().getStringExtra("url"), map);
}
Aggregations