From 204acdaf823b7d97ac13463db4a2bab3052c0b2d Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sun, 4 Feb 2018 16:18:05 +0800 Subject: [PATCH] fix some many bugs --- .../model/autocomplete/AutoCompletion.java | 3 ++ .../network/download/DownloadManager.java | 1 + .../scriptdroid/ui/floating/CircularMenu.java | 3 +- .../ui/floating/FloatyWindowManger.java | 7 ++++ .../ui/main/drawer/DrawerFragment.java | 22 +++++++---- .../ui/main/scripts/MyScriptListFragment.java | 2 + .../autojs/core/image/ScreenCapturer.java | 30 ++++++++++----- .../com/stardust/util/DeveloperUtils.java | 38 ++++++++++++++++--- 8 files changed, 83 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/stardust/scriptdroid/model/autocomplete/AutoCompletion.java b/app/src/main/java/com/stardust/scriptdroid/model/autocomplete/AutoCompletion.java index 2766f23d..dc69b41a 100644 --- a/app/src/main/java/com/stardust/scriptdroid/model/autocomplete/AutoCompletion.java +++ b/app/src/main/java/com/stardust/scriptdroid/model/autocomplete/AutoCompletion.java @@ -7,6 +7,7 @@ import com.stardust.scriptdroid.model.indices.Modules; import com.stardust.scriptdroid.model.indices.Property; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -120,6 +121,8 @@ public class AutoCompletion { } private List findCodeCompletionForGlobal(String propertyPrefill) { + if (propertyPrefill == null) + return Collections.emptyList(); List> result = mGlobalPropertyTree.searchByPrefill(propertyPrefill); List completions = new ArrayList<>(); for (DictionaryTree.Entry entry : result) { diff --git a/app/src/main/java/com/stardust/scriptdroid/network/download/DownloadManager.java b/app/src/main/java/com/stardust/scriptdroid/network/download/DownloadManager.java index d0d9aba6..7829aac2 100644 --- a/app/src/main/java/com/stardust/scriptdroid/network/download/DownloadManager.java +++ b/app/src/main/java/com/stardust/scriptdroid/network/download/DownloadManager.java @@ -9,6 +9,7 @@ import com.stardust.scriptdroid.network.api.DownloadApi; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.net.SocketTimeoutException; import java.net.URLDecoder; import java.util.concurrent.ConcurrentHashMap; diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/floating/CircularMenu.java b/app/src/main/java/com/stardust/scriptdroid/ui/floating/CircularMenu.java index a82f2858..c3f23d60 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/floating/CircularMenu.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/floating/CircularMenu.java @@ -214,7 +214,8 @@ public class CircularMenu implements Recorder.OnStateChangedListener, LayoutInsp @Override public void onCaptureAvailable(NodeInfo capture) { - mCaptureDeferred.resolve(capture); + if (mCaptureDeferred != null && mCaptureDeferred.isPending()) + mCaptureDeferred.resolve(capture); } private boolean ensureCapture() { diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/floating/FloatyWindowManger.java b/app/src/main/java/com/stardust/scriptdroid/ui/floating/FloatyWindowManger.java index ee0b66e4..1817e1ce 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/floating/FloatyWindowManger.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/floating/FloatyWindowManger.java @@ -50,6 +50,13 @@ public class FloatyWindowManger { return sCircularMenu != null && sCircularMenu.get() != null; } + public static void showCircularMenuIfNeeded() { + if (isCircularMenuShowing()) { + return; + } + showCircularMenu(); + } + public static boolean showCircularMenu() { if (!SettingsCompat.canDrawOverlays(App.getApp())) { Toast.makeText(App.getApp(), R.string.text_no_floating_window_permission, Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java index cae6b939..b3049a35 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java @@ -131,7 +131,7 @@ public class DrawerFragment extends android.support.v4.app.Fragment { ThemeColorManager.addViewBackground(mHeaderView); initMenuItems(); if (Pref.isFloatingMenuShown()) { - FloatyWindowManger.showCircularMenu(); + FloatyWindowManger.showCircularMenuIfNeeded(); setChecked(mFloatingWindowItem, true); } setChecked(mConnectionItem, DevPluginService.getInstance().isConnected()); @@ -164,12 +164,20 @@ public class DrawerFragment extends android.support.v4.app.Fragment { .me() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe((user -> - WebActivity_.intent(this) - .extra(WebActivity.EXTRA_URL, NodeBB.url("user/" + user.getUserslug())) - .extra(Intent.EXTRA_TITLE, user.getUsername()) - .start()), - error -> LoginActivity_.intent(getActivity()).start()); + .subscribe(user -> { + if (getActivity() == null) + return; + WebActivity_.intent(this) + .extra(WebActivity.EXTRA_URL, NodeBB.url("user/" + user.getUserslug())) + .extra(Intent.EXTRA_TITLE, user.getUsername()) + .start(); + }, + error -> { + if (getActivity() == null) + return; + LoginActivity_.intent(getActivity()).start(); + } + ); } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/MyScriptListFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/MyScriptListFragment.java index 19a0d961..cb0183b0 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/MyScriptListFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/MyScriptListFragment.java @@ -163,6 +163,8 @@ public class MyScriptListFragment extends ViewPagerFragment implements BackPress @Override public void onClick(FloatingActionButton button, int pos) { + if (mScriptFileList == null) + return; switch (pos) { case 0: new ScriptOperations(getContext(), mScriptFileList, mScriptFileList.getCurrentDirectory()) diff --git a/autojs/src/main/java/com/stardust/autojs/core/image/ScreenCapturer.java b/autojs/src/main/java/com/stardust/autojs/core/image/ScreenCapturer.java index 9fd918b8..d07dc1c5 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/image/ScreenCapturer.java +++ b/autojs/src/main/java/com/stardust/autojs/core/image/ScreenCapturer.java @@ -17,6 +17,7 @@ import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; import android.util.Log; +import com.stardust.autojs.runtime.exception.ScriptException; import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.util.ScreenMetrics; @@ -35,6 +36,7 @@ public class ScreenCapturer { private volatile Image mUnderUsingImage; private volatile Image mCachedImage; private volatile boolean mImageAvailable = false; + private volatile Exception mException; private final int mScreenWidth; private final int mScreenHeight; private final int mScreenDensity; @@ -82,18 +84,23 @@ public class ScreenCapturer { private void setImageListener(Handler handler) { mImageReader.setOnImageAvailableListener(reader -> { - if (mCachedImage != null) { - synchronized (mCachedImageLock) { - if (mCachedImage != null) { - mCachedImage.close(); + try { + if (mCachedImage != null) { + synchronized (mCachedImageLock) { + if (mCachedImage != null) { + mCachedImage.close(); + } + mCachedImage = reader.acquireLatestImage(); + mImageAvailable = true; + mCachedImageLock.notify(); + return; } - mCachedImage = reader.acquireLatestImage(); - mImageAvailable = true; - mCachedImageLock.notify(); - return; } + mCachedImage = reader.acquireLatestImage(); + } catch (Exception e) { + mException = e; } - mCachedImage = reader.acquireLatestImage(); + }, handler); } @@ -102,6 +109,11 @@ public class ScreenCapturer { if (!mImageAvailable) { waitForImageAvailable(); } + if (mException != null) { + Exception e = mException; + mException = null; + throw new ScriptException(e); + } synchronized (mCachedImageLock) { if (mCachedImage != null) { if (mUnderUsingImage != null) diff --git a/common/src/main/java/com/stardust/util/DeveloperUtils.java b/common/src/main/java/com/stardust/util/DeveloperUtils.java index b60a6ed5..db2453b3 100644 --- a/common/src/main/java/com/stardust/util/DeveloperUtils.java +++ b/common/src/main/java/com/stardust/util/DeveloperUtils.java @@ -5,9 +5,11 @@ import android.app.Activity; import android.app.Service; import android.content.Context; import android.content.Intent; +import android.content.pm.ActivityInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; import android.content.pm.Signature; import android.support.annotation.Nullable; import android.util.Base64; @@ -73,14 +75,38 @@ public class DeveloperUtils { public static boolean isActivityRegistered(Context context, Class c) { - List list = context.getPackageManager().queryIntentActivities(new Intent(context, c), - PackageManager.MATCH_DEFAULT_ONLY); - return list != null && list.size() > 0; + try { + PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_ACTIVITIES); + ActivityInfo[] activities = packageInfo.activities; + if (activities == null) { + return false; + } + for (ActivityInfo info : activities) { + if (c.getName().equals(info.name)) { + return true; + } + } + return false; + } catch (PackageManager.NameNotFoundException e) { + return false; + } } public static boolean isServiceRegistered(Context context, Class c) { - List list = context.getPackageManager().queryIntentServices(new Intent(context, c), - PackageManager.MATCH_DEFAULT_ONLY); - return list != null && list.size() > 0; + try { + PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SERVICES); + ServiceInfo[] activities = packageInfo.services; + if (activities == null) { + return false; + } + for (ServiceInfo info : activities) { + if (c.getName().equals(info.name)) { + return true; + } + } + return false; + } catch (PackageManager.NameNotFoundException e) { + return false; + } } }