diff --git a/.idea/misc.xml b/.idea/misc.xml index c69e71bb..274735b3 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -48,7 +48,7 @@ - + diff --git a/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/FloatingWindowManger.java b/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/FloatingWindowManger.java deleted file mode 100644 index b791c937..00000000 --- a/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/FloatingWindowManger.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.stardust.scriptdroid.external.floatingwindow; - -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.Build; -import android.preference.PreferenceManager; -import android.provider.Settings; -import android.support.annotation.RequiresApi; -import android.util.Log; -import android.widget.Toast; - -import com.stardust.scriptdroid.App; -import com.stardust.scriptdroid.R; -import com.stardust.scriptdroid.external.floatingwindow.menu.HoverMenuService; -import com.stardust.util.IntentUtil; - -/** - * Created by Stardust on 2017/3/10. - */ - -public class FloatingWindowManger { - - private static final String KEY_FLOATING_WINDOW_PERMISSION = "May we go back..I...miss..you..Eating..17.5.9"; - private static final String TAG = "FloatingWindowManger"; - - public static void showHoverMenu() { - if (!HoverMenuService.isServiceRunning()) { - if (!hasFloatingWindowPermission(App.getApp())) { - Toast.makeText(App.getApp(), R.string.text_no_floating_window_permission, Toast.LENGTH_SHORT).show(); - goToFloatingWindowPermissionSetting(); - } else { - HoverMenuService.startService(App.getApp()); - } - } - } - - public static void goToFloatingWindowPermissionSetting() { - IntentUtil.goToAppDetailSettings(App.getApp()); - } - - @RequiresApi(api = Build.VERSION_CODES.M) - private static void goToOverlayPermissionSettings(Context context, String packageName) { - try { - App.getApp().startActivity(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, - Uri.parse("package:" + context)) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); - } catch (Exception e) { - IntentUtil.goToAppDetailSettings(App.getApp()); - } - } - - public static void checkPermission() { - final OverlayPermissionChecker checker = new OverlayPermissionChecker(App.getApp()); - checker.setCallback(new OverlayPermissionChecker.Callback() { - @Override - public void onCheckResult(boolean granted) { - checker.setCallback(null); - Log.d(TAG, "onCheckResult:" + granted); - setHasFloatingWindowPermission(App.getApp(), granted); - } - }); - checker.check(1500); - } - - public static boolean hasFloatingWindowPermission(Context context) { - return hasOverlayPermission(); - } - - private static void setHasFloatingWindowPermission(Context context, boolean has) { - PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(KEY_FLOATING_WINDOW_PERMISSION, has).apply(); - } - - private static boolean hasOverlayPermission() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - return Settings.canDrawOverlays(App.getApp()); - } - return true; - } - - public static boolean isHoverMenuShowing() { - return HoverMenuService.isServiceRunning(); - } - - - public static void hideHoverMenu() { - if (HoverMenuService.isServiceRunning()) - App.getApp().stopService(new Intent(App.getApp(), HoverMenuService.class)); - } -} diff --git a/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/HoverMenuManger.java b/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/HoverMenuManger.java new file mode 100644 index 00000000..6d1bcf54 --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/HoverMenuManger.java @@ -0,0 +1,48 @@ +package com.stardust.scriptdroid.external.floatingwindow; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.preference.PreferenceManager; +import android.provider.Settings; +import android.support.annotation.RequiresApi; +import android.util.Log; +import android.widget.Toast; + +import com.stardust.scriptdroid.App; +import com.stardust.scriptdroid.R; +import com.stardust.scriptdroid.external.floatingwindow.menu.HoverMenuService; +import com.stardust.util.IntentUtil; + +import ezy.assist.compat.SettingsCompat; + +/** + * Created by Stardust on 2017/3/10. + */ + +public class HoverMenuManger { + + private static final String KEY_FLOATING_WINDOW_PERMISSION = "May we go back..I...miss..you..Eating..17.5.9"; + private static final String TAG = "HoverMenuManger"; + + public static void showHoverMenu() { + if (!HoverMenuService.isServiceRunning()) { + if (!SettingsCompat.canDrawOverlays(App.getApp())) { + Toast.makeText(App.getApp(), R.string.text_no_floating_window_permission, Toast.LENGTH_SHORT).show(); + SettingsCompat.manageDrawOverlays(App.getApp()); + } else { + HoverMenuService.startService(App.getApp()); + } + } + } + + public static boolean isHoverMenuShowing() { + return HoverMenuService.isServiceRunning(); + } + + + public static void hideHoverMenu() { + App.getApp().stopService(new Intent(App.getApp(), HoverMenuService.class)); + } +} diff --git a/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/OverlayPermissionChecker.java b/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/OverlayPermissionChecker.java deleted file mode 100644 index 39c149b0..00000000 --- a/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/OverlayPermissionChecker.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.stardust.scriptdroid.external.floatingwindow; - -import android.content.Context; -import android.content.Intent; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.PixelFormat; -import android.os.Handler; -import android.view.Gravity; -import android.view.View; -import android.view.WindowManager; - -import com.stardust.enhancedfloaty.FloatyService; -import com.stardust.enhancedfloaty.FloatyWindow; - -/** - * Created by Stardust on 2017/5/9. - */ - -public class OverlayPermissionChecker { - - public interface Callback { - void onCheckResult(boolean granted); - } - - private OnePixelWindow mOnePixelWindow = new OnePixelWindow(); - private Callback mCallback; - private Context mContext; - private Handler mHandler; - private Boolean mCheckResult = null; - - public OverlayPermissionChecker(Context context) { - mContext = context; - mHandler = new Handler(context.getMainLooper()); - } - - public void check() { - mCheckResult = null; - try { - FloatyService.addWindow(mOnePixelWindow); - mContext.startService(new Intent(mContext, FloatyService.class)); - } catch (WindowManager.BadTokenException e) { - onCheckResult(false); - } - } - - public void check(int timeOut) { - check(); - mHandler.postDelayed(new Runnable() { - @Override - public void run() { - if (mCheckResult == null) { - onCheckResult(false); - } - } - }, timeOut); - } - - public void setCallback(Callback callback) { - mCallback = callback; - } - - private void onCheckResult(boolean b) { - mCheckResult = b; - if (mCallback != null) { - mCallback.onCheckResult(b); - } - } - - - private class OnePixelWindow implements FloatyWindow { - - private View mOnePixelView; - private WindowManager mWindowManager; - - @Override - public void onCreate(FloatyService floatyService, WindowManager windowManager) { - mWindowManager = windowManager; - mOnePixelView = new View(floatyService) { - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - notifyWindowVisible(); - } - - @Override - protected void onWindowVisibilityChanged(int visibility) { - super.onWindowVisibilityChanged(visibility); - } - }; - mOnePixelView.setWillNotDraw(false); - mOnePixelView.setBackgroundColor(Color.RED); - WindowManager.LayoutParams params = new WindowManager.LayoutParams(10, 10, - WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, - PixelFormat.TRANSLUCENT); - params.gravity = Gravity.TOP | Gravity.START; - windowManager.addView(mOnePixelView, params); - } - - private void notifyWindowVisible() { - onCheckResult(true); - //close(); - } - - @Override - public void onServiceDestroy(FloatyService floatyService) { - close(); - } - - @Override - public void close() { - mWindowManager.removeView(mOnePixelView); - FloatyService.removeWindow(this); - } - } - -} diff --git a/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/HoverMenuService.java b/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/HoverMenuService.java index 213e1a60..aa265fcb 100644 --- a/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/HoverMenuService.java +++ b/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/HoverMenuService.java @@ -17,7 +17,6 @@ import com.stardust.hover.SimpleHoverMenuTransitionListener; import com.stardust.hover.WindowHoverMenu; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.autojs.AutoJs; -import com.stardust.scriptdroid.external.floatingwindow.FloatingWindowManger; import com.stardust.scriptdroid.external.floatingwindow.menu.layout_inspector.NodeInfo; import com.stardust.scriptdroid.external.floatingwindow.menu.view.FloatingLayoutBoundsView; import com.stardust.scriptdroid.external.floatingwindow.menu.view.FloatingLayoutHierarchyView; @@ -29,6 +28,7 @@ import com.stardust.util.MessageIntent; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; +import ezy.assist.compat.SettingsCompat; import io.mattcarroll.hover.HoverMenu; import io.mattcarroll.hover.defaulthovermenu.window.WindowViewController; @@ -129,7 +129,7 @@ public class HoverMenuService extends Service { } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, R.string.text_no_floating_window_permission, Toast.LENGTH_SHORT).show(); - FloatingWindowManger.goToFloatingWindowPermissionSetting(); + SettingsCompat.manageDrawOverlays(this); } } diff --git a/app/src/main/java/com/stardust/scriptdroid/sublime/SublimePluginClient.java b/app/src/main/java/com/stardust/scriptdroid/sublime/SublimePluginClient.java index a24768bd..1a6a28e8 100644 --- a/app/src/main/java/com/stardust/scriptdroid/sublime/SublimePluginClient.java +++ b/app/src/main/java/com/stardust/scriptdroid/sublime/SublimePluginClient.java @@ -76,7 +76,7 @@ public class SublimePluginClient { private void tryClose() { try { close(); - } catch (IOException e) { + } catch (Exception e) { e.printStackTrace(); } } diff --git a/app/src/main/java/com/stardust/scriptdroid/sublime/SublimeResponseHandler.java b/app/src/main/java/com/stardust/scriptdroid/sublime/SublimeResponseHandler.java index 7179aaed..6d514df2 100644 --- a/app/src/main/java/com/stardust/scriptdroid/sublime/SublimeResponseHandler.java +++ b/app/src/main/java/com/stardust/scriptdroid/sublime/SublimeResponseHandler.java @@ -9,8 +9,11 @@ import com.google.gson.JsonObject; import com.stardust.autojs.execution.ScriptExecution; import com.stardust.autojs.script.StringScriptSource; import com.stardust.pio.PFile; +import com.stardust.scriptdroid.App; +import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.autojs.AutoJs; import com.stardust.scriptdroid.script.Scripts; +import com.stardust.scriptdroid.script.StorageScriptProvider; /** * Created by Stardust on 2017/5/11. @@ -39,6 +42,15 @@ public class SublimeResponseHandler implements Handler { return true; } }) + .handler("save", new Handler() { + @Override + public boolean handle(JsonObject data) { + String script = data.get("script").getAsString(); + String name = getName(data); + saveScript(name, script); + return false; + } + }) .handler("rerun", new Handler() { @Override @@ -91,4 +103,18 @@ public class SublimeResponseHandler implements Handler { } return element.getAsString(); } + + private void saveScript(String name, String script) { + if (TextUtils.isEmpty(name)) { + name = "untitled"; + } + name = PFile.getNameWithoutExtension(name); + if (!name.endsWith(".js")) { + name = "" + name + ".js"; + } else { + name = "" + name; + } + PFile.write(StorageScriptProvider.DEFAULT_DIRECTORY_PATH + name, script); + App.getApp().getUiHandler().toast(R.string.text_script_save_successfully); + } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java index 221619cc..a627887f 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java @@ -34,7 +34,7 @@ import com.stardust.scriptdroid.BuildConfig; import com.stardust.scriptdroid.Pref; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.autojs.AutoJs; -import com.stardust.scriptdroid.external.floatingwindow.FloatingWindowManger; +import com.stardust.scriptdroid.external.floatingwindow.HoverMenuManger; import com.stardust.scriptdroid.script.ScriptFile; import com.stardust.scriptdroid.script.StorageScriptProvider; import com.stardust.scriptdroid.script.sample.Sample; @@ -46,7 +46,6 @@ import com.stardust.scriptdroid.ui.BaseActivity; import com.stardust.scriptdroid.ui.main.sample_list.SampleScriptListFragment; import com.stardust.scriptdroid.ui.main.script_list.MyScriptListFragment; import com.stardust.scriptdroid.ui.main.script_list.ScriptFileChooserDialogBuilder; -import com.stardust.scriptdroid.ui.main.task.TaskManagerFragment; import com.stardust.scriptdroid.ui.settings.SettingsActivity_; import com.stardust.scriptdroid.ui.update.VersionGuard; import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder; @@ -275,7 +274,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega @Click(R.id.exit) public void exitCompletely() { - FloatingWindowManger.hideHoverMenu(); + HoverMenuManger.hideHoverMenu(); stopService(new Intent(this, FloatyService.class)); AutoJs.getInstance().getScriptEngineService().stopAll(); finish(); diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java index fcb5599e..883f1716 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java @@ -15,7 +15,7 @@ import com.stardust.scriptdroid.App; import com.stardust.scriptdroid.Pref; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.autojs.AutoJs; -import com.stardust.scriptdroid.external.floatingwindow.FloatingWindowManger; +import com.stardust.scriptdroid.external.floatingwindow.HoverMenuManger; import com.stardust.scriptdroid.external.floatingwindow.menu.HoverMenuService; import com.stardust.view.accessibility.AccessibilityService; import com.stardust.scriptdroid.sublime.SublimePluginClient; @@ -89,7 +89,7 @@ public class SideMenuFragment extends android.support.v4.app.Fragment { }); } }, 450); - mFloatingWindowSwitch.setChecked(FloatingWindowManger.isHoverMenuShowing()); + mFloatingWindowSwitch.setChecked(HoverMenuManger.isHoverMenuShowing()); } @@ -122,10 +122,10 @@ public class SideMenuFragment extends android.support.v4.app.Fragment { @CheckedChange(R.id.sw_floating_window) void setFloatingWindowEnable(CompoundButton button, boolean enable) { - if (enable && !FloatingWindowManger.isHoverMenuShowing()) { - FloatingWindowManger.showHoverMenu(); - } else if (!enable && FloatingWindowManger.isHoverMenuShowing()) { - FloatingWindowManger.hideHoverMenu(); + if (enable && !HoverMenuManger.isHoverMenuShowing()) { + HoverMenuManger.showHoverMenu(); + } else if (!enable && HoverMenuManger.isHoverMenuShowing()) { + HoverMenuManger.hideHoverMenu(); } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/splash/SplashActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/splash/SplashActivity.java index 460dcd44..2ebb6a1b 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/splash/SplashActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/splash/SplashActivity.java @@ -51,20 +51,16 @@ public class SplashActivity extends BaseActivity { private SplashAD mSplashAD; private boolean mCanEnterNextActivity = false; private boolean mNotStartMainActivity; - private boolean mForceShowAd = false; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mNotStartMainActivity = getIntent().getBooleanExtra(NOT_START_MAIN_ACTIVITY, false); - mForceShowAd = getIntent().getBooleanExtra(FORCE_SHOW_AD, false); - if (!mForceShowAd && !Pref.shouldShowAd()) { + boolean forceShowAd = getIntent().getBooleanExtra(FORCE_SHOW_AD, false); + if (!forceShowAd && !Pref.shouldShowAd()) { enterNextActivity(); return; } - if (Pref.isFirstShowingAd()) { - Toast.makeText(this, R.string.text_can_close_ad_in_settings, Toast.LENGTH_SHORT).show(); - } checkPermission(Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ce20eb9a..75323503 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -197,6 +197,7 @@ 欣赏广告 广告显示设置 Default + 保存成功,请刷新目录 diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/console/StardustConsole.java b/autojs/src/main/java/com/stardust/autojs/runtime/console/StardustConsole.java index f65f986e..4ddc063d 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/console/StardustConsole.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/console/StardustConsole.java @@ -11,8 +11,6 @@ import com.stardust.autojs.runtime.api.AbstractConsole; import com.stardust.autojs.runtime.api.Console; import com.stardust.enhancedfloaty.FloatyService; import com.stardust.enhancedfloaty.ResizableExpandableFloatyWindow; -import com.stardust.util.FloatingWindowUtils; -import com.stardust.util.IntentUtil; import com.stardust.util.UiHandler; import com.stardust.autojs.R; @@ -21,6 +19,8 @@ import java.util.List; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; +import ezy.assist.compat.SettingsCompat; + /** * Created by Stardust on 2017/5/2. */ @@ -123,8 +123,8 @@ public class StardustConsole extends AbstractConsole { @Override public void show() { - if (!FloatingWindowUtils.hasOverlayPermission(mUiHandler.getContext())) { - IntentUtil.goToAppDetailSettings(mUiHandler.getContext()); + if (!SettingsCompat.canDrawOverlays(mUiHandler.getContext())) { + SettingsCompat.manageDrawOverlays(mUiHandler.getContext()); mUiHandler.toast(R.string.text_no_floating_window_permission); } startFloatyService(); diff --git a/common/build.gradle b/common/build.gradle index 61823d10..f7922b39 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -27,4 +27,5 @@ dependencies { }) testCompile 'junit:junit:4.12' compile 'com.android.support:support-annotations:25.3.1' + compile 'com.github.czy1121:settingscompat:1.1.4' } diff --git a/common/src/main/java/com/stardust/util/FloatingWindowUtils.java b/common/src/main/java/com/stardust/util/FloatingWindowUtils.java deleted file mode 100644 index 3a69429c..00000000 --- a/common/src/main/java/com/stardust/util/FloatingWindowUtils.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.stardust.util; - -import android.Manifest; -import android.content.Context; -import android.content.pm.PackageManager; -import android.os.Build; -import android.provider.Settings; -import android.widget.Toast; - -/** - * Created by Stardust on 2017/3/10. - */ - -public class FloatingWindowUtils { - - public static boolean checkFloatingWindowPermission(Context context, int messageResId) { - if (!hasOverlayPermission(context)) { - Toast.makeText(context, messageResId, Toast.LENGTH_SHORT).show(); - IntentUtil.goToAppDetailSettings(context, context.getPackageName()); - return false; - } - return true; - } - - - - public static boolean isFloatingWindowPermitted(Context context) { - PackageManager pm = context.getPackageManager(); - return pm.checkPermission(Manifest.permission.SYSTEM_ALERT_WINDOW, context.getPackageName()) - == PackageManager.PERMISSION_GRANTED; - } - - public static boolean hasOverlayPermission(Context context) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - return Settings.canDrawOverlays(context); - } - return true; - } -}