Search in sources :

Example 1 with AsyncDialogFragment

use of com.ichi2.anki.dialogs.AsyncDialogFragment in project AnkiChinaAndroid by ankichinateam.

the class AnkiActivity method showDatabaseErrorDialog.

public void showDatabaseErrorDialog(int id) {
    AsyncDialogFragment newFragment = DatabaseErrorDialog.newInstance(id);
    showAsyncDialogFragment(newFragment);
}
Also used : AsyncDialogFragment(com.ichi2.anki.dialogs.AsyncDialogFragment)

Example 2 with AsyncDialogFragment

use of com.ichi2.anki.dialogs.AsyncDialogFragment in project Anki-Android by ankidroid.

the class AnkiActivity method showSimpleMessageDialog.

/**
 * Show a simple message dialog, dismissing the message without taking any further action when OK button is pressed.
 * If a DialogFragment cannot be shown due to the Activity being stopped then the message is shown in the
 * notification bar instead.
 *
 * @param message
 * @param reload flag which forces app to be restarted when true
 */
public void showSimpleMessageDialog(String message, boolean reload) {
    AsyncDialogFragment newFragment = SimpleMessageDialog.newInstance(message, reload);
    showAsyncDialogFragment(newFragment);
}
Also used : AsyncDialogFragment(com.ichi2.anki.dialogs.AsyncDialogFragment)

Example 3 with AsyncDialogFragment

use of com.ichi2.anki.dialogs.AsyncDialogFragment in project Anki-Android by ankidroid.

the class DeckPicker method showSyncErrorDialog.

/**
 * Show a specific sync error dialog
 * @param id id of dialog to show
 * @param message text to show
 */
@Override
public void showSyncErrorDialog(int id, String message) {
    AsyncDialogFragment newFragment = SyncErrorDialog.newInstance(id, message);
    showAsyncDialogFragment(newFragment, NotificationChannels.Channel.SYNC);
}
Also used : AsyncDialogFragment(com.ichi2.anki.dialogs.AsyncDialogFragment)

Example 4 with AsyncDialogFragment

use of com.ichi2.anki.dialogs.AsyncDialogFragment 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)

Example 5 with AsyncDialogFragment

use of com.ichi2.anki.dialogs.AsyncDialogFragment in project AnkiChinaAndroid by ankichinateam.

the class MyAccount method preLogin.

// void onTokenExpired() {
// AsyncDialogFragment newFragment = SyncErrorDialog.newInstance(SyncErrorDialog.DIALOG_USER_NOT_LOGGED_IN_SYNC, "");
// showAsyncDialogFragment(newFragment, NotificationChannels.Channel.SYNC);
// }
private void preLogin() {
    // Hide soft keyboard
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(mPhoneNum.getWindowToken(), 0);
    // trim spaces, issue 1586
    String phone = mPhoneNum.getText().toString().trim();
    String authCode = mAuthCode.getText().toString();
    if (PhoneFormatCheckUtils.isChinaPhoneLegal(phone) && !"".equalsIgnoreCase(authCode) && authCode.length() == 6) {
        try {
            org.json.JSONObject jo = new org.json.JSONObject();
            jo.put("phone", phone);
            jo.put("code", authCode);
            jo.put("key", getAuthKey());
            Consts.saveAndUpdateLoginServer(Consts.LOGIN_SERVER_ANKICHINA);
            Connection.sendCommonPost(preLoginListener, new Connection.Payload("authorizations", jo.toString(), Payload.REST_TYPE_POST, HostNumFactory.getInstance(this)));
        } catch (Exception e) {
            UIUtils.showSimpleSnackbar(this, R.string.invalid_account, true);
        }
    } else {
        UIUtils.showSimpleSnackbar(this, R.string.invalid_phone, true);
    }
}
Also used : JSONObject(org.json.JSONObject) Payload(com.ichi2.async.Connection.Payload) JSONObject(org.json.JSONObject) Connection(com.ichi2.async.Connection) InputMethodManager(android.view.inputmethod.InputMethodManager) JSONException(org.json.JSONException) ParseException(java.text.ParseException)

Aggregations

AsyncDialogFragment (com.ichi2.anki.dialogs.AsyncDialogFragment)9 Intent (android.content.Intent)2 Bundle (android.os.Bundle)2 SuppressLint (android.annotation.SuppressLint)1 TargetApi (android.annotation.TargetApi)1 Dialog (android.app.Dialog)1 PendingIntent (android.app.PendingIntent)1 ClipData (android.content.ClipData)1 ClipboardManager (android.content.ClipboardManager)1 Context (android.content.Context)1 SharedPreferences (android.content.SharedPreferences)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