diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 69f162b2..b9831b27 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/build.gradle b/app/build.gradle index ef7a2f7c..328eb710 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,7 +21,7 @@ android { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true ndk { - abiFilters 'armeabi-v7a' + abiFilters 'armeabi-v7a', 'x86' } } buildTypes { diff --git a/app/src/main/java/org/autojs/autojs/App.java b/app/src/main/java/org/autojs/autojs/App.java index 7738151e..b0c7c854 100644 --- a/app/src/main/java/org/autojs/autojs/App.java +++ b/app/src/main/java/org/autojs/autojs/App.java @@ -18,6 +18,7 @@ import com.stardust.autojs.core.ui.inflater.ImageLoader; import com.stardust.autojs.core.ui.inflater.util.Drawables; import com.stardust.theme.ThemeColor; import com.stardust.theme.ThemeColorManager; +import com.tencent.bugly.Bugly; import com.tencent.bugly.crashreport.CrashReport; import org.autojs.autojs.autojs.AutoJs; diff --git a/app/src/main/java/org/autojs/autojs/external/receiver/DynamicBroadcastReceivers.java b/app/src/main/java/org/autojs/autojs/external/receiver/DynamicBroadcastReceivers.java index b80bcc39..faf0388c 100644 --- a/app/src/main/java/org/autojs/autojs/external/receiver/DynamicBroadcastReceivers.java +++ b/app/src/main/java/org/autojs/autojs/external/receiver/DynamicBroadcastReceivers.java @@ -4,6 +4,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.IntentFilter; import android.os.Build; +import android.support.design.widget.TabLayout; import android.util.Log; import android.util.Pair; diff --git a/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityFragment.java b/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityFragment.java index e9f0b637..4cfc18b3 100644 --- a/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/main/community/CommunityFragment.java @@ -63,7 +63,7 @@ public class CommunityFragment extends ViewPagerFragment implements BackPressedH @AfterViews void setUpViews() { mWebView = mEWebView.getWebView(); - String url = "http://www.autojs.org/"; + String url = "https://www.autojs.org/"; Bundle savedWebViewState = getArguments().getBundle("savedWebViewState"); if (savedWebViewState != null) { mWebView.restoreState(savedWebViewState); diff --git a/app/src/main/java/org/autojs/autojs/ui/splash/SplashActivity.java b/app/src/main/java/org/autojs/autojs/ui/splash/SplashActivity.java index ec5f693a..62411794 100644 --- a/app/src/main/java/org/autojs/autojs/ui/splash/SplashActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/splash/SplashActivity.java @@ -3,19 +3,16 @@ package org.autojs.autojs.ui.splash; import android.Manifest; import android.os.Bundle; import android.os.Handler; +import android.os.SystemClock; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.Log; import android.view.View; -import android.widget.ImageView; +import com.stardust.autojs.core.image.OpenCVHelper; import com.xcy8.ads.listener.LoadAdListener; import com.xcy8.ads.view.FullScreenAdView; -import com.xcy8.ads.view.skipview.OnFullScreenListener; -import org.androidannotations.annotations.AfterViews; -import org.androidannotations.annotations.EActivity; -import org.androidannotations.annotations.ViewById; import org.autojs.autojs.Constants; import org.autojs.autojs.Pref; import org.autojs.autojs.R; @@ -33,6 +30,7 @@ public class SplashActivity extends BaseActivity { public static final String FORCE_SHOW_AD = "forceShowAd"; private static final String LOG_TAG = SplashActivity.class.getSimpleName(); + private static final long INIT_TIMEOUT = 1500; private boolean mCanEnterNextActivity = false; @@ -47,19 +45,31 @@ public class SplashActivity extends BaseActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mHandler = new Handler(); - mNotStartMainActivity = getIntent().getBooleanExtra(NOT_START_MAIN_ACTIVITY, false); + init(); boolean forceShowAd = getIntent().getBooleanExtra(FORCE_SHOW_AD, false); - setContentView(R.layout.activity_splash); - mFullScreenAdView = findViewById(R.id.full_screen_view); + final long millis = SystemClock.uptimeMillis(); if (!forceShowAd && !Pref.shouldShowAd()) { mFullScreenAdView.setVisibility(View.INVISIBLE); - mHandler.postDelayed(this::enterNextActivity, 1500); } else { - if(checkPermission(Manifest.permission.READ_PHONE_STATE)){ + if (checkPermission(Manifest.permission.READ_PHONE_STATE)) { fetchSplashAD(); } } + OpenCVHelper.initIfNeeded(this, () -> { + long delay = INIT_TIMEOUT - (SystemClock.uptimeMillis() - millis); + if (delay <= 0) { + enterNextActivity(); + return; + } + mHandler.postDelayed(SplashActivity.this::enterNextActivity, delay); + }); + } + + private void init() { + setContentView(R.layout.activity_splash); + mFullScreenAdView = findViewById(R.id.full_screen_view); + mHandler = new Handler(); + mNotStartMainActivity = getIntent().getBooleanExtra(NOT_START_MAIN_ACTIVITY, false); } void enterNextActivity() { @@ -116,7 +126,7 @@ public class SplashActivity extends BaseActivity { }); mHandler.postDelayed(() -> { if (mAdLoading) { - enterNextActivity(); + enterNextActivity(); } }, 2000); mFullScreenAdView.loadAd(getAdId(), false); diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index d7849859..8cf59738 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -71,6 +71,7 @@ finish()) + .show(); + break; + case 2: + Log.e(LOG_TAG, "Package installation failed!"); + new MaterialDialog.Builder(mActivity) + .title("OpenCV Manager") + .content("Package installation failed!") + .cancelable(false) + .positiveText("OK") + .onPositive((dialog, which) -> finish()) + .show(); + break; + case 3: + Log.d(LOG_TAG, "OpenCV library instalation was canceled by user"); + finish(); + break; + case 4: + Log.d(LOG_TAG, "OpenCV Manager Service is uncompatible with this app!"); + new MaterialDialog.Builder(mActivity) + .title("OpenCV Manager") + .content("OpenCV Manager service is incompatible with this app. Try to update it via Google Play.") + .cancelable(false) + .positiveText("OK") + .onPositive((dialog, which) -> finish()) + .show(); + } + + } + + public void onPackageInstall(int operation, final InstallCallbackInterface callback) { + switch (operation) { + case 0: + new MaterialDialog.Builder(mActivity) + .title("Package not found") + .content(callback.getPackageName() + " package was not found! Try to install it?") + .cancelable(false) + .positiveText("Yes") + .onPositive((dialog, which) -> callback.install()) + .negativeText("No") + .onNegative(((dialog, which) -> callback.cancel())) + .show(); + break; + case 1: + new MaterialDialog.Builder(mActivity) + .title("OpenCV is not ready") + .content("Installation is in progress. Wait or exit?") + .cancelable(false) + .positiveText("Wait") + .onPositive((dialog, which) -> callback.wait_install()) + .negativeText("Exit") + .onNegative(((dialog, which) -> callback.cancel())) + .show(); + } + + } + + protected void finish() { + mActivity.finish(); + } + } + } diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/inflaters/LinearLayoutInflater.java b/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/inflaters/LinearLayoutInflater.java index 81cb5a91..fd150e45 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/inflaters/LinearLayoutInflater.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/inflaters/LinearLayoutInflater.java @@ -19,6 +19,12 @@ public class LinearLayoutInflater extends ViewGroupInfla .map("vertical", LinearLayout.VERTICAL) .map("horizontal", LinearLayout.HORIZONTAL); + static final ValueMapper SHOW_DIVIDERS = new ValueMapper("showDividers") + .map("beginning", LinearLayout.SHOW_DIVIDER_BEGINNING) + .map("middle", LinearLayout.SHOW_DIVIDER_MIDDLE) + .map("end", LinearLayout.SHOW_DIVIDER_END) + .map("none", LinearLayout.SHOW_DIVIDER_NONE); + public LinearLayoutInflater(ResourceParser resourceParser) { super(resourceParser); } @@ -44,6 +50,9 @@ public class LinearLayoutInflater extends ViewGroupInfla case "orientation": view.setOrientation(ORIENTATIONS.get(value)); break; + case "showDividers": + view.setShowDividers(SHOW_DIVIDERS.split(value)); + break; case "weightSum": view.setWeightSum(Float.valueOf(value)); break; diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/inflaters/TextViewInflater.java b/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/inflaters/TextViewInflater.java index 0bd1709a..a5eb1e03 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/inflaters/TextViewInflater.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/inflaters/TextViewInflater.java @@ -39,7 +39,7 @@ public class TextViewInflater extends BaseViewInflater { .map("web", Linkify.WEB_URLS); private static final ValueMapper ELLIPSIZE = new ValueMapper("ellipsize") .map("end", TextUtils.TruncateAt.END) - .map("marquee", TextUtils.TruncateAt.MIDDLE) + .map("marquee", TextUtils.TruncateAt.MARQUEE) .map("none", null) .map("start", TextUtils.TruncateAt.START) .map("middle", TextUtils.TruncateAt.MIDDLE); diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsListView.java b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsListView.java index 6c82f017..633a10e4 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsListView.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsListView.java @@ -2,6 +2,7 @@ package com.stardust.autojs.core.ui.widget; import android.content.Context; import android.os.Handler; +import android.support.v4.view.ViewPager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsTabLayout.java b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsTabLayout.java index 55571f0c..07551f03 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsTabLayout.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsTabLayout.java @@ -4,7 +4,9 @@ import android.content.Context; import android.support.annotation.Nullable; import android.support.design.widget.TabLayout; import android.support.v4.view.ViewPager; +import android.support.v4.widget.DrawerLayout; import android.util.AttributeSet; +import android.view.Gravity; import com.stardust.autojs.runtime.api.UI; diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/LogActivity.java b/inrt/src/main/java/com/stardust/auojs/inrt/LogActivity.java index 423d03f6..b303015f 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/LogActivity.java +++ b/inrt/src/main/java/com/stardust/auojs/inrt/LogActivity.java @@ -43,9 +43,9 @@ public class LogActivity extends AppCompatActivity { private void setupView() { setContentView(R.layout.activity_main); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); - ConsoleView consoleView = (ConsoleView) findViewById(R.id.console); + ConsoleView consoleView = findViewById(R.id.console); consoleView.setConsole((StardustConsole) AutoJs.getInstance().getGlobalConsole()); consoleView.findViewById(R.id.input_container).setVisibility(View.GONE); } diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.java b/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.java index 4f9fcf64..3e9ed621 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.java +++ b/inrt/src/main/java/com/stardust/auojs/inrt/SplashActivity.java @@ -6,6 +6,7 @@ import android.graphics.Typeface; import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.os.SystemClock; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; @@ -14,6 +15,7 @@ import android.widget.TextView; import com.stardust.auojs.inrt.launch.AssetsProjectLauncher; import com.stardust.auojs.inrt.launch.GlobalProjectLauncher; +import com.stardust.autojs.core.image.OpenCVHelper; import java.util.ArrayList; import java.util.Arrays; @@ -29,18 +31,24 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED; public class SplashActivity extends AppCompatActivity { private static final int PERMISSION_REQUEST_CODE = 11186; + private static final long INIT_TIMEOUT = 2500; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (!Pref.isFirstUsing()) { - main(); - return; - } setContentView(R.layout.activity_splash); - TextView slug = (TextView) findViewById(R.id.slug); + TextView slug = findViewById(R.id.slug); slug.setTypeface(Typeface.createFromAsset(getAssets(), "roboto_medium.ttf")); - new Handler().postDelayed(this::main, 2500); + final long millis = SystemClock.uptimeMillis(); + OpenCVHelper.initIfNeeded(this, () -> { + long delay = INIT_TIMEOUT - (SystemClock.uptimeMillis() - millis); + if (!Pref.isFirstUsing() || delay <= 0) { + main(); + return; + } + new Handler().postDelayed(SplashActivity.this::main, delay); + }); + } private void main() {