Search in sources :

Example 1 with DIALOG_IMPORT_ADD_CONFIRM

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;
    }
}
Also used : Bundle(android.os.Bundle) URLDecoder(java.net.URLDecoder) AnalyticsDialogFragment(com.ichi2.anki.analytics.AnalyticsDialogFragment) R(com.ichi2.anki.R) CollectionHelper(com.ichi2.anki.CollectionHelper) File(java.io.File) Timber(timber.log.Timber) List(java.util.List) UIUtils(com.ichi2.anki.UIUtils) ImportUtils(com.ichi2.utils.ImportUtils) MaterialDialog(com.afollestad.materialdialogs.MaterialDialog) Utils(com.ichi2.libanki.Utils) Resources(android.content.res.Resources) MaterialDialog(com.afollestad.materialdialogs.MaterialDialog) List(java.util.List) Resources(android.content.res.Resources)

Example 2 with DIALOG_IMPORT_ADD_CONFIRM

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);
}
Also used : JavascriptInterface(android.webkit.JavascriptInterface) RequiresApi(androidx.annotation.RequiresApi) UMImage(com.umeng.socialize.media.UMImage) LinearLayout(android.widget.LinearLayout) Bundle(android.os.Bundle) AsyncDialogFragment(com.ichi2.anki.dialogs.AsyncDialogFragment) NonNull(androidx.annotation.NonNull) Uri(android.net.Uri) ColorDrawable(android.graphics.drawable.ColorDrawable) DeviceConfigInternal.context(com.umeng.socialize.utils.DeviceConfigInternal.context) Gson(com.google.gson.Gson) Map(java.util.Map) ForwardingSource(okio.ForwardingSource) WebViewClient(android.webkit.WebViewClient) ClipboardManager(android.content.ClipboardManager) View(android.view.View) TaskData(com.ichi2.async.TaskData) WebView(android.webkit.WebView) MediaType(okhttp3.MediaType) ResponseBody(okhttp3.ResponseBody) SHARE_MEDIA(com.umeng.socialize.bean.SHARE_MEDIA) Request(okhttp3.Request) SHOW_STUDYOPTIONS(com.ichi2.anki.DeckPicker.SHOW_STUDYOPTIONS) JSONObject(com.ichi2.utils.JSONObject) ViewGroup(android.view.ViewGroup) FileNotFoundException(java.io.FileNotFoundException) Timber(timber.log.Timber) BufferedSource(okio.BufferedSource) ShareAction(com.umeng.socialize.ShareAction) Toolbar(androidx.appcompat.widget.Toolbar) TaskListenerWithContext(com.ichi2.async.TaskListenerWithContext) MaterialDialog(com.afollestad.materialdialogs.MaterialDialog) Window(android.view.Window) Context(android.content.Context) TaskListener(com.ichi2.async.TaskListener) Okio(okio.Okio) KeyEvent(android.view.KeyEvent) Source(okio.Source) DIALOG_IMPORT_ADD_CONFIRM(com.ichi2.anki.dialogs.ImportDialog.DIALOG_IMPORT_ADD_CONFIRM) Environment(android.os.Environment) UMWeb(com.umeng.socialize.media.UMWeb) ImportDialog(com.ichi2.anki.dialogs.ImportDialog) UMShareListener(com.umeng.socialize.UMShareListener) Dialog(android.app.Dialog) Intent(android.content.Intent) HashMap(java.util.HashMap) StyledProgressDialog(com.ichi2.themes.StyledProgressDialog) MenuItem(android.view.MenuItem) ClipData(android.content.ClipData) LEFT(com.ichi2.anim.ActivityTransitionAnimation.LEFT) SuppressLint(android.annotation.SuppressLint) JSONArray(com.ichi2.utils.JSONArray) WebSettings(android.webkit.WebSettings) Toast(android.widget.Toast) Menu(android.view.Menu) Response(okhttp3.Response) AnkiPackageImporter(com.ichi2.libanki.importer.AnkiPackageImporter) Call(okhttp3.Call) Callback(okhttp3.Callback) Build(android.os.Build) WebChromeClient(android.webkit.WebChromeClient) OutputStream(java.io.OutputStream) Buffer(okio.Buffer) URLUtil(android.webkit.URLUtil) FileOutputStream(java.io.FileOutputStream) TextUtils(android.text.TextUtils) IOException(java.io.IOException) Themes(com.ichi2.themes.Themes) File(java.io.File) Color(android.graphics.Color) Gravity(android.view.Gravity) OkHttpClient(okhttp3.OkHttpClient) ActivityTransitionAnimation(com.ichi2.anim.ActivityTransitionAnimation) InputStream(java.io.InputStream) Call(okhttp3.Call) OkHttpClient(okhttp3.OkHttpClient) Request(okhttp3.Request) IOException(java.io.IOException) Response(okhttp3.Response) Callback(okhttp3.Callback) WebChromeClient(android.webkit.WebChromeClient) AsyncDialogFragment(com.ichi2.anki.dialogs.AsyncDialogFragment) WebView(android.webkit.WebView) File(java.io.File) Toolbar(androidx.appcompat.widget.Toolbar) WebViewClient(android.webkit.WebViewClient) SuppressLint(android.annotation.SuppressLint)

Aggregations

Bundle (android.os.Bundle)2 MaterialDialog (com.afollestad.materialdialogs.MaterialDialog)2 SuppressLint (android.annotation.SuppressLint)1 Dialog (android.app.Dialog)1 ClipData (android.content.ClipData)1 ClipboardManager (android.content.ClipboardManager)1 Context (android.content.Context)1 Intent (android.content.Intent)1 Resources (android.content.res.Resources)1 Color (android.graphics.Color)1 ColorDrawable (android.graphics.drawable.ColorDrawable)1 Uri (android.net.Uri)1 Build (android.os.Build)1 Environment (android.os.Environment)1 TextUtils (android.text.TextUtils)1 Gravity (android.view.Gravity)1 KeyEvent (android.view.KeyEvent)1 Menu (android.view.Menu)1 MenuItem (android.view.MenuItem)1 View (android.view.View)1