From 99d9d4b7a89caa8eeb4dd6b3566c9dde4fad0b96 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sun, 30 Jul 2017 15:39:07 +0800 Subject: [PATCH] fix: HelpCatologueActivity and DocumentationActivity lag --- app/build.gradle | 1 + app/proguard-rules.pro | 7 ++- .../ui/help/DocumentationActivity.java | 58 ++++++++++++------- .../ui/help/HelpCatalogueActivity.java | 42 ++++++++++++-- .../stardust/widget/CommonMarkdownView.java | 12 ++++ app/src/main/res/layout/activity_document.xml | 25 ++++++-- app/src/main/res/layout/activity_help.xml | 22 ++++++- 7 files changed, 133 insertions(+), 34 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3ae481c0..94235db1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -117,6 +117,7 @@ dependencies { compile 'com.bignerdranch.android:expandablerecyclerview:3.0.0-RC1' compile 'com.yqritc:recyclerview-flexibledivider:1.4.0' compile 'com.ashokvarma.android:bottom-navigation-bar:2.0.1' + compile 'com.wang.avi:library:2.1.3' // Tasker Plugin compile 'com.twofortyfouram:android-plugin-client-sdk-for-locale:[4.0.2, 5.0[' compile 'com.android.volley:volley:1.0.0' diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 2ea50c9f..30fb4fc1 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -126,4 +126,9 @@ -keepnames class * implements android.os.Parcelable { public static final ** CREATOR; -} \ No newline at end of file +} + +# AVLoadingView + +-keep class com.wang.avi.** { *; } +-keep class com.wang.avi.indicators.** { *; } \ No newline at end of file diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/help/DocumentationActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/help/DocumentationActivity.java index 34ac2456..78fe213b 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/help/DocumentationActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/help/DocumentationActivity.java @@ -3,11 +3,15 @@ package com.stardust.scriptdroid.ui.help; import android.content.Context; import android.content.Intent; import android.os.Bundle; +import android.webkit.WebView; import com.stardust.pio.PFile; import com.stardust.scriptdroid.ui.BaseActivity; +import com.stardust.theme.ThemeColorManagerCompat; +import com.stardust.util.UnderuseExecutors; import com.stardust.widget.CommonMarkdownView; import com.stardust.scriptdroid.R; +import com.wang.avi.AVLoadingIndicatorView; import java.io.IOException; @@ -27,46 +31,60 @@ public class DocumentationActivity extends BaseActivity { .putExtra("path", assetPath)); } - public static void openDocumentation(Context context, String title, int rawResId) { - context.startActivity(new Intent(context, DocumentationActivity.class) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - .putExtra("title", title) - .putExtra("resId", rawResId)); - } - - private String mDocumentation; + private volatile String mDocumentation; private String mTitle; + private AVLoadingIndicatorView mLoadingIndicatorView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - handleIntent(getIntent()); setUpUI(); + handleIntent(getIntent()); } private void handleIntent(Intent intent) { mTitle = intent.getStringExtra("title"); - String path = intent.getStringExtra("path"); - int rawId = intent.getIntExtra("resId", 0); - if (path != null) { - try { - mDocumentation = PFile.read(getAssets().open("help/" + path)); - } catch (IOException e) { - e.printStackTrace(); + final String path = intent.getStringExtra("path"); + if (path == null) + return; + UnderuseExecutors.execute(new Runnable() { + @Override + public void run() { + try { + mDocumentation = PFile.read(getAssets().open("help/" + path)); + } catch (IOException e) { + e.printStackTrace(); + } + runOnUiThread(new Runnable() { + @Override + public void run() { + loadDocument(); + } + }); } - } else if (rawId != 0) { - mDocumentation = PFile.read(getResources().openRawResource(rawId)); - } + }); + } private void setUpUI() { setContentView(R.layout.activity_document); setToolbarAsBack(mTitle); - loadDocument(); + setUpLoadingView(); + } + + private void setUpLoadingView() { + mLoadingIndicatorView = $(R.id.loading); + mLoadingIndicatorView.setIndicatorColor(ThemeColorManagerCompat.getColorPrimary()); } private void loadDocument() { mCommonMarkdownView = $(R.id.markdown); + mCommonMarkdownView.setOnPageFinishedListener(new CommonMarkdownView.OnPageFinishedListener() { + @Override + public void onPageFinished(WebView view, String url) { + mLoadingIndicatorView.hide(); + } + }); try { mCommonMarkdownView.loadMarkdown(mDocumentation); } catch (Exception e) { diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/help/HelpCatalogueActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/help/HelpCatalogueActivity.java index 91c74a52..d84a8bed 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/help/HelpCatalogueActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/help/HelpCatalogueActivity.java @@ -6,7 +6,6 @@ import android.os.Bundle; import android.support.annotation.Keep; import android.support.annotation.Nullable; import android.support.v7.widget.DividerItemDecoration; -import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -20,6 +19,9 @@ import com.stardust.scriptdroid.ui.BaseActivity; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.stardust.scriptdroid.R; +import com.stardust.theme.ThemeColorManagerCompat; +import com.stardust.util.UnderuseExecutors; +import com.wang.avi.AVLoadingIndicatorView; import org.json.JSONObject; @@ -48,7 +50,7 @@ public class HelpCatalogueActivity extends BaseActivity { .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); } - private static final Map> CATALOGUES; + private static Map> CATALOGUES; private static class Item extends JSONObject { @@ -86,6 +88,7 @@ public class HelpCatalogueActivity extends BaseActivity { List mItems; private RecyclerView mRecyclerView; + private AVLoadingIndicatorView mLoadingIndicatorView; private String mTitle; private View.OnClickListener mOnItemClickListener = new View.OnClickListener() { @Override @@ -100,8 +103,29 @@ public class HelpCatalogueActivity extends BaseActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - handleIntent(); setUpUI(); + if (CATALOGUES == null) { + readCatalogues(); + } else { + mLoadingIndicatorView.hide(); + handleIntent(); + } + } + + private void readCatalogues() { + UnderuseExecutors.execute(new Runnable() { + @Override + public void run() { + readCatalogues("help/catalogue.json"); + runOnUiThread(new Runnable() { + @Override + public void run() { + mLoadingIndicatorView.hide(); + handleIntent(); + } + }); + } + }); } private void handleIntent() { @@ -112,21 +136,27 @@ public class HelpCatalogueActivity extends BaseActivity { if (mTitle == null) mTitle = getString(R.string.text_help); mItems = CATALOGUES.get(catalogue); + mRecyclerView.setAdapter(new Adapter()); } private void setUpUI() { setContentView(R.layout.activity_help); setToolbarAsBack(mTitle); setUpRecyclerView(); + setUpLoadingView(); } private void setUpRecyclerView() { mRecyclerView = $(R.id.catalogue); mRecyclerView.setLayoutManager(new WrapContentLinearLayoutManager(this)); - mRecyclerView.setAdapter(new Adapter()); mRecyclerView.addItemDecoration(new DividerItemDecoration(this, RecyclerView.VERTICAL)); } + private void setUpLoadingView() { + mLoadingIndicatorView = $(R.id.loading); + mLoadingIndicatorView.setIndicatorColor(ThemeColorManagerCompat.getColorPrimary()); + } + private class Adapter extends RecyclerView.Adapter { @Override @@ -166,10 +196,10 @@ public class HelpCatalogueActivity extends BaseActivity { } } - static { + private static void readCatalogues(String path) { Map> fromJson; try { - String json = PFile.read(App.getApp().getAssets().open("help/catalogue.json")); + String json = PFile.read(App.getApp().getAssets().open(path)); Gson gson = new Gson(); Type type = new TypeToken>>() { }.getType(); diff --git a/app/src/main/java/com/stardust/widget/CommonMarkdownView.java b/app/src/main/java/com/stardust/widget/CommonMarkdownView.java index fd330d4a..408f630a 100644 --- a/app/src/main/java/com/stardust/widget/CommonMarkdownView.java +++ b/app/src/main/java/com/stardust/widget/CommonMarkdownView.java @@ -28,6 +28,10 @@ import java.util.Collections; public class CommonMarkdownView extends WebView { + public interface OnPageFinishedListener { + void onPageFinished(WebView view, String url); + } + private Parser mParser = Parser.builder().build(); private HtmlRenderer mHtmlRender = HtmlRenderer.builder() .extensions(Collections.singleton(new HeadingAnchorExtension.Builder().build())) @@ -35,6 +39,7 @@ public class CommonMarkdownView extends WebView { private String mMarkdownHtml; private String mPadding = "16px"; + private OnPageFinishedListener mOnPageFinishedListener; public CommonMarkdownView(Context context) { super(context); @@ -60,6 +65,9 @@ public class CommonMarkdownView extends WebView { @Override public void onPageFinished(WebView view, String url) { loadUrl("javascript:document.body.style.margin=\"" + mPadding + "\"; void 0"); + if (mOnPageFinishedListener != null) { + mOnPageFinishedListener.onPageFinished(view, url); + } } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @@ -89,6 +97,10 @@ public class CommonMarkdownView extends WebView { loadHtml(mMarkdownHtml); } + public void setOnPageFinishedListener(OnPageFinishedListener onPageFinishedListener) { + mOnPageFinishedListener = onPageFinishedListener; + } + private void loadHtml(String html) { loadDataWithBaseURL(null, html, "text/html", "utf-8", null); } diff --git a/app/src/main/res/layout/activity_document.xml b/app/src/main/res/layout/activity_document.xml index 0ef0d84c..6445c6ff 100644 --- a/app/src/main/res/layout/activity_document.xml +++ b/app/src/main/res/layout/activity_document.xml @@ -20,9 +20,26 @@ - + android:layout_height="match_parent"> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_help.xml b/app/src/main/res/layout/activity_help.xml index 323b9689..7c4dfe4d 100644 --- a/app/src/main/res/layout/activity_help.xml +++ b/app/src/main/res/layout/activity_help.xml @@ -21,8 +21,24 @@ - + android:layout_height="match_parent"> + + + + + + + \ No newline at end of file