From 68de90b7186e083cb0df8a2c41b679551c5958bb Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sat, 19 Aug 2017 12:18:46 +0800 Subject: [PATCH 01/46] initial status --- autojs/src/main/java/com/stardust/autojs/runtime/api/Timers.java | 1 - 1 file changed, 1 deletion(-) diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Timers.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Timers.java index 4cdac47fc..bd747811f 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Timers.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Timers.java @@ -108,7 +108,6 @@ private boolean clearCallback(int id) { public boolean hasPendingCallback() { - return mFutureCallbackUptimeMillis > SystemClock.uptimeMillis(); } } From 544078892207f5800bc3c6ca8b0d6859d918ddd7 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sun, 20 Aug 2017 21:46:51 +0800 Subject: [PATCH 02/46] new ui for script list --- .../content/ScriptListNavigatorContent.java | 20 +- .../external/tasker/TaskPrefEditActivity.java | 16 +- .../widget/ScriptWidgetSettingsActivity.java | 25 +- .../stardust/scriptdroid/script/Scripts.java | 10 +- ...Provider.java => StorageFileProvider.java} | 83 ++--- .../sublime/SublimeResponseHandler.java | 4 +- .../com/stardust/scriptdroid/tool/Logcat.java | 6 +- .../scriptdroid/tool/SimpleObserver.java | 32 ++ .../ui/common/ScriptOperations.java | 10 +- .../scriptdroid/ui/main/MainActivity.java | 23 +- .../script_list/MyScriptListFragment.java | 332 ++++++++++-------- .../ScriptFileChooserDialogBuilder.java | 16 +- ...rView.java => ScriptListRecyclerView.java} | 57 ++- .../ScriptListWithProgressBarView.java | 19 +- .../ui/update/UpdateInfoDialogBuilder.java | 4 +- .../java/com/stardust/widget/AutoAdapter.java | 63 ++++ .../stardust/widget/ViewHolderSupplier.java | 19 + app/src/main/res/drawable/circle_green.xml | 11 + .../main/res/drawable/ic_ascending_order.png | Bin 0 -> 628 bytes .../main/res/drawable/ic_descending_order.png | Bin 0 -> 639 bytes app/src/main/res/drawable/ic_sort.png | Bin 0 -> 505 bytes app/src/main/res/layout/activity_main.xml | 3 +- .../res/layout/fragment_my_script_list.xml | 29 +- .../layout/script_and_folder_list_view.xml | 2 +- .../res/layout/script_file_list_category.xml | 56 +++ .../res/layout/script_file_list_directory.xml | 59 ++++ .../main/res/layout/script_file_list_file.xml | 119 +++++++ app/src/main/res/layout/script_list_view.xml | 64 ++++ app/src/main/res/values/strings.xml | 2 + .../src/main/java/com/stardust/io/EFile.java | 29 ++ .../src/main/java/com/stardust/pio/PFile.java | 9 + 31 files changed, 784 insertions(+), 338 deletions(-) rename app/src/main/java/com/stardust/scriptdroid/script/{StorageScriptProvider.java => StorageFileProvider.java} (59%) create mode 100644 app/src/main/java/com/stardust/scriptdroid/tool/SimpleObserver.java rename app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/{ScriptAndFolderListRecyclerView.java => ScriptListRecyclerView.java} (87%) create mode 100644 app/src/main/java/com/stardust/widget/AutoAdapter.java create mode 100644 app/src/main/res/drawable/circle_green.xml create mode 100644 app/src/main/res/drawable/ic_ascending_order.png create mode 100644 app/src/main/res/drawable/ic_descending_order.png create mode 100644 app/src/main/res/drawable/ic_sort.png create mode 100644 app/src/main/res/layout/script_file_list_category.xml create mode 100644 app/src/main/res/layout/script_file_list_directory.xml create mode 100644 app/src/main/res/layout/script_file_list_file.xml create mode 100644 app/src/main/res/layout/script_list_view.xml create mode 100644 common/src/main/java/com/stardust/io/EFile.java diff --git a/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/content/ScriptListNavigatorContent.java b/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/content/ScriptListNavigatorContent.java index 079f94cb3..5293e63d2 100644 --- a/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/content/ScriptListNavigatorContent.java +++ b/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/content/ScriptListNavigatorContent.java @@ -15,10 +15,10 @@ import com.stardust.scriptdroid.external.floatingwindow.menu.HoverMenuService; import com.stardust.scriptdroid.script.ScriptFile; import com.stardust.scriptdroid.script.Scripts; -import com.stardust.scriptdroid.script.StorageScriptProvider; +import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.scriptdroid.ui.common.ScriptLoopDialog; import com.stardust.scriptdroid.ui.edit.EditActivity; -import com.stardust.scriptdroid.ui.main.script_list.ScriptAndFolderListRecyclerView; +import com.stardust.scriptdroid.ui.main.script_list.ScriptListRecyclerView; import com.stardust.scriptdroid.ui.main.script_list.ScriptListWithProgressBarView; import com.stardust.widget.ViewHolderSupplier; @@ -31,20 +31,20 @@ public class ScriptListNavigatorContent implements NavigatorContent { - private ViewHolderSupplier mViewHolderSupplier = new ViewHolderSupplier() { + private ViewHolderSupplier mViewHolderSupplier = new ViewHolderSupplier() { @Override - public ScriptAndFolderListRecyclerView.ViewHolder createViewHolder(ViewGroup parent, int viewType) { + public ScriptListRecyclerView.ViewHolder createViewHolder(ViewGroup parent, int viewType) { switch (viewType) { - case ScriptAndFolderListRecyclerView.VIEW_TYPE_FILE: + case ScriptListRecyclerView.VIEW_TYPE_FILE: return new FileViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.floating_script_list_recycler_view_file, parent, false)); - case ScriptAndFolderListRecyclerView.VIEW_TYPE_DIRECTORY: + case ScriptListRecyclerView.VIEW_TYPE_DIRECTORY: return new DirectoryViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.floating_script_list_recycler_view_directory, parent, false)); } return null; } }; - private ScriptAndFolderListRecyclerView mFloatingScriptFileListView; + private ScriptListRecyclerView mFloatingScriptFileListView; private ScriptListWithProgressBarView mScriptListWithProgressBarView; public ScriptListNavigatorContent(Context context) { @@ -52,8 +52,8 @@ public ScriptListNavigatorContent(Context context) { mFloatingScriptFileListView = mScriptListWithProgressBarView.getScriptAndFolderListRecyclerView(); mFloatingScriptFileListView.setViewHolderSupplier(mViewHolderSupplier); mFloatingScriptFileListView.setLayoutManager(new WrapContentLinearLayoutManager(context)); - mFloatingScriptFileListView.setStorageScriptProvider(StorageScriptProvider.getDefault()); - mFloatingScriptFileListView.setOnItemClickListener(new ScriptAndFolderListRecyclerView.OnScriptFileClickListener() { + mFloatingScriptFileListView.setStorageFileProvider(StorageFileProvider.getDefault()); + mFloatingScriptFileListView.setOnItemClickListener(new ScriptListRecyclerView.OnScriptFileClickListener() { @Override public void onClick(ScriptFile file, int position) { @@ -80,7 +80,7 @@ public void onHidden() { } - private class DirectoryViewHolder extends ScriptAndFolderListRecyclerView.ViewHolder { + private class DirectoryViewHolder extends ScriptListRecyclerView.ViewHolder { DirectoryViewHolder(View itemView) { super(itemView); diff --git a/app/src/main/java/com/stardust/scriptdroid/external/tasker/TaskPrefEditActivity.java b/app/src/main/java/com/stardust/scriptdroid/external/tasker/TaskPrefEditActivity.java index c8fb4a170..97ce7db9d 100644 --- a/app/src/main/java/com/stardust/scriptdroid/external/tasker/TaskPrefEditActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/external/tasker/TaskPrefEditActivity.java @@ -11,9 +11,9 @@ import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.external.CommonUtils; import com.stardust.scriptdroid.script.ScriptFile; -import com.stardust.scriptdroid.script.StorageScriptProvider; +import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.scriptdroid.ui.BaseActivity; -import com.stardust.scriptdroid.ui.main.script_list.ScriptAndFolderListRecyclerView; +import com.stardust.scriptdroid.ui.main.script_list.ScriptListRecyclerView; import com.stardust.scriptdroid.ui.main.script_list.ScriptListWithProgressBarView; import com.twofortyfouram.locale.sdk.client.ui.activity.AbstractAppCompatPluginActivity; @@ -29,7 +29,7 @@ public class TaskPrefEditActivity extends AbstractAppCompatPluginActivity { private String mSelectedScriptFilePath; private String mPreExecuteScript; - private StorageScriptProvider mStorageScriptProvider; + private StorageFileProvider mStorageFileProvider; @AfterViews void setUpViews() { @@ -39,12 +39,12 @@ void setUpViews() { private void initScriptListRecyclerView() { - mStorageScriptProvider = StorageScriptProvider.getExternalStorageProvider(); + mStorageFileProvider = StorageFileProvider.getExternalStorageProvider(); ScriptListWithProgressBarView scriptList = (ScriptListWithProgressBarView) findViewById(R.id.script_list); scriptList.setScriptFileOperationEnabled(false); - scriptList.setStorageScriptProvider(mStorageScriptProvider); - scriptList.setCurrentDirectory(StorageScriptProvider.DEFAULT_DIRECTORY); - scriptList.setOnItemClickListener(new ScriptAndFolderListRecyclerView.OnScriptFileClickListener() { + scriptList.setStorageScriptProvider(mStorageFileProvider); + scriptList.setCurrentDirectory(StorageFileProvider.DEFAULT_DIRECTORY); + scriptList.setOnItemClickListener(new ScriptListRecyclerView.OnScriptFileClickListener() { @Override public void onClick(ScriptFile file, int position) { mSelectedScriptFilePath = file.getPath(); @@ -62,7 +62,7 @@ void editPreExecuteScript() { @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_refresh) { - mStorageScriptProvider.refreshAll(); + mStorageFileProvider.refreshAll(); } else if (item.getItemId() == R.id.action_clear_file_selection) { mSelectedScriptFilePath = null; } else { diff --git a/app/src/main/java/com/stardust/scriptdroid/external/widget/ScriptWidgetSettingsActivity.java b/app/src/main/java/com/stardust/scriptdroid/external/widget/ScriptWidgetSettingsActivity.java index 70e35f42b..d82eb7d31 100644 --- a/app/src/main/java/com/stardust/scriptdroid/external/widget/ScriptWidgetSettingsActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/external/widget/ScriptWidgetSettingsActivity.java @@ -1,29 +1,20 @@ package com.stardust.scriptdroid.external.widget; -import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.text.TextUtils; import android.view.Menu; import android.view.MenuItem; -import android.widget.RemoteViews; -import android.widget.Toast; import com.stardust.scriptdroid.R; -import com.stardust.scriptdroid.external.CommonUtils; -import com.stardust.scriptdroid.external.open.RunIntentActivity; -import com.stardust.scriptdroid.external.tasker.TaskerScriptEditActivity; import com.stardust.scriptdroid.script.ScriptFile; -import com.stardust.scriptdroid.script.StorageScriptProvider; +import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.scriptdroid.ui.BaseActivity; -import com.stardust.scriptdroid.ui.main.script_list.ScriptAndFolderListRecyclerView; +import com.stardust.scriptdroid.ui.main.script_list.ScriptListRecyclerView; import com.stardust.scriptdroid.ui.main.script_list.ScriptListWithProgressBarView; import org.androidannotations.annotations.AfterViews; -import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EActivity; /** @@ -34,7 +25,7 @@ public class ScriptWidgetSettingsActivity extends BaseActivity { private String mSelectedScriptFilePath; - private StorageScriptProvider mStorageScriptProvider; + private StorageFileProvider mStorageFileProvider; private int mAppWidgetId; @Override @@ -51,12 +42,12 @@ void setUpViews() { private void initScriptListRecyclerView() { - mStorageScriptProvider = StorageScriptProvider.getExternalStorageProvider(); + mStorageFileProvider = StorageFileProvider.getExternalStorageProvider(); ScriptListWithProgressBarView scriptList = (ScriptListWithProgressBarView) findViewById(R.id.script_list); scriptList.setScriptFileOperationEnabled(false); - scriptList.setStorageScriptProvider(mStorageScriptProvider); - scriptList.setCurrentDirectory(StorageScriptProvider.DEFAULT_DIRECTORY); - scriptList.setOnItemClickListener(new ScriptAndFolderListRecyclerView.OnScriptFileClickListener() { + scriptList.setStorageScriptProvider(mStorageFileProvider); + scriptList.setCurrentDirectory(StorageFileProvider.DEFAULT_DIRECTORY); + scriptList.setOnItemClickListener(new ScriptListRecyclerView.OnScriptFileClickListener() { @Override public void onClick(ScriptFile file, int position) { mSelectedScriptFilePath = file.getPath(); @@ -69,7 +60,7 @@ public void onClick(ScriptFile file, int position) { @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_refresh) { - mStorageScriptProvider.refreshAll(); + mStorageFileProvider.refreshAll(); } else if (item.getItemId() == R.id.action_clear_file_selection) { mSelectedScriptFilePath = null; } diff --git a/app/src/main/java/com/stardust/scriptdroid/script/Scripts.java b/app/src/main/java/com/stardust/scriptdroid/script/Scripts.java index a8d34664c..8f25630cb 100644 --- a/app/src/main/java/com/stardust/scriptdroid/script/Scripts.java +++ b/app/src/main/java/com/stardust/scriptdroid/script/Scripts.java @@ -84,17 +84,17 @@ public static ScriptExecution run(ScriptFile file) { public static ScriptExecution run(ScriptSource source, String directoryPath) { return AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig() - .path(directoryPath, StorageScriptProvider.DEFAULT_DIRECTORY_PATH)); + .path(directoryPath, StorageFileProvider.DEFAULT_DIRECTORY_PATH)); } public static ScriptExecution run(ScriptSource source) { return AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig() - .path(StorageScriptProvider.DEFAULT_DIRECTORY_PATH)); + .path(StorageFileProvider.DEFAULT_DIRECTORY_PATH)); } public static ScriptExecution runWithBroadcastSender(ScriptSource scriptSource, String directoryPath) { return AutoJs.getInstance().getScriptEngineService().execute(scriptSource, BROADCAST_SENDER_SCRIPT_EXECUTION_LISTENER, - new ExecutionConfig().path(directoryPath, StorageScriptProvider.DEFAULT_DIRECTORY_PATH)); + new ExecutionConfig().path(directoryPath, StorageFileProvider.DEFAULT_DIRECTORY_PATH)); } public static ScriptExecution run(Context context, Sample file) { @@ -104,14 +104,14 @@ public static ScriptExecution run(Context context, Sample file) { public static ScriptExecution runWithBroadcastSender(ScriptSource source) { return AutoJs.getInstance().getScriptEngineService().execute(source, BROADCAST_SENDER_SCRIPT_EXECUTION_LISTENER, - new ExecutionConfig().path(StorageScriptProvider.DEFAULT_DIRECTORY_PATH)); + new ExecutionConfig().path(StorageFileProvider.DEFAULT_DIRECTORY_PATH)); } public static ScriptExecution runRepeatedly(ScriptFile scriptFile, int loopTimes, long delay, long interval) { ScriptSource source = scriptFile.toSource(); String directoryPath = scriptFile.getParent(); return AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig() - .path(directoryPath, StorageScriptProvider.DEFAULT_DIRECTORY_PATH) + .path(directoryPath, StorageFileProvider.DEFAULT_DIRECTORY_PATH) .loop(delay, loopTimes, interval)); } } diff --git a/app/src/main/java/com/stardust/scriptdroid/script/StorageScriptProvider.java b/app/src/main/java/com/stardust/scriptdroid/script/StorageFileProvider.java similarity index 59% rename from app/src/main/java/com/stardust/scriptdroid/script/StorageScriptProvider.java rename to app/src/main/java/com/stardust/scriptdroid/script/StorageFileProvider.java index 90a0bae53..4b8613745 100644 --- a/app/src/main/java/com/stardust/scriptdroid/script/StorageScriptProvider.java +++ b/app/src/main/java/com/stardust/scriptdroid/script/StorageFileProvider.java @@ -11,11 +11,17 @@ import java.util.Map; +import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.NonNull; +import io.reactivex.functions.Function; +import io.reactivex.schedulers.Schedulers; + /** * Created by Stardust on 2017/3/31. */ -public class StorageScriptProvider { +public class StorageFileProvider { public static class DirectoryChangeEvent { @@ -31,17 +37,17 @@ public DirectoryChangeEvent(ScriptFile directory) { public static final ScriptFile DEFAULT_DIRECTORY = new ScriptFile(DEFAULT_DIRECTORY_PATH); - private static StorageScriptProvider defaultProvider = new StorageScriptProvider(); + private static StorageFileProvider defaultProvider = new StorageFileProvider(); - public static StorageScriptProvider getDefault() { + public static StorageFileProvider getDefault() { return defaultProvider; } - private static StorageScriptProvider externalStorageProvider; + private static StorageFileProvider externalStorageProvider; - public static StorageScriptProvider getExternalStorageProvider() { + public static StorageFileProvider getExternalStorageProvider() { if (externalStorageProvider == null) { - externalStorageProvider = new StorageScriptProvider(Environment.getExternalStorageDirectory().getPath(), 5); + externalStorageProvider = new StorageFileProvider(Environment.getExternalStorageDirectory().getPath(), 5); } return externalStorageProvider; } @@ -51,25 +57,21 @@ public static StorageScriptProvider getExternalStorageProvider() { private ScriptFile mInitialDirectory; private ScriptFile[] mInitialDirectoryScriptFiles; - public StorageScriptProvider(String path, int cacheSize) { + public StorageFileProvider(String path, int cacheSize) { this(new ScriptFile(path), cacheSize); } - public StorageScriptProvider(ScriptFile initialDirectory, int cacheSize) { + public StorageFileProvider(ScriptFile initialDirectory, int cacheSize) { mInitialDirectory = initialDirectory; mScriptFileCache = new LimitedHashMap<>(cacheSize); } - public StorageScriptProvider() { + public StorageFileProvider() { this(DEFAULT_DIRECTORY, 10); } public void notifyDirectoryChanged(ScriptFile directory) { - if (directory.equals(mInitialDirectory)) { - mInitialDirectoryScriptFiles = getInitialDirectoryScriptFilesInner(); - } else { - clearCache(directory); - } + clearCache(directory); mDirectoryEventBus.post(new DirectoryChangeEvent(directory)); } @@ -94,30 +96,16 @@ public ScriptFile getInitialDirectory() { return mInitialDirectory; } - public ScriptFile[] getInitialDirectoryScriptFiles() { - if (mInitialDirectoryScriptFiles == null) { - mInitialDirectoryScriptFiles = getInitialDirectoryScriptFilesInner(); - } - return mInitialDirectoryScriptFiles; - } - - private ScriptFile[] getInitialDirectoryScriptFilesInner() { - return listAndSortFiles(mInitialDirectory); + public Observable getInitialDirectoryScriptFiles() { + return getDirectoryScriptFiles(mInitialDirectory); } - public ScriptFile[] getDirectoryScriptFiles(ScriptFile directory) { - if (directory.equals(mInitialDirectory)) { - return getInitialDirectoryScriptFiles(); - } + public Observable getDirectoryScriptFiles(ScriptFile directory) { ScriptFile[] scriptFiles = getScriptFilesFromCache(directory); if (scriptFiles == null) { - scriptFiles = getScriptFiles(directory); + return listAndSortFiles(directory); } - return scriptFiles; - } - - public void clearCacheExceptInitialDirectory() { - mScriptFileCache.clear(); + return Observable.fromArray(scriptFiles); } private void clearCache(ScriptFile directory) { @@ -125,19 +113,24 @@ private void clearCache(ScriptFile directory) { } - private ScriptFile[] getScriptFiles(ScriptFile directory) { - ScriptFile[] scriptFiles = listAndSortFiles(directory); - mScriptFileCache.put(directory.getPath(), scriptFiles); - return scriptFiles; - } + private Observable listAndSortFiles(ScriptFile directory) { + return Observable.just(directory) + .observeOn(Schedulers.computation()) + .flatMap(new Function>() { + - private ScriptFile[] listAndSortFiles(ScriptFile directory) { - ScriptFile[] scriptFiles = directory.listFiles(); - if (scriptFiles == null) - scriptFiles = new ScriptFile[0]; - else - FileSorter.sort(scriptFiles); - return scriptFiles; + @Override + public Observable apply(@NonNull ScriptFile dir) throws Exception { + ScriptFile[] scriptFiles = dir.listFiles(); + if (scriptFiles == null) { + return Observable.empty(); + } else { + FileSorter.sort(scriptFiles); + mScriptFileCache.put(dir.getPath(), scriptFiles); + return Observable.fromArray(scriptFiles); + } + } + }); } private ScriptFile[] getScriptFilesFromCache(ScriptFile directory) { 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 6d514df29..54dbfd2d8 100644 --- a/app/src/main/java/com/stardust/scriptdroid/sublime/SublimeResponseHandler.java +++ b/app/src/main/java/com/stardust/scriptdroid/sublime/SublimeResponseHandler.java @@ -13,7 +13,7 @@ import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.autojs.AutoJs; import com.stardust.scriptdroid.script.Scripts; -import com.stardust.scriptdroid.script.StorageScriptProvider; +import com.stardust.scriptdroid.script.StorageFileProvider; /** * Created by Stardust on 2017/5/11. @@ -114,7 +114,7 @@ private void saveScript(String name, String script) { } else { name = "" + name; } - PFile.write(StorageScriptProvider.DEFAULT_DIRECTORY_PATH + name, script); + PFile.write(StorageFileProvider.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/tool/Logcat.java b/app/src/main/java/com/stardust/scriptdroid/tool/Logcat.java index 5c22bca54..e34f49025 100644 --- a/app/src/main/java/com/stardust/scriptdroid/tool/Logcat.java +++ b/app/src/main/java/com/stardust/scriptdroid/tool/Logcat.java @@ -1,6 +1,6 @@ package com.stardust.scriptdroid.tool; -import com.stardust.scriptdroid.script.StorageScriptProvider; +import com.stardust.scriptdroid.script.StorageFileProvider; import java.io.File; import java.io.IOException; @@ -11,8 +11,8 @@ public class Logcat { - private static final String LOG_PATH = StorageScriptProvider.DEFAULT_DIRECTORY_PATH + "log.txt"; - private static final String DISABLE_PATH = StorageScriptProvider.DEFAULT_DIRECTORY_PATH + "disable_log.txt"; + private static final String LOG_PATH = StorageFileProvider.DEFAULT_DIRECTORY_PATH + "log.txt"; + private static final String DISABLE_PATH = StorageFileProvider.DEFAULT_DIRECTORY_PATH + "disable_log.txt"; private static Process sLogSavingProcess; public static void startLogSavingIfNeeded() { diff --git a/app/src/main/java/com/stardust/scriptdroid/tool/SimpleObserver.java b/app/src/main/java/com/stardust/scriptdroid/tool/SimpleObserver.java new file mode 100644 index 000000000..0107bd824 --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/tool/SimpleObserver.java @@ -0,0 +1,32 @@ +package com.stardust.scriptdroid.tool; + +import io.reactivex.Observable; +import io.reactivex.Observer; +import io.reactivex.annotations.NonNull; +import io.reactivex.disposables.Disposable; + +/** + * Created by Stardust on 2017/8/20. + */ + +public class SimpleObserver implements Observer { + @Override + public void onSubscribe(@NonNull Disposable d) { + + } + + @Override + public void onNext(@NonNull T t) { + + } + + @Override + public void onError(@NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } +} diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/common/ScriptOperations.java b/app/src/main/java/com/stardust/scriptdroid/ui/common/ScriptOperations.java index a47c5246f..6c7349b75 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/common/ScriptOperations.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/common/ScriptOperations.java @@ -1,31 +1,25 @@ package com.stardust.scriptdroid.ui.common; -import android.app.Activity; -import android.app.Dialog; import android.content.Context; -import android.content.ContextWrapper; import android.os.Looper; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.text.InputType; import android.view.View; -import android.view.WindowManager; import android.widget.EditText; import android.widget.Toast; import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; -import com.jecelyin.common.utils.L; import com.stardust.app.DialogUtils; -import com.stardust.autojs.runtime.api.ui.Dialogs; import com.stardust.pio.PFile; import com.stardust.pio.UncheckedIOException; import com.stardust.scriptdroid.App; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.script.ScriptFile; import com.stardust.scriptdroid.script.Scripts; -import com.stardust.scriptdroid.script.StorageScriptProvider; +import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.scriptdroid.script.sample.Sample; import com.stardust.scriptdroid.ui.main.script_list.MyScriptListFragment; import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder; @@ -158,7 +152,7 @@ public void accept(@io.reactivex.annotations.NonNull String path) throws Excepti } private void notifyScriptFileChanged() { - StorageScriptProvider.getDefault().notifyDirectoryChanged(mCurrentDirectory); + StorageFileProvider.getDefault().notifyDirectoryChanged(mCurrentDirectory); } private void showMessage(final int resId) { 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 e3d47ff7f..839862f4a 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 @@ -3,24 +3,18 @@ import android.Manifest; import android.annotation.SuppressLint; import android.app.Activity; -import android.content.ClipData; -import android.content.ClipboardManager; -import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.TabLayout; -import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.view.Gravity; import android.view.View; import android.widget.ImageView; import android.widget.TextView; -import android.widget.Toast; import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; @@ -36,12 +30,11 @@ import com.stardust.scriptdroid.autojs.AutoJs; import com.stardust.scriptdroid.external.floatingwindow.HoverMenuManger; import com.stardust.scriptdroid.script.ScriptFile; -import com.stardust.scriptdroid.script.StorageScriptProvider; +import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.scriptdroid.ui.common.ScriptOperations; +import com.stardust.scriptdroid.ui.main.script_list.MyScriptListFragment_; import com.stardust.scriptdroid.ui.main.task.TaskManagerFragment_; import com.stardust.util.DeveloperUtils; -import com.stardust.util.IntentExtras; -import com.stardust.view.accessibility.AccessibilityService; import com.stardust.scriptdroid.tool.AccessibilityServiceTool; import com.stardust.scriptdroid.tool.DrawableSaver; import com.stardust.scriptdroid.ui.BaseActivity; @@ -50,11 +43,9 @@ import com.stardust.scriptdroid.ui.main.script_list.ScriptFileChooserDialogBuilder; import com.stardust.scriptdroid.ui.settings.SettingsActivity_; import com.stardust.scriptdroid.ui.update.VersionGuard; -import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder; import com.stardust.util.BackPressedHandler; import com.stardust.util.MessageEvent; import com.stardust.view.DrawerAutoClose; -import com.stardust.view.accessibility.AccessibilityServiceUtils; import com.stardust.widget.CommonMarkdownView; import com.stardust.widget.SlidingUpPanel; @@ -65,8 +56,6 @@ import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; -import java.io.InputStream; - @EActivity(R.layout.activity_main) public class MainActivity extends BaseActivity implements OnActivityResultDelegate.DelegateHost { @@ -195,7 +184,7 @@ private void setUpToolbar() { private void setUpTabViewPager() { TabLayout tabLayout = $(R.id.tab); mPagerAdapter = new FragmentPagerAdapterBuilder(this) - .add(new MyScriptListFragment(), R.string.text_my_script) + .add(new MyScriptListFragment_(), R.string.text_my_script) .add(new SampleScriptListFragment(), R.string.text_sample_script) .add(new TaskManagerFragment_(), R.string.text_task_manage) .build(); @@ -222,14 +211,14 @@ void createNewDirectory() { @Click(R.id.import_from_file) void showFileChooser() { - final StorageScriptProvider provider = StorageScriptProvider.getExternalStorageProvider(); + final StorageFileProvider provider = StorageFileProvider.getExternalStorageProvider(); new ScriptFileChooserDialogBuilder(this) .scriptProvider(provider) .fileCallback(new ScriptFileChooserDialogBuilder.FileCallback() { @Override public void onFileSelection(MaterialDialog dialog, final ScriptFile file) { dialog.dismiss(); - provider.clearCacheExceptInitialDirectory(); + provider.refreshAll(); new ScriptOperations(MainActivity.this, mDrawerLayout) .importFile(file.getPath()) .subscribe(); @@ -303,7 +292,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); - StorageScriptProvider.getDefault().notifyStoragePermissionGranted(); + StorageFileProvider.getDefault().notifyStoragePermissionGranted(); } @Override diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java index 301093c43..90ac0a29f 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java @@ -1,140 +1,132 @@ package com.stardust.scriptdroid.ui.main.script_list; -import android.content.DialogInterface; -import android.os.Bundle; +import android.graphics.drawable.GradientDrawable; import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; -import android.text.InputType; +import android.support.v4.app.Fragment; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.EditText; +import android.widget.TextView; import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; -import com.stardust.app.Fragment; -import com.stardust.app.OperationDialogBuilder; -import com.stardust.pio.UncheckedIOException; import com.stardust.scriptdroid.script.ScriptFile; import com.stardust.pio.PFile; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.script.Scripts; -import com.stardust.scriptdroid.script.StorageScriptProvider; +import com.stardust.scriptdroid.script.StorageFileProvider; +import com.stardust.scriptdroid.tool.SimpleObserver; import com.stardust.scriptdroid.ui.common.ScriptLoopDialog; -import com.stardust.scriptdroid.ui.common.ScriptOperations; -import com.stardust.scriptdroid.ui.edit.EditActivity; -import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder; -import com.stardust.util.UnderuseExecutors; -import com.stardust.widget.SimpleAdapterDataObserver; - +import com.stardust.widget.AutoAdapter; +import com.stardust.widget.BindableViewHolder; +import com.stardust.widget.ViewHolderSupplier; +import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration; + +import org.androidannotations.annotations.AfterViews; +import org.androidannotations.annotations.EFragment; +import org.androidannotations.annotations.ViewById; import org.reactivestreams.Publisher; import org.reactivestreams.Subscriber; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.InputStream; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.concurrent.Callable; +import butterknife.BindView; +import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.Optional; import io.reactivex.Observable; +import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; import io.reactivex.functions.Consumer; +import io.reactivex.functions.Predicate; import io.reactivex.schedulers.Schedulers; /** * Created by Stardust on 2017/3/13. */ - +@EFragment(R.layout.fragment_my_script_list) public class MyScriptListFragment extends Fragment { public static final String MESSAGE_SCRIPT_FILE_ADDED = "MESSAGE_SCRIPT_FILE_ADDED"; private static final String TAG = "MyScriptListFragment"; - private static ScriptFile sCurrentDirectory = StorageScriptProvider.DEFAULT_DIRECTORY; + private static ScriptFile sCurrentDirectory = StorageFileProvider.DEFAULT_DIRECTORY; - private ScriptAndFolderListRecyclerView mScriptListRecyclerView; - private ScriptListWithProgressBarView mScriptListWithProgressBarView; - private View mNoScriptHint; - private MaterialDialog mScriptFileOperationDialog; - private MaterialDialog mDirectoryOperationDialog; - private ScriptFile mSelectedScriptFile; + @ViewById(R.id.script_file_list) + RecyclerView mScriptFileList; - @Nullable - @Override - public View createView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_my_script_list, container, false); - } + @ViewById(R.id.swipe_refresh_layout) + SwipeRefreshLayout mSwipeRefreshLayout; + private ScriptListAdapter mScriptListAdapter = new ScriptListAdapter(); + private ScriptFile mSelectedScriptFile; - @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - mScriptListWithProgressBarView = $(R.id.script_list); - mScriptListRecyclerView = mScriptListWithProgressBarView.getScriptAndFolderListRecyclerView(); - mNoScriptHint = $(R.id.hint_no_script); - initScriptListRecyclerView(); - initDialogs(); - } + private ArrayList mScriptFiles = new ArrayList<>(); + private ArrayList mDirectories = new ArrayList<>(); - private void initScriptListRecyclerView() { - mScriptListWithProgressBarView.setStorageScriptProvider(StorageScriptProvider.getDefault()); - mScriptListRecyclerView.getAdapter().registerAdapterDataObserver(new SimpleAdapterDataObserver() { - @Override - public void onSomethingChanged() { - if (mScriptListRecyclerView.getAdapter().getItemCount() == 0) { - mNoScriptHint.setVisibility(View.VISIBLE); - } else { - mNoScriptHint.setVisibility(View.GONE); - } - } - }); - mScriptListRecyclerView.setOnItemClickListener(new ScriptAndFolderListRecyclerView.OnScriptFileClickListener() { + @AfterViews + void setUpViews() { + initScriptListRecyclerView(); + mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override - public void onClick(ScriptFile file, int position) { - if (file.getType() == ScriptFile.TYPE_JAVA_SCRIPT) { - Scripts.edit(file); - } else { - mSelectedScriptFile = file; - mScriptFileOperationDialog.show(); - } + public void onRefresh() { + loadScriptList(); } }); - mScriptListRecyclerView.setOnItemLongClickListener(new ScriptAndFolderListRecyclerView.OnScriptFileLongClickListener() { + } + + private void initScriptListRecyclerView() { + mScriptFileList.setAdapter(mScriptListAdapter); + GridLayoutManager manager = new GridLayoutManager(getContext(), 2); + manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override - public void onLongClick(ScriptFile file, int position) { - mSelectedScriptFile = file; - if (file.isDirectory()) { - mDirectoryOperationDialog.show(); - } else { - mScriptFileOperationDialog.show(); + public int getSpanSize(int position) { + //For directories + if (position >= 1 && position <= mDirectories.size()) { + return 1; } + //For files and category + return 2; } }); - mScriptListRecyclerView.setOnCurrentDirectoryChangeListener(new ScriptAndFolderListRecyclerView.OnCurrentDirectoryChangeListener() { - @Override - public void onChange(ScriptFile oldDir, ScriptFile newDir) { - sCurrentDirectory = newDir; - } - }); + mScriptFileList.setLayoutManager(manager); + loadScriptList(); } - private void initDialogs() { - mScriptFileOperationDialog = new OperationDialogBuilder(getContext()) - .item(R.id.loop, R.drawable.ic_loop_white_24dp, R.string.text_run_repeatedly) - .item(R.id.rename, R.drawable.ic_ali_rename, R.string.text_rename) - .item(R.id.open_by_other_apps, R.drawable.ic_ali_open, R.string.text_open_by_other_apps) - .item(R.id.create_shortcut, R.drawable.ic_ali_shortcut, R.string.text_send_shortcut) - .item(R.id.delete, R.drawable.ic_ali_delete, R.string.text_delete) - .bindItemClick(this) - .build(); - mDirectoryOperationDialog = new OperationDialogBuilder(getContext()) - .item(R.id.rename, R.drawable.ic_ali_rename, R.string.text_rename) - .item(R.id.delete, R.drawable.ic_ali_delete, R.string.text_delete) - .bindItemClick(this) - .build(); + private void loadScriptList() { + mScriptFiles.clear(); + mDirectories.clear(); + StorageFileProvider.getDefault().getInitialDirectoryScriptFiles() + .subscribeOn(Schedulers.computation()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SimpleObserver() { + + + @Override + public void onNext(@io.reactivex.annotations.NonNull ScriptFile file) { + if (file.isFile()) { + mScriptFiles.add(file); + } else { + mDirectories.add(file); + } + } + + @Override + public void onComplete() { + mScriptListAdapter.notifyDataSetChanged(); + mSwipeRefreshLayout.setRefreshing(false); + } + }); } @@ -147,7 +139,7 @@ private void notifyScriptFileChanged() { getActivity().runOnUiThread(new Runnable() { @Override public void run() { - StorageScriptProvider.getDefault().notifyDirectoryChanged(getCurrentDirectory()); + StorageFileProvider.getDefault().notifyDirectoryChanged(getCurrentDirectory()); } }); } @@ -155,7 +147,6 @@ public void run() { @Optional @OnClick(R.id.loop) void runScriptRepeatedly() { - dismissDialogs(); new ScriptLoopDialog(getActivity(), mSelectedScriptFile) .show(); } @@ -163,30 +154,12 @@ void runScriptRepeatedly() { @Optional @OnClick(R.id.rename) void renameScriptFile() { - dismissDialogs(); - new ScriptOperations(getActivity(), getView()) - .rename(mSelectedScriptFile) - .subscribe(new Consumer() { - @Override - public void accept(@io.reactivex.annotations.NonNull Boolean renamed) throws Exception { - StorageScriptProvider.getDefault().notifyDirectoryChanged(mScriptListRecyclerView.getCurrentDirectory()); - onScriptFileOperated(); - } - }); - } - - private void dismissDialogs() { - if (mDirectoryOperationDialog.isShowing()) - mDirectoryOperationDialog.dismiss(); - if (mScriptFileOperationDialog.isShowing()) - mScriptFileOperationDialog.dismiss(); } @Optional @OnClick(R.id.open_by_other_apps) void openByOtherApps() { - dismissDialogs(); Scripts.openByOtherApps(mSelectedScriptFile); onScriptFileOperated(); } @@ -196,7 +169,7 @@ private void onScriptFileOperated() { getActivity().runOnUiThread(new Runnable() { @Override public void run() { - mScriptListWithProgressBarView.hideProgressBar(); + mSwipeRefreshLayout.setRefreshing(false); } }); } @@ -204,7 +177,6 @@ public void run() { @Optional @OnClick(R.id.create_shortcut) void createShortcut() { - dismissDialogs(); Scripts.createShortcut(mSelectedScriptFile); Snackbar.make(getView(), R.string.text_already_create, Snackbar.LENGTH_SHORT).show(); onScriptFileOperated(); @@ -213,7 +185,6 @@ void createShortcut() { @Optional @OnClick(R.id.delete) void deleteScriptFile() { - dismissDialogs(); new MaterialDialog.Builder(getActivity()) .title(R.string.delete_confirm) .positiveText(R.string.cancel) @@ -228,7 +199,6 @@ public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) } private void doDeletingScriptFile() { - mScriptListWithProgressBarView.showProgressBar(); Observable.fromPublisher(new Publisher() { @Override public void subscribe(Subscriber s) { @@ -255,55 +225,123 @@ public void run() { }); } + private class ScriptListAdapter extends RecyclerView.Adapter { - @Override - public void onResume() { - super.onResume(); - mScriptListRecyclerView.setFocusableInTouchMode(true); - mScriptListRecyclerView.requestFocus(); - } - - private class InputCallback implements MaterialDialog.InputCallback { - - private boolean mIsDirectory = false; - private String mExcluded; - private boolean mIsFirstTextChanged = true; + private final int VIEW_TYPE_FILE = 0; + private final int VIEW_TYPE_DIRECTORY = 1; + //category是类别,也即"文件", "文件夹"那两个 + private final int VIEW_TYPE_CATEGORY = 2; - InputCallback(boolean isDirectory, String excluded) { - mIsDirectory = isDirectory; - mExcluded = excluded; - } - InputCallback(boolean isDirectory) { - mIsDirectory = isDirectory; + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + LayoutInflater inflater = LayoutInflater.from(parent.getContext()); + if (viewType == VIEW_TYPE_FILE) { + return new ScriptFileViewHolder(inflater.inflate(R.layout.script_file_list_file, parent, false)); + } else if (viewType == VIEW_TYPE_DIRECTORY) { + return new DirectoryViewHolder(inflater.inflate(R.layout.script_file_list_directory, parent, false)); + } else { + return new CategoryViewHolder(inflater.inflate(R.layout.script_file_list_category, parent, false)); + } } + @SuppressWarnings("unchecked") @Override - public void onInput(@NonNull MaterialDialog dialog, CharSequence input) { - if (mIsFirstTextChanged) { - mIsFirstTextChanged = false; + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + BindableViewHolder bindableViewHolder = (BindableViewHolder) holder; + if (position == 0 || position == mDirectories.size() + 1) { + bindableViewHolder.bind(position == 0, position); return; } - EditText editText = dialog.getInputEditText(); - if (editText == null) + if (position <= mDirectories.size()) { + bindableViewHolder.bind(mDirectories.get(position - 1), position); return; - int errorResId = 0; - if (input == null || input.length() == 0) { - errorResId = R.string.text_name_should_not_be_empty; - } else if (!input.equals(mExcluded)) { - if (new File(getCurrentDirectory(), mIsDirectory ? input.toString() : input.toString() + ".js").exists()) { - errorResId = R.string.text_file_exists; - } } - if (errorResId == 0) { - editText.setError(null); - dialog.getActionButton(DialogAction.POSITIVE).setEnabled(true); + bindableViewHolder.bind(mScriptFiles.get(position - mDirectories.size() - 2), position); + } + + @Override + public int getItemViewType(int position) { + if (position == 0 || position == mDirectories.size() + 1) { + return VIEW_TYPE_CATEGORY; + } + if (position <= mDirectories.size()) { + return VIEW_TYPE_DIRECTORY; + } + return VIEW_TYPE_FILE; + } + + @Override + public int getItemCount() { + return mScriptFiles.size() + mDirectories.size() + 2; + } + } + + static class ScriptFileViewHolder extends BindableViewHolder { + + private static final DateFormat DATE_FORMAT = SimpleDateFormat.getDateTimeInstance(); + + @BindView(R.id.name) + TextView mName; + @BindView(R.id.first_char) + TextView mFirstChar; + @BindView(R.id.desc) + TextView mDesc; + GradientDrawable mFirstCharBackground; + + public ScriptFileViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + mFirstCharBackground = (GradientDrawable) mFirstChar.getBackground(); + } + + @Override + public void bind(ScriptFile file, int position) { + mName.setText(file.getSimplifiedName()); + mDesc.setText(PFile.getHumanReadableSize(file.length())); + if (file.getType() == ScriptFile.TYPE_JAVA_SCRIPT) { + mFirstChar.setText("J"); + //什么?裸写颜色代码?!不影响代码可读性和重构成本的情况下,这样子修改起来方便多啦 + mFirstCharBackground.setColor(0xFF99CC99); } else { - editText.setError(getString(errorResId)); - dialog.getActionButton(DialogAction.POSITIVE).setEnabled(false); + mFirstChar.setText("R"); + mFirstCharBackground.setColor(0xFFFD999A); } } } + static class DirectoryViewHolder extends BindableViewHolder { + + @BindView(R.id.name) + TextView mName; + + public DirectoryViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } + + @Override + public void bind(ScriptFile data, int position) { + mName.setText(data.getSimplifiedName()); + } + } + + static class CategoryViewHolder extends BindableViewHolder { + + @BindView(R.id.title) + TextView mTitle; + + public CategoryViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } + + @Override + public void bind(Boolean isDirCategory, int position) { + mTitle.setText(isDirCategory ? R.string.text_directory : R.string.text_file); + } + } + + } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptFileChooserDialogBuilder.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptFileChooserDialogBuilder.java index 5fb06c605..3f6e83751 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptFileChooserDialogBuilder.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptFileChooserDialogBuilder.java @@ -5,7 +5,7 @@ import com.afollestad.materialdialogs.MaterialDialog; import com.stardust.scriptdroid.script.ScriptFile; -import com.stardust.scriptdroid.script.StorageScriptProvider; +import com.stardust.scriptdroid.script.StorageFileProvider; /** * Created by Stardust on 2017/4/3. @@ -18,7 +18,7 @@ public interface FileCallback { } private ScriptListWithProgressBarView mScriptListWithProgressBarView; - private StorageScriptProvider mStorageScriptProvider; + private StorageFileProvider mStorageFileProvider; private FileCallback mFileCallback; public ScriptFileChooserDialogBuilder(@NonNull Context context) { @@ -34,23 +34,23 @@ public ScriptFileChooserDialogBuilder fileCallback(final FileCallback fileCallba } public ScriptFileChooserDialogBuilder initialPath(String initialPath) { - mStorageScriptProvider = new StorageScriptProvider(initialPath, 5); + mStorageFileProvider = new StorageFileProvider(initialPath, 5); return this; } - public ScriptFileChooserDialogBuilder scriptProvider(StorageScriptProvider storageScriptProvider) { - mStorageScriptProvider = storageScriptProvider; + public ScriptFileChooserDialogBuilder scriptProvider(StorageFileProvider storageFileProvider) { + mStorageFileProvider = storageFileProvider; return this; } public MaterialDialog build() { - if (mStorageScriptProvider != null) { - mScriptListWithProgressBarView.setStorageScriptProvider(mStorageScriptProvider); + if (mStorageFileProvider != null) { + mScriptListWithProgressBarView.setStorageScriptProvider(mStorageFileProvider); } customView(mScriptListWithProgressBarView, false); final MaterialDialog dialog = super.build(); if (mFileCallback != null) { - mScriptListWithProgressBarView.setOnItemClickListener(new ScriptAndFolderListRecyclerView.OnScriptFileClickListener() { + mScriptListWithProgressBarView.setOnItemClickListener(new ScriptListRecyclerView.OnScriptFileClickListener() { @Override public void onClick(ScriptFile file, int position) { mFileCallback.onFileSelection(dialog, file); diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptAndFolderListRecyclerView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListRecyclerView.java similarity index 87% rename from app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptAndFolderListRecyclerView.java rename to app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListRecyclerView.java index ee66c75d0..9d421fb7a 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptAndFolderListRecyclerView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListRecyclerView.java @@ -4,7 +4,6 @@ import android.os.Bundle; import android.os.Parcelable; import android.support.annotation.Nullable; -import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.view.KeyEvent; @@ -19,8 +18,7 @@ import com.stardust.scriptdroid.script.ScriptFile; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.script.Scripts; -import com.stardust.scriptdroid.script.StorageScriptProvider; -import com.stardust.util.ViewUtil; +import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.util.ViewUtils; import com.stardust.widget.ViewHolderMutableAdapter; import com.stardust.widget.ViewHolderSupplier; @@ -32,8 +30,7 @@ import org.reactivestreams.Publisher; import org.reactivestreams.Subscriber; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; +import java.util.List; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -45,7 +42,7 @@ * Created by Stardust on 2017/3/27. */ -public class ScriptAndFolderListRecyclerView extends RecyclerView { +public class ScriptListRecyclerView extends RecyclerView { public interface OnScriptFileClickListener { @@ -157,22 +154,22 @@ public ViewHolder createViewHolder(ViewGroup parent, int viewType) { private ScriptFile mRootDirectory; private Adapter mAdapter; private boolean mCanGoBack = false; - private StorageScriptProvider mStorageScriptProvider; + private StorageFileProvider mStorageFileProvider; private FileProcessListener mFileProcessListener; private OnCurrentDirectoryChangeListener mOnCurrentDirectoryChangeListener; private boolean mScriptFileOperationEnabled = true; - public ScriptAndFolderListRecyclerView(Context context) { + public ScriptListRecyclerView(Context context) { super(context); init(); } - public ScriptAndFolderListRecyclerView(Context context, @Nullable AttributeSet attrs) { + public ScriptListRecyclerView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } - public ScriptAndFolderListRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) { + public ScriptListRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } @@ -186,18 +183,14 @@ private void setCurrentDirectory(final ScriptFile directory, boolean canGoBack) if (mFileProcessListener != null) { mFileProcessListener.onFilesListing(); } - Observable.fromPublisher(new Publisher() { - @Override - public void subscribe(Subscriber s) { - s.onNext(mStorageScriptProvider.getDirectoryScriptFiles(directory)); - s.onComplete(); - } - }).subscribeOn(Schedulers.io()) + mStorageFileProvider.getDirectoryScriptFiles(directory) + .subscribeOn(Schedulers.io()) + .toList() .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { + .subscribe(new Consumer>() { @Override - public void accept(@NonNull ScriptFile[] scriptFiles) throws Exception { - mAdapter.setScripts(scriptFiles); + public void accept(@NonNull List scriptFiles) throws Exception { + mAdapter.setScripts(scriptFiles.toArray(new ScriptFile[0])); if (mFileProcessListener != null) mFileProcessListener.onFileListed(); smoothScrollToPosition(0); @@ -217,16 +210,16 @@ public void setFileProcessListener(FileProcessListener fileProcessListener) { mFileProcessListener = fileProcessListener; } - public void setStorageScriptProvider(StorageScriptProvider storageScriptProvider) { - if (mStorageScriptProvider != null) - mStorageScriptProvider.unregisterDirectoryChangeListener(this); - mStorageScriptProvider = storageScriptProvider; - mStorageScriptProvider.registerDirectoryChangeListener(this); - setRootDirectory(mStorageScriptProvider.getInitialDirectory()); + public void setStorageFileProvider(StorageFileProvider storageFileProvider) { + if (mStorageFileProvider != null) + mStorageFileProvider.unregisterDirectoryChangeListener(this); + mStorageFileProvider = storageFileProvider; + mStorageFileProvider.registerDirectoryChangeListener(this); + setRootDirectory(mStorageFileProvider.getInitialDirectory()); } - public StorageScriptProvider getStorageScriptProvider() { - return mStorageScriptProvider; + public StorageFileProvider getStorageFileProvider() { + return mStorageFileProvider; } public void setOnItemClickListener(OnScriptFileClickListener onItemClickListener) { @@ -300,15 +293,15 @@ protected void onRestoreInstanceState(Parcelable state) { @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); - if (mStorageScriptProvider != null) - mStorageScriptProvider.registerDirectoryChangeListener(this); + if (mStorageFileProvider != null) + mStorageFileProvider.registerDirectoryChangeListener(this); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); - mStorageScriptProvider.unregisterDirectoryChangeListener(this); + mStorageFileProvider.unregisterDirectoryChangeListener(this); } @Override @@ -323,7 +316,7 @@ public boolean dispatchKeyEvent(KeyEvent event) { } @Subscribe(threadMode = ThreadMode.MAIN) - public void onDirectoryChange(StorageScriptProvider.DirectoryChangeEvent event) { + public void onDirectoryChange(StorageFileProvider.DirectoryChangeEvent event) { if (event.directory.equals(mCurrentDirectory)) { updateCurrentDirectory(); } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListWithProgressBarView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListWithProgressBarView.java index a35c4352d..be77bc11e 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListWithProgressBarView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListWithProgressBarView.java @@ -10,12 +10,11 @@ import android.support.annotation.StyleRes; import android.support.v4.widget.SwipeRefreshLayout; import android.util.AttributeSet; -import android.view.View; import android.widget.FrameLayout; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.script.ScriptFile; -import com.stardust.scriptdroid.script.StorageScriptProvider; +import com.stardust.scriptdroid.script.StorageFileProvider; /** * Created by Stardust on 2017/4/3. @@ -23,7 +22,7 @@ public class ScriptListWithProgressBarView extends FrameLayout { - private ScriptAndFolderListRecyclerView mScriptAndFolderListRecyclerView; + private ScriptListRecyclerView mScriptAndFolderListRecyclerView; private SwipeRefreshLayout mSwipeRefreshLayout; public ScriptListWithProgressBarView(@NonNull Context context) { @@ -50,8 +49,8 @@ public ScriptListWithProgressBarView(@NonNull Context context, @Nullable Attribu private void init() { inflate(getContext(), R.layout.script_and_folder_list_view, this); mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout); - mScriptAndFolderListRecyclerView = (ScriptAndFolderListRecyclerView) findViewById(R.id.script_list_recycler_view); - mScriptAndFolderListRecyclerView.setFileProcessListener(new ScriptAndFolderListRecyclerView.FileProcessListener() { + mScriptAndFolderListRecyclerView = (ScriptListRecyclerView) findViewById(R.id.script_list_recycler_view); + mScriptAndFolderListRecyclerView.setFileProcessListener(new ScriptListRecyclerView.FileProcessListener() { @Override public void onFilesListing() { showProgressBar(); @@ -65,22 +64,22 @@ public void onFileListed() { mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { - mScriptAndFolderListRecyclerView.getStorageScriptProvider().refreshAll(); + mScriptAndFolderListRecyclerView.getStorageFileProvider().refreshAll(); } }); } - public ScriptAndFolderListRecyclerView getScriptAndFolderListRecyclerView() { + public ScriptListRecyclerView getScriptAndFolderListRecyclerView() { return mScriptAndFolderListRecyclerView; } - public void setStorageScriptProvider(StorageScriptProvider storageScriptProvider) { - mScriptAndFolderListRecyclerView.setStorageScriptProvider(storageScriptProvider); + public void setStorageScriptProvider(StorageFileProvider storageFileProvider) { + mScriptAndFolderListRecyclerView.setStorageFileProvider(storageFileProvider); } - public void setOnItemClickListener(ScriptAndFolderListRecyclerView.OnScriptFileClickListener onItemClickListener) { + public void setOnItemClickListener(ScriptListRecyclerView.OnScriptFileClickListener onItemClickListener) { mScriptAndFolderListRecyclerView.setOnItemClickListener(onItemClickListener); } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/update/UpdateInfoDialogBuilder.java b/app/src/main/java/com/stardust/scriptdroid/ui/update/UpdateInfoDialogBuilder.java index d6049f1f3..712e6bb69 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/update/UpdateInfoDialogBuilder.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/update/UpdateInfoDialogBuilder.java @@ -16,7 +16,7 @@ import com.afollestad.materialdialogs.MaterialDialog; import com.stardust.scriptdroid.BuildConfig; import com.stardust.scriptdroid.R; -import com.stardust.scriptdroid.script.StorageScriptProvider; +import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.scriptdroid.tool.IntentTool; import com.stardust.scriptdroid.tool.UpdateChecker; import com.stardust.util.DownloadTask; @@ -117,7 +117,7 @@ private void directlyDownload(String downloadUrl) { .title(R.string.text_downloading) .progress(false, 100) .show(); - final String path = StorageScriptProvider.DEFAULT_DIRECTORY_PATH + "AutoJs.apk"; + final String path = StorageFileProvider.DEFAULT_DIRECTORY_PATH + "AutoJs.apk"; final DownloadTask task = new DownloadTask() { @Override protected void onProgressUpdate(Integer... values) { diff --git a/app/src/main/java/com/stardust/widget/AutoAdapter.java b/app/src/main/java/com/stardust/widget/AutoAdapter.java new file mode 100644 index 000000000..e34537243 --- /dev/null +++ b/app/src/main/java/com/stardust/widget/AutoAdapter.java @@ -0,0 +1,63 @@ +package com.stardust.widget; + +import android.support.v7.widget.RecyclerView; +import android.view.ViewGroup; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * Created by Stardust on 2017/8/19. + */ + +public class AutoAdapter
extends RecyclerView.Adapter> { + + private ViewHolderSupplier> mViewHolderSupplier; + private List
mList = new ArrayList<>(); + + public AutoAdapter(ViewHolderSupplier> viewHolderSupplier) { + mViewHolderSupplier = viewHolderSupplier; + } + + + @Override + public BindableViewHolder
onCreateViewHolder(ViewGroup parent, int viewType) { + return mViewHolderSupplier.createViewHolder(parent, viewType); + } + + @Override + public void onBindViewHolder(BindableViewHolder
holder, int position) { + holder.bind(mList.get(position), position); + } + + @Override + public int getItemCount() { + return mList.size(); + } + + public void remove(DT data) { + int pos = mList.indexOf(data); + if (pos < 0) + return; + mList.remove(pos); + notifyItemRemoved(pos); + } + + public void remove(int index) { + mList.remove(index); + notifyItemRemoved(index); + } + + public void addAll(Collection c) { + mList.addAll(c); + notifyItemRangeInserted(mList.size() - c.size() - 1, mList.size() - 1); + } + + public void setData(Collection c) { + mList.clear(); + mList.addAll(c); + notifyDataSetChanged(); + } + +} diff --git a/app/src/main/java/com/stardust/widget/ViewHolderSupplier.java b/app/src/main/java/com/stardust/widget/ViewHolderSupplier.java index 2d67c760c..7df88c061 100644 --- a/app/src/main/java/com/stardust/widget/ViewHolderSupplier.java +++ b/app/src/main/java/com/stardust/widget/ViewHolderSupplier.java @@ -1,8 +1,13 @@ package com.stardust.widget; import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + /** * Created by Stardust on 2017/4/8. */ @@ -11,4 +16,18 @@ public abstract class ViewHolderSupplier { public abstract VH createViewHolder(ViewGroup parent, int viewType); + public static ViewHolderSupplier of(final Class c, final int layoutRes) { + return new ViewHolderSupplier() { + @Override + public VH createViewHolder(ViewGroup parent, int viewType) { + try { + Constructor constructor = c.getConstructor(View.class); + return constructor.newInstance(LayoutInflater.from(parent.getContext()).inflate(layoutRes, parent, false)); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + }; + } + } diff --git a/app/src/main/res/drawable/circle_green.xml b/app/src/main/res/drawable/circle_green.xml new file mode 100644 index 000000000..95376eb4a --- /dev/null +++ b/app/src/main/res/drawable/circle_green.xml @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_ascending_order.png b/app/src/main/res/drawable/ic_ascending_order.png new file mode 100644 index 0000000000000000000000000000000000000000..350043d80c5c9341441a59ec4060dc474463135e GIT binary patch literal 628 zcmV-)0*n2LP)Z2U>x4psx<*2t>w5?La%w4uA^O3bX`$b-b)|Dh^_j+XN=w zjmK*?$^U2f%LYJb_y-%VAO4>KH5zrZ0=jwLyAH{o)_R8k$02j9u|(56mpiku;0z4) z*_epBWQt9t)H7F5Ees5YqeDQtDn%2}pf9Cri~*%o2Q%@Ah@F{eQ;1EaPM$a>{yYN% ztuGPqXhG~Gm#4e6H}Cf6~7g_eKdcFG~h)Zw*;G6vU zO^D!$%-ePd&{ZNs#w%~3d2n3|hXNfUuqxJTzy_{s!4ROUM1_od4Ggqa2-s&X=mq+V zqYLI*Kf-($h0}mi=Np+Q9z!EJay)dss$7b2uiDSTx0eV@{ z^Ybe^aT)9_tA#HZs}#psE17|^JcTd^98myf>Z|)d$w0_06!Nx8mVwrQqxRYi0P_|q zAx80b$bmQmnA8qpj_{b6WF-_Mjx(n+u)0eD-S_8FiWKAfc&;J$7rR^XI;l3~BaR|K0A&wEpnUf4+j+mI3)A5d4h!N`Vq*4byn%NkxCKwKR`|UD O0000TZ_6STQO`r3)4j%dQz zu4S!ckCP0_lP6xS_V@0$E1STc|Hz)l4<|-e*8e zr+uo;ZHy32$@hHS=Y4cmLQUoX0rQ1(KC2R+1Yj9R8Q69SH5p_|sksnhxm5;Yx({Ye zXAon8iLprnuw6)qn;v8O0{4{ltE=yq*LRkIkTz<-OvaoGjMyXqTS6%Vj(X~>ge=5_ ztu8TjO#x;*2Qen_7@I-{uCL_`2sw>$RIz4}@lmfOUrsj#0XEH)sh@3ZT6czT!@u*T zzV<5|a%W@Ud7O>T^5%7e%otc?+3*4BzF_tr#P-xk*@69RaTMba0Df!5`a)d&%CE0& zqYd7xE4z@C^2`8vj1l0PqMZt`fky)E1h;bmF+dYA=bZDWs?2pRzy=Wnw5N{WKC38w zS0&C6n2$OC7E`jdlQ;xut=MrH+?aqu*LaT-7@$Lrzo7y8?7adIKrggf^<6LBz5tru zM+v9{x(?jpAQOj_emdFwr}dv7ZHPt*SOa}WfP5`Hv48kpSsk4KUSl4e*WZ1q#MCn)jEyqc6HEjJ zmBEGXg8vGjCQQMjotVXPDG@Msnfwnn0WD(A<*qAQc1{`;0HQY`_(WHL1?ojt%Rxc! zr3$9q73ljJs2G%KI$?^YgcOn*Wxe_fIk12e$YD1!CzM$R9j*dW%8;?qBLQ6^Vh99T zS#EEolpD(=8o{+Hut-*GM3`xvIFETW*LSS09f-SK+bFAs;1a2bqbS!u9n^`5XcG&5 zS_f&mGucl57mx5-i2JN-CvLh*d?vlM3@4= z2?6A!wl}>w#Lj$d8F;vTz%o(J;D)V$AL^YM=MUHq^?s=DZZkjB`=P$OTe`0tb|dS~ v!|_&n1&+u4_s(7cuYe%~-a>{18i#)ZbpGZsHrP>200000NkvXXu0mjf+v3~p literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 94f58a151..570571f0c 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -16,8 +16,7 @@ android:id="@+id/app_bar_bg" android:layout_width="match_parent" android:layout_height="128.5dp" - android:scaleType="fitXY" - android:src="@drawable/toolbar_bg"/> + android:scaleType="fitXY"/> - + - - - - - \ No newline at end of file + android:layout_height="wrap_content"/> + \ No newline at end of file diff --git a/app/src/main/res/layout/script_and_folder_list_view.xml b/app/src/main/res/layout/script_and_folder_list_view.xml index 97bd4802e..358eb56d0 100644 --- a/app/src/main/res/layout/script_and_folder_list_view.xml +++ b/app/src/main/res/layout/script_and_folder_list_view.xml @@ -8,7 +8,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - diff --git a/app/src/main/res/layout/script_file_list_category.xml b/app/src/main/res/layout/script_file_list_category.xml new file mode 100644 index 000000000..404127039 --- /dev/null +++ b/app/src/main/res/layout/script_file_list_category.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/script_file_list_directory.xml b/app/src/main/res/layout/script_file_list_directory.xml new file mode 100644 index 000000000..1ad796a3e --- /dev/null +++ b/app/src/main/res/layout/script_file_list_directory.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/script_file_list_file.xml b/app/src/main/res/layout/script_file_list_file.xml new file mode 100644 index 000000000..fd79d22e8 --- /dev/null +++ b/app/src/main/res/layout/script_file_list_file.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/script_list_view.xml b/app/src/main/res/layout/script_list_view.xml new file mode 100644 index 000000000..5d59d3646 --- /dev/null +++ b/app/src/main/res/layout/script_list_view.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 86be93130..5bf53b6a6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -227,6 +227,8 @@ key_enable_observe_key 不启动则无法使用events的按键事件; 启用后软件崩溃等情况会造成按键失灵。重启无障碍服务生效 启用按键监听 + 文件夹 + 文件 diff --git a/common/src/main/java/com/stardust/io/EFile.java b/common/src/main/java/com/stardust/io/EFile.java new file mode 100644 index 000000000..8331bcf2d --- /dev/null +++ b/common/src/main/java/com/stardust/io/EFile.java @@ -0,0 +1,29 @@ +package com.stardust.io; + +import android.support.annotation.NonNull; + +import java.io.File; +import java.net.URI; + +/** + * Created by Stardust on 2017/8/19. + */ + +public class EFile extends File { + + public EFile(@NonNull String pathname) { + super(pathname); + } + + public EFile(String parent, @NonNull String child) { + super(parent, child); + } + + public EFile(File parent, @NonNull String child) { + super(parent, child); + } + + public EFile(@NonNull URI uri) { + super(uri); + } +} diff --git a/common/src/main/java/com/stardust/pio/PFile.java b/common/src/main/java/com/stardust/pio/PFile.java index 670a9af14..733908aa9 100644 --- a/common/src/main/java/com/stardust/pio/PFile.java +++ b/common/src/main/java/com/stardust/pio/PFile.java @@ -16,6 +16,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.Charset; +import java.util.Locale; /** * Created by Stardust on 2017/4/1. @@ -346,4 +347,12 @@ public static boolean isEmptyDir(String path) { public static String join(String parent, String child) { return new File(parent, child).getPath(); } + + public static String getHumanReadableSize(long bytes) { + int unit = 1024; + if (bytes < unit) return bytes + " B"; + int exp = (int) (Math.log(bytes) / Math.log(unit)); + String pre = "KMGTPE".substring(exp - 1, exp); + return String.format(Locale.getDefault(), "%.1f %sB", bytes / Math.pow(unit, exp), pre); + } } From 602b84fc92745757c0bf41846c5b7b7e75f9c580 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Mon, 21 Aug 2017 10:48:11 +0800 Subject: [PATCH 03/46] add: fab and toolbar hide when scrolling --- app/build.gradle | 17 +++- .../scriptdroid/ui/main/MainActivity.java | 14 +--- .../script_list/MyScriptListFragment.java | 3 +- .../widget/ScrollAwareFABBehavior.java | 84 +++++++++++++++++++ app/src/main/res/layout/activity_main.xml | 50 +++++------ app/src/main/res/layout/content_main.xml | 21 ----- .../res/layout/fragment_my_script_list.xml | 3 + autojs/build.gradle | 6 +- inrt/build.gradle | 2 +- 9 files changed, 128 insertions(+), 72 deletions(-) create mode 100644 app/src/main/java/com/stardust/widget/ScrollAwareFABBehavior.java delete mode 100644 app/src/main/res/layout/content_main.xml diff --git a/app/build.gradle b/app/build.gradle index 466cadb02..1ef205275 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -89,7 +89,9 @@ dependencies { annotationProcessor "org.androidannotations:androidannotations:$AAVersion" compile "org.androidannotations:androidannotations-api:$AAVersion" // ButterKnife - compile 'com.jakewharton:butterknife:8.6.0' + compile('com.jakewharton:butterknife:8.6.0', { + exclude group: 'com.android.support' + }) annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0' // Android supports compile 'com.android.support:appcompat-v7:25.3.1' @@ -99,7 +101,9 @@ dependencies { // Personal libraries compile 'com.github.hyb1996:MutableTheme:0.2.2' // Material Dialogs - compile 'com.afollestad.material-dialogs:core:0.9.2.3' + compile('com.afollestad.material-dialogs:core:0.9.2.3', { + exclude group: 'com.android.support' + }) // Gson compile 'com.google.code.gson:gson:2.8.0' // Common Markdown @@ -109,7 +113,10 @@ dependencies { // Console compile 'com.jraska:console:0.4.3' // Android issue reporter (a github issue reporter) - compile 'com.heinrichreimersoftware:android-issue-reporter:1.3.1' + compile('com.heinrichreimersoftware:android-issue-reporter:1.3.1', { + exclude group: 'com.afollestad.material-dialogs' + exclude group: 'com.android.support' + }) // compile 'com.github.hyb1996:android-multi-level-listview:1.1' compile 'de.psdev.licensesdialog:licensesdialog:1.8.1' @@ -126,7 +133,9 @@ dependencies { compile 'com.flurry.android:analytics:7.0.0@aar' compile 'com.pushtorefresh.storio:sqlite:1.12.3' // 920 Text Editors - compile 'com.afollestad.material-dialogs:commons:0.9.2.3' + compile('com.afollestad.material-dialogs:commons:0.9.2.3', { + exclude group: 'com.android.support' + }) compile 'com.makeramen:roundedimageview:2.2.1' compile 'com.rengwuxian.materialedittext:library:2.0.3' compile 'org.msgpack:msgpack-core:0.8.11' 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 839862f4a..3e73a04e7 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 @@ -83,7 +83,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega private FragmentPagerAdapterBuilder.StoredFragmentPagerAdapter mPagerAdapter; private OnActivityResultDelegate.Mediator mActivityResultMediator = new OnActivityResultDelegate.Mediator(); - private DrawableSaver mDrawerHeaderBackgroundSaver, mAppbarBackgroundSaver; + private DrawableSaver mDrawerHeaderBackgroundSaver; private VersionGuard mVersionGuard; @@ -178,7 +178,6 @@ private void setUpToolbar() { R.string.text_drawer_close); drawerToggle.syncState(); mDrawerLayout.addDrawerListener(drawerToggle); - mAppbarBackgroundSaver = new DrawableSaver.ImageSaver(this, "appbar_background", (ImageView) $(R.id.app_bar_bg)); } private void setUpTabViewPager() { @@ -192,11 +191,6 @@ private void setUpTabViewPager() { tabLayout.setupWithViewPager(mViewPager); } - @Click(R.id.add) - void showAddFilePanel() { - mAddBottomMenuPanel.show(); - } - @Click(R.id.create_new_file) void createScriptFile() { new ScriptOperations(this, mDrawerLayout) @@ -271,15 +265,9 @@ protected void onResume() { mVersionGuard.checkDeprecateAndUpdate(); } - @Click(R.id.toolbar) - public void OnToolbarClick() { - mAppbarBackgroundSaver.select(this, mActivityResultMediator); - } - @Subscribe public void onMessageEvent(MessageEvent event) { if (event.message.equals(MESSAGE_CLEAR_BACKGROUND_SETTINGS)) { - mAppbarBackgroundSaver.reset(); mDrawerHeaderBackgroundSaver.reset(); } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java index 90ac0a29f..aa2088cc7 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java @@ -107,11 +107,10 @@ private void loadScriptList() { mScriptFiles.clear(); mDirectories.clear(); StorageFileProvider.getDefault().getInitialDirectoryScriptFiles() - .subscribeOn(Schedulers.computation()) + .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new SimpleObserver() { - @Override public void onNext(@io.reactivex.annotations.NonNull ScriptFile file) { if (file.isFile()) { diff --git a/app/src/main/java/com/stardust/widget/ScrollAwareFABBehavior.java b/app/src/main/java/com/stardust/widget/ScrollAwareFABBehavior.java new file mode 100644 index 000000000..ba7e49f92 --- /dev/null +++ b/app/src/main/java/com/stardust/widget/ScrollAwareFABBehavior.java @@ -0,0 +1,84 @@ +package com.stardust.widget; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.TimeInterpolator; +import android.content.Context; +import android.support.design.widget.CoordinatorLayout; +import android.support.design.widget.FloatingActionButton; +import android.support.v4.view.animation.FastOutSlowInInterpolator; +import android.util.AttributeSet; +import android.view.View; + +/** + * Created by Stardust on 2017/8/20. + */ + +public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior { + + private static final long DURATION = 200; + private static final TimeInterpolator INTERPOLATOR = new FastOutSlowInInterpolator(); + private boolean mHidden = false; + + public ScrollAwareFABBehavior(Context context, AttributeSet attrs) { + super(); + } + + @Override + public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) { + return true; + } + + @Override + public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) { + super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed); + if (dyConsumed > 0) { + onScrollDown(coordinatorLayout, child); + } else if (dyConsumed < 0) { + onScrollUp(coordinatorLayout, child); + } + } + + private void onScrollUp(CoordinatorLayout parent, FloatingActionButton button) { + if (!mHidden) { + return; + } + startShowingAnimation(parent, button); + } + + private void startShowingAnimation(CoordinatorLayout parent, FloatingActionButton button) { + button.animate() + .translationY(0) + .setDuration(DURATION) + .setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mHidden = false; + } + }) + .start(); + } + + private void onScrollDown(CoordinatorLayout parent, FloatingActionButton button) { + if (mHidden) { + return; + } + startHidingAnimation(parent, button); + } + + private void startHidingAnimation(CoordinatorLayout parent, FloatingActionButton button) { + button.animate() + .translationY(parent.getY() + parent.getHeight() - button.getY()) + .setDuration(DURATION) + .setInterpolator(INTERPOLATOR) + .setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mHidden = true; + } + }) + .start(); + } + + +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 570571f0c..532f58872 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -12,58 +12,48 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - - - + app:layout_scrollFlags="scroll|enterAlways" + app:popupTheme="@style/AppTheme.PopupOverlay"/> - + app:tabMode="scrollable"/> - + + - - - - - diff --git a/app/src/main/res/layout/fragment_my_script_list.xml b/app/src/main/res/layout/fragment_my_script_list.xml index bf6b9551e..c1576a2fb 100644 --- a/app/src/main/res/layout/fragment_my_script_list.xml +++ b/app/src/main/res/layout/fragment_my_script_list.xml @@ -1,5 +1,6 @@ @@ -8,4 +9,6 @@ android:id="@+id/script_file_list" android:layout_width="match_parent" android:layout_height="wrap_content"/> + + \ No newline at end of file diff --git a/autojs/build.gradle b/autojs/build.gradle index bb4297c43..573b8d883 100644 --- a/autojs/build.gradle +++ b/autojs/build.gradle @@ -38,7 +38,11 @@ dependencies { compile 'com.github.hyb1996:DynamicLayoutInflator:0.1' compile 'org.greenrobot:eventbus:3.0.0' compile 'net.lingala.zip4j:zip4j:1.3.2' - compile 'com.afollestad.material-dialogs:core:0.9.2.3' + compile('com.afollestad.material-dialogs:core:0.9.2.3', { + exclude group: 'com.android.support' + }) + compile 'com.android.support:design:25.3.1' + compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.github.hyb1996:EnhancedFloaty:0.17' // Terminal emulator compile(name: 'libtermexec-release', ext: 'aar') diff --git a/inrt/build.gradle b/inrt/build.gradle index 8d2a6908e..ad12bc80e 100644 --- a/inrt/build.gradle +++ b/inrt/build.gradle @@ -39,7 +39,7 @@ dependencies { androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile 'com.android.support:appcompat-v7:25.3.0' + compile 'com.android.support:appcompat-v7:25.3.1' testCompile 'junit:junit:4.12' compile project(':automator') compile project(':common') From 42f68025981b6bc020aeb0e7a620b26f15dad5c8 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Tue, 22 Aug 2017 18:11:14 +0800 Subject: [PATCH 04/46] add: tutorial tab --- .idea/inspectionProfiles/Project_Default.xml | 1 + ...46\346\221\270\347\233\221\345\220\254.md" | 129 ++++---- .../stardust/scriptdroid/ui/BaseActivity.java | 7 +- .../scriptdroid/ui/edit/EditActivity.java | 4 +- .../scriptdroid/ui/edit/ScriptEditView.java | 117 ++++++++ .../scriptdroid/ui/main/MainActivity.java | 21 +- .../ui/main/community/CommunityFragment.java | 10 + .../ui/main/doc/OnlineDocsFragment.java | 56 ++++ .../script_list/MyScriptListFragment.java | 211 +------------ .../ui/main/script_list/ScriptListView.java | 280 ++++++++++++++++++ .../widget/AppWithStatusBarLayout.java | 86 ++++++ .../java/com/stardust/widget/EWebView.java | 109 +++++++ app/src/main/res/layout/activity_main.xml | 5 +- app/src/main/res/layout/ewebview.xml | 26 ++ .../res/layout/fragment_my_script_list.xml | 13 +- .../main/res/layout/fragment_online_docs.xml | 7 + app/src/main/res/layout/script_edit_view.xml | 49 +++ .../res/layout/script_file_list_directory.xml | 7 +- .../main/res/layout/script_file_list_file.xml | 6 +- app/src/main/res/values/strings.xml | 4 + .../com/stardust/util/BackPressedHandler.java | 15 +- 21 files changed, 858 insertions(+), 305 deletions(-) create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/edit/ScriptEditView.java create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityFragment.java create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/main/doc/OnlineDocsFragment.java create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListView.java create mode 100644 app/src/main/java/com/stardust/widget/AppWithStatusBarLayout.java create mode 100644 app/src/main/java/com/stardust/widget/EWebView.java create mode 100644 app/src/main/res/layout/ewebview.xml create mode 100644 app/src/main/res/layout/fragment_online_docs.xml create mode 100644 app/src/main/res/layout/script_edit_view.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index 027fe152f..5a8649f49 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -2,6 +2,7 @@ - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 8e776a214..8d2f4b097 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -12,10 +12,11 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - + - - - + + + + + + + + + + + android:background="@android:color/white"> - + android:layout_height="match_parent"> + + - + + + - + + - + android:layout_height="match_parent" + android:background="@android:color/white" + android:paddingLeft="6dp" + android:visibility="gone"> - - - + android:layout_height="wrap_content" + android:background="@android:color/white"/> + - - + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/task_list_recycler_view_item.xml b/app/src/main/res/layout/task_list_recycler_view_item.xml index af379748d..b40328a87 100644 --- a/app/src/main/res/layout/task_list_recycler_view_item.xml +++ b/app/src/main/res/layout/task_list_recycler_view_item.xml @@ -1,30 +1,34 @@ - - + + + android:background="@drawable/circle_green" + android:gravity="center" + android:textColor="@android:color/white" + android:textSize="24sp" + tools:text="J"/> + android:textColor="#9DA0A2" + android:textSize="11sp" + tools:text="18 KB"/> - + android:layout_width="36dp" + android:layout_height="match_parent" + android:background="?selectableItemBackgroundBorderless" + android:clickable="true" + android:padding="6dp" + android:src="@drawable/ic_close_gray600_48dp" + android:tint="#A9AAAB"/> - + - - \ No newline at end of file diff --git a/app/src/main/res/menu/menu_manager.xml b/app/src/main/res/menu/menu_manager.xml new file mode 100644 index 000000000..568d0d911 --- /dev/null +++ b/app/src/main/res/menu/menu_manager.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/raw/licenses.xml b/app/src/main/res/raw/licenses.xml index 35a6e5680..92388c83a 100644 --- a/app/src/main/res/raw/licenses.xml +++ b/app/src/main/res/raw/licenses.xml @@ -1,122 +1,122 @@ - + Rhino: JavaScript in Java https://github.com/mozilla/rhino Mozilla Public License 2.0 - - + + 920 Text Editor https://github.com/jecelyin/920-text-editor-v2 Apache Software License 2.0 - - + + LeakCanary Copyright 2015 Square, Inc. https://github.com/square/leakcanary Apache Software License 2.0 - - + + StorIO https://github.com/pushtorefresh/storio Apache Software License 2.0 - - + + Material Dialogs https://github.com/afollestad/material-dialogs Copyright (c) 2014-2016 Aidan Michael Follestad MIT License - - + + Gson https://github.com/google/gson Copyright 2008 Google Inc. Apache Software License 2.0 - - + + commonmark-java https://github.com/atlassian/commonmark-java Copyright (c) 2015-2016 Atlassian and others. BSD 2-Clause License - - + + Alipay ZeroSdk Copyright 2016 Fung Go (fython) https://github.com/fython/AlipayZeroSdk Apache Software License 2.0 - - + + Console Copyright 2015 Josef Raska https://github.com/jraska/Console Apache Software License 2.0 - - + + android-issue-reporter https://github.com/HeinrichReimer/android-issue-reporter Apache Software License 2.0 - - + + SortableTableView Copyright 2015 Ingo Schwarz https://github.com/ISchwarz23/SortableTableView Apache Software License 2.0 - - + + MultiLevelListView 2016 (C) Copyright Open-RnD Sp. z o.o. https://github.com/open-rnd/android-multi-level-listview Apache Software License 2.0 - - + + hover 2016 (C) Copyright Open-RnD Sp. z o.o. https://github.com/google/hover Apache Software License 2.0 - - + + event-bus 2016 (C) Copyright Open-RnD Sp. z o.o. https://github.com/greenrobot/EventBus Apache Software License 2.0 - - + + Expandable RecyclerView Copyright (c) 2015 Big Nerd Ranch https://github.com/bignerdranch/expandable-recycler-view MIT License - - + + Android Terminal Emulator https://github.com/jackpal/Android-Terminal-Emulator Apache Software License 2.0 - - + + RecyclerView-FlexibleDivider Copyright 2016 yqritc https://github.com/yqritc/RecyclerView-FlexibleDivider Apache Software License 2.0 - - + + Volley https://github.com/google/volley Apache Software License 2.0 - - + + Settings Compat Copyright 2016 czy1121 https://github.com/czy1121/settingscompat Apache Software License 2.0 - - + + Zip4j http://www.lingala.net/zip4j/ Apache Software License 2.0 - + \ No newline at end of file diff --git a/app/src/main/res/raw/mpl_20_full.txt b/app/src/main/res/raw/mpl_20_full.txt index bd14187ce..319c95b6e 100644 --- a/app/src/main/res/raw/mpl_20_full.txt +++ b/app/src/main/res/raw/mpl_20_full.txt @@ -13,12 +13,12 @@ means the combination of the Contributions of others (if any) used by a Contribu means Covered Software of a particular Contributor. 1.4. “Covered Software” -means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof. +means Source Code Form to which the initial Contributor has attached the toast in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof. 1.5. “Incompatible With Secondary Licenses” means -that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or +that the initial Contributor has attached the toast described in Exhibit B to the Covered Software; or that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License. @@ -77,7 +77,7 @@ for infringements caused by: (i) Your and any other third party’s modification under Patent Claims infringed by Covered Software in the absence of its Contributions. -This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4). +This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the toast requirements in Section 3.4). 2.4. Subsequent Licenses @@ -127,7 +127,7 @@ If it is impossible for You to comply with any of the terms of this License with 5. Termination -5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice. +5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received toast of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the toast. 5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate. @@ -165,13 +165,13 @@ If you create software not governed by this License, and you want to create a ne 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses -If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached. +If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the toast described in Exhibit B of this License must be attached. Exhibit A - Source Code Form License Notice This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. -If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. +If it is not possible or desirable to put the toast in a particular file, then You may include the toast in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a toast. You may add additional accurate notices of copyright ownership. diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 7f00b731e..6e1ce1ff6 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,4 +5,6 @@ #536DFE #99444444 #eef2f3f9 + #FD999A + #99CC99 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 4b9fc3ebc..b606c35b2 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -6,7 +6,7 @@ 6dp 2dp -4dp - 56dp + 0dp 0dp 56dp 0dp diff --git a/common/src/main/java/com/stardust/util/BackPressedHandler.java b/common/src/main/java/com/stardust/util/BackPressedHandler.java index a29ce8e62..d1776980e 100644 --- a/common/src/main/java/com/stardust/util/BackPressedHandler.java +++ b/common/src/main/java/com/stardust/util/BackPressedHandler.java @@ -4,8 +4,6 @@ import android.widget.Toast; -import java.util.ArrayList; -import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; /** @@ -50,15 +48,15 @@ class DoublePressExit implements BackPressedHandler { private final Activity mActivity; private long mLastPressedMillis; private long mDoublePressInterval = 1000; - private String mNotice; + private String mToast; public DoublePressExit(Activity activity, int noticeResId) { this(activity, activity.getString(noticeResId)); } - public DoublePressExit(Activity activity, String notice) { + public DoublePressExit(Activity activity, String toast) { mActivity = activity; - mNotice = notice; + mToast = toast; } public DoublePressExit doublePressInterval(long doublePressInterval) { @@ -72,7 +70,7 @@ public boolean onBackPressed(Activity activity) { mActivity.finish(); } else { mLastPressedMillis = System.currentTimeMillis(); - Toast.makeText(mActivity, mNotice, Toast.LENGTH_SHORT).show(); + Toast.makeText(mActivity, mToast, Toast.LENGTH_SHORT).show(); } return true; } From 5d6e66d5d559d19b68119c2aeb2b6be10d66413b Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Fri, 25 Aug 2017 13:10:52 +0800 Subject: [PATCH 06/46] add: new ui for drawer --- .../scriptdroid/ui/main/MainActivity.java | 38 +--- .../DrawerFragment.java} | 63 +----- .../ui/main/drawer/DrawerMenuGroup.java | 65 +++++++ .../ui/main/drawer/DrawerMenuItem.java | 73 +++++++ .../ui/settings/SettingsActivity.java | 10 +- .../main/res/drawable/android_eating_half.png | Bin 0 -> 46692 bytes .../main/res/drawable/drawer_menu_divider.xml | 9 + app/src/main/res/drawable/ic_ali_exit.png | Bin 0 -> 1407 bytes app/src/main/res/drawable/ic_ali_settings.png | Bin 0 -> 1867 bytes .../res/drawable/ic_check_for_updates.png | Bin 0 -> 1466 bytes app/src/main/res/drawable/ic_personalize.png | Bin 0 -> 2058 bytes app/src/main/res/drawable/ic_stable.png | Bin 0 -> 1609 bytes app/src/main/res/drawable/ic_volume.png | Bin 0 -> 401 bytes .../drawable/profile_avatar_placeholder.png | Bin 0 -> 1938 bytes app/src/main/res/drawable/profile_bg.png | Bin 0 -> 156983 bytes app/src/main/res/drawable/side_menu_bg.webp | Bin 3604 -> 0 bytes app/src/main/res/layout/activity_main.xml | 11 +- app/src/main/res/layout/drawer_menu.xml | 97 ++++++++++ app/src/main/res/layout/drawer_menu_item.xml | 35 ++++ .../{drawer.xml => fragment_drawer.xml} | 90 +++++---- .../main/res/layout/fragment_side_menu.xml | 181 ------------------ app/src/main/res/layout/nav_header.xml | 38 ++++ app/src/main/res/menu/menu_drawer.xml | 16 ++ app/src/main/res/values-en/strings.xml | 2 +- app/src/main/res/values/attrs.xml | 14 +- app/src/main/res/values/strings.xml | 5 +- app/src/main/res/xml/preferences.xml | 2 +- 27 files changed, 420 insertions(+), 329 deletions(-) rename app/src/main/java/com/stardust/scriptdroid/ui/main/{SideMenuFragment.java => drawer/DrawerFragment.java} (77%) create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuGroup.java create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuItem.java create mode 100644 app/src/main/res/drawable/android_eating_half.png create mode 100644 app/src/main/res/drawable/drawer_menu_divider.xml create mode 100644 app/src/main/res/drawable/ic_ali_exit.png create mode 100644 app/src/main/res/drawable/ic_ali_settings.png create mode 100644 app/src/main/res/drawable/ic_check_for_updates.png create mode 100644 app/src/main/res/drawable/ic_personalize.png create mode 100644 app/src/main/res/drawable/ic_stable.png create mode 100644 app/src/main/res/drawable/ic_volume.png create mode 100644 app/src/main/res/drawable/profile_avatar_placeholder.png create mode 100644 app/src/main/res/drawable/profile_bg.png delete mode 100644 app/src/main/res/drawable/side_menu_bg.webp create mode 100644 app/src/main/res/layout/drawer_menu.xml create mode 100644 app/src/main/res/layout/drawer_menu_item.xml rename app/src/main/res/layout/{drawer.xml => fragment_drawer.xml} (56%) delete mode 100644 app/src/main/res/layout/fragment_side_menu.xml create mode 100644 app/src/main/res/layout/nav_header.xml create mode 100644 app/src/main/res/menu/menu_drawer.xml 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 91b62cb3c..c5569e960 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 @@ -36,6 +36,7 @@ import com.stardust.scriptdroid.ui.common.ScriptOperations; import com.stardust.scriptdroid.ui.main.community.CommunityFragment; import com.stardust.scriptdroid.ui.main.doc.OnlineDocsFragment_; +import com.stardust.scriptdroid.ui.main.drawer.DrawerFragment; import com.stardust.scriptdroid.ui.main.script_list.MyScriptListFragment_; import com.stardust.scriptdroid.ui.main.task.TaskManagerFragment_; import com.stardust.util.DeveloperUtils; @@ -61,8 +62,6 @@ @EActivity(R.layout.activity_main) public class MainActivity extends BaseActivity implements OnActivityResultDelegate.DelegateHost { - public static final String MESSAGE_CLEAR_BACKGROUND_SETTINGS = "MESSAGE_CLEAR_BACKGROUND_SETTINGS"; - private static final String LOG_TAG = "MainActivity"; @ViewById(R.id.drawer_layout) @@ -76,7 +75,6 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega private FragmentPagerAdapterBuilder.StoredFragmentPagerAdapter mPagerAdapter; private OnActivityResultDelegate.Mediator mActivityResultMediator = new OnActivityResultDelegate.Mediator(); - private DrawableSaver mDrawerHeaderBackgroundSaver; private VersionGuard mVersionGuard; @@ -84,20 +82,14 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); checkPermissions(); - EventBus.getDefault().register(this); mVersionGuard = new VersionGuard(this); showAnnunciationIfNeeded(); - //Stop download service of ad sdk - // FIXME: 2017/8/1 Service not stopped! - stopService(new Intent(this, DownloadService.class)); } @AfterViews void setUpViews() { setUpToolbar(); setUpTabViewPager(); - setUpDrawerHeader(); - setUpFragment(); getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); registerBackPressHandlers(); } @@ -152,17 +144,6 @@ public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) } } - private void setUpFragment() { - SideMenuFragment.setFragment(this, R.id.fragment_slide_menu); - } - - @SuppressLint("SetTextI18n") - private void setUpDrawerHeader() { - TextView version = $(R.id.version); - version.setText("Version " + BuildConfig.VERSION_NAME); - mDrawerHeaderBackgroundSaver = new DrawableSaver.ImageSaver(this, "drawer_header_background", (ImageView) $(R.id.drawer_header_img)); - } - private void setUpToolbar() { Toolbar toolbar = $(R.id.toolbar); setSupportActionBar(toolbar); @@ -251,11 +232,6 @@ public void exitCompletely() { finish(); } - @Click(R.id.drawer_header_img) - public void selectHeaderImage() { - mDrawerHeaderBackgroundSaver.select(this, mActivityResultMediator); - } - @Override protected void onPause() { super.onPause(); @@ -268,13 +244,6 @@ protected void onResume() { mVersionGuard.checkDeprecateAndUpdate(); } - @Subscribe - public void onMessageEvent(MessageEvent event) { - if (event.message.equals(MESSAGE_CLEAR_BACKGROUND_SETTINGS)) { - mDrawerHeaderBackgroundSaver.reset(); - } - } - @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { mActivityResultMediator.onActivityResult(requestCode, resultCode, data); @@ -294,11 +263,6 @@ protected void onStart() { } } - @Override - protected void onDestroy() { - super.onDestroy(); - EventBus.getDefault().unregister(this); - } @NonNull @Override diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java similarity index 77% rename from app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java rename to app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java index 7608062cc..b85bf7a9a 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/SideMenuFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java @@ -1,22 +1,19 @@ -package com.stardust.scriptdroid.ui.main; +package com.stardust.scriptdroid.ui.main.drawer; -import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.design.widget.Snackbar; -import android.support.v4.app.FragmentActivity; import android.support.v7.widget.SwitchCompat; +import android.view.MenuInflater; +import android.view.MenuItem; import android.widget.CompoundButton; import android.widget.Toast; import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; -import com.qq.e.comm.DownloadService; 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.HoverMenuManger; import com.stardust.scriptdroid.external.floatingwindow.menu.HoverMenuService; import com.stardust.scriptdroid.ui.common.ProgressDialog; @@ -25,8 +22,6 @@ import com.stardust.scriptdroid.sublime.SublimePluginService; import com.stardust.scriptdroid.tool.AccessibilityServiceTool; import com.stardust.scriptdroid.tool.WifiTool; -import com.stardust.scriptdroid.ui.console.LogActivity_; -import com.stardust.scriptdroid.ui.help.HelpCatalogueActivity; import com.stardust.util.IntentUtil; import com.stardust.util.UnderuseExecutors; @@ -44,19 +39,11 @@ /** * Created by Stardust on 2017/1/30. */ -@EFragment(R.layout.fragment_side_menu) -public class SideMenuFragment extends android.support.v4.app.Fragment { +@EFragment(R.layout.fragment_drawer) +public class DrawerFragment extends android.support.v4.app.Fragment { - public static void setFragment(FragmentActivity activity, int viewId) { - SideMenuFragment fragment = new SideMenuFragment_(); - activity.getSupportFragmentManager().beginTransaction().replace(viewId, fragment).commit(); - } - - @ViewById(R.id.sw_accessibility_service) SwitchCompat mAccessibilityServiceSwitch; - @ViewById(R.id.sw_floating_window) SwitchCompat mFloatingWindowSwitch; - @ViewById(R.id.sw_debug) SwitchCompat mDebugSwitch; private Executor mExecutor = UnderuseExecutors.getExecutor(); @@ -69,7 +56,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { @Override public void onStart() { super.onStart(); - syncSwitchState(); + //syncSwitchState(); } @@ -100,23 +87,6 @@ public void run() { mFloatingWindowSwitch.setChecked(HoverMenuManger.isHoverMenuShowing()); } - - @Click(R.id.console) - void startConsoleActivity() { - startActivity(new Intent(getActivity(), LogActivity_.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); - } - - @Click(R.id.syntax_and_api) - void startSyntaxHelpActivity() { - HelpCatalogueActivity.showMainCatalogue(getActivity()); - } - - @Click(R.id.auto_operate_service) - void clickAutoOperateServiceSwitch() { - mAccessibilityServiceSwitch.toggle(); - } - - @CheckedChange(R.id.sw_accessibility_service) void setAutoOperateServiceEnable(CompoundButton button, boolean enable) { boolean isAccessibilityServiceEnabled = AccessibilityServiceTool.isAccessibilityServiceEnabled(App.getApp()); if (enable && !isAccessibilityServiceEnabled) { @@ -157,7 +127,6 @@ public void run() { }); } - @CheckedChange(R.id.sw_floating_window) void setFloatingWindowEnable(CompoundButton button, boolean enable) { if (enable && !HoverMenuManger.isHoverMenuShowing()) { HoverMenuManger.showHoverMenu(); @@ -169,17 +138,6 @@ void setFloatingWindowEnable(CompoundButton button, boolean enable) { } } - @Click(R.id.floating_window) - void toggleAssistServiceSwitch() { - mFloatingWindowSwitch.toggle(); - } - - @Click(R.id.debug) - void toggleDebugSwitch() { - mDebugSwitch.toggle(); - } - - @CheckedChange(R.id.sw_debug) void setDebugEnabled(CompoundButton button, boolean enabled) { if (enabled && !SublimePluginService.isConnected()) { new MaterialDialog.Builder(getActivity()) @@ -208,15 +166,6 @@ private CharSequence getServerAddress() { return Pref.getServerAddressOrDefault(WifiTool.getWifiAddress(getActivity())); } - @Click(R.id.stop_all_running_scripts) - void stopAllRunningScripts() { - int n = AutoJs.getInstance().getScriptEngineService().stopAll(); - if (n > 0) - Snackbar.make(getView(), String.format(getString(R.string.text_already_stop_n_scripts), n), Snackbar.LENGTH_SHORT).show(); - else - Snackbar.make(getView(), R.string.text_no_running_script, Snackbar.LENGTH_SHORT).show(); - } - @Override public void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuGroup.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuGroup.java new file mode 100644 index 000000000..664bd4799 --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuGroup.java @@ -0,0 +1,65 @@ +package com.stardust.scriptdroid.ui.main.drawer; + +import android.content.Context; +import android.content.res.TypedArray; +import android.os.Build; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.stardust.scriptdroid.R; + +import static android.util.TypedValue.COMPLEX_UNIT_DIP; + +/** + * Created by Stardust on 2017/8/25. + */ + +public class DrawerMenuGroup extends LinearLayout { + + private TextView mTitle; + + public DrawerMenuGroup(Context context) { + super(context); + init(null); + } + + public DrawerMenuGroup(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(attrs); + } + + public DrawerMenuGroup(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(attrs); + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public DrawerMenuGroup(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(attrs); + } + + private void init(AttributeSet attrs) { + setOrientation(VERTICAL); + addTitleView(); + if (attrs == null) { + return; + } + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.DrawerMenuItem); + mTitle.setText(a.getString(R.styleable.DrawerMenuItem_title)); + a.recycle(); + } + + private void addTitleView() { + mTitle = new TextView(getContext()); + int padding = (int) TypedValue.applyDimension(COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics()); + mTitle.setPadding(padding, padding, padding, padding); + mTitle.setTextColor(0xff999999); + mTitle.setTextSize(12); + addView(mTitle, 0); + } +} diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuItem.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuItem.java new file mode 100644 index 000000000..05b3cb365 --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuItem.java @@ -0,0 +1,73 @@ +package com.stardust.scriptdroid.ui.main.drawer; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; +import android.support.v7.widget.SwitchCompat; +import android.util.AttributeSet; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.stardust.scriptdroid.R; + +/** + * Created by Stardust on 2017/8/25. + */ +public class DrawerMenuItem extends FrameLayout { + + private SwitchCompat mSwitchCompat; + + public DrawerMenuItem(Context context) { + super(context); + init(null); + } + + public DrawerMenuItem(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(attrs); + } + + public DrawerMenuItem(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(attrs); + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public DrawerMenuItem(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(attrs); + } + + private void init(AttributeSet attrs) { + inflate(getContext(), R.layout.drawer_menu_item, this); + ImageView icon = (ImageView) findViewById(R.id.icon); + TextView title = (TextView) findViewById(R.id.title); + mSwitchCompat = (SwitchCompat) findViewById(R.id.sw); + if (attrs == null) + return; + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.DrawerMenuItem); + icon.setImageResource(a.getResourceId(R.styleable.DrawerMenuItem_icon, 0)); + title.setText(a.getString(R.styleable.DrawerMenuItem_title)); + if (a.getBoolean(R.styleable.DrawerMenuItem_with_switch, false)) { + mSwitchCompat.setVisibility(VISIBLE); + setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + mSwitchCompat.toggle(); + } + }); + } + a.recycle(); + } + + public SwitchCompat getSwitchCompat() { + return mSwitchCompat; + } + +} diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/settings/SettingsActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/settings/SettingsActivity.java index 69498280a..1222b4485 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/settings/SettingsActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/settings/SettingsActivity.java @@ -5,16 +5,12 @@ import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceScreen; -import android.support.annotation.Nullable; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.Toast; -import com.stardust.scriptdroid.Pref; -import com.stardust.scriptdroid.tool.UpdateChecker; import com.stardust.scriptdroid.ui.BaseActivity; import com.stardust.scriptdroid.ui.error.IssueReporterActivity; -import com.stardust.scriptdroid.ui.main.MainActivity; import com.stardust.scriptdroid.ui.splash.SplashActivity; import com.stardust.scriptdroid.ui.splash.SplashActivity_; import com.stardust.scriptdroid.ui.update.UpdateCheckDialog; @@ -23,11 +19,9 @@ import com.stardust.scriptdroid.R; import com.stardust.theme.app.ColorSelectActivity; import com.stardust.theme.util.ListBuilder; -import com.stardust.util.MessageEvent; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EActivity; -import org.greenrobot.eventbus.EventBus; import java.util.List; import java.util.Map; @@ -112,7 +106,7 @@ public void run() { .entry(getString(R.string.text_reset_background), new Runnable() { @Override public void run() { - EventBus.getDefault().post(new MessageEvent(MainActivity.MESSAGE_CLEAR_BACKGROUND_SETTINGS)); + // EventBus.getDefault().post(new MessageEvent(MainActivity.MESSAGE_CLEAR_BACKGROUND_SETTINGS)); Toast.makeText(getActivity(), R.string.text_already_reset, Toast.LENGTH_SHORT).show(); } }) @@ -125,7 +119,7 @@ public void run() { .start(); } }) - .entry(getString(R.string.text_check_update), new Runnable() { + .entry(getString(R.string.text_check_for_updates), new Runnable() { @Override public void run() { new UpdateCheckDialog(getActivity()).show(); diff --git a/app/src/main/res/drawable/android_eating_half.png b/app/src/main/res/drawable/android_eating_half.png new file mode 100644 index 0000000000000000000000000000000000000000..26ec753fe68e0cfd8416449f2315486d8e3b8224 GIT binary patch literal 46692 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/drawer_menu_divider.xml b/app/src/main/res/drawable/drawer_menu_divider.xml new file mode 100644 index 000000000..674910d9a --- /dev/null +++ b/app/src/main/res/drawable/drawer_menu_divider.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_ali_exit.png b/app/src/main/res/drawable/ic_ali_exit.png new file mode 100644 index 0000000000000000000000000000000000000000..0c61eaf3ec5b01cf67bfb357cebcaa683319e9a6 GIT binary patch literal 1407 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 UUvow%X8-^I07*qoM6N<$f;*eRL;wH) literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_personalize.png b/app/src/main/res/drawable/ic_personalize.png new file mode 100644 index 0000000000000000000000000000000000000000..d54890f7187f1ac5216e01728b9fd4463737ad8a GIT binary patch literal 2058 zcmV+l2=(`gP)U$y<~YL^^@-34$LID1%^i0!b$@K7ru`!Y42~ffocWNFIVtU~&SZ6IgkJ zn4M0|E( z+#|r;|DWbSumIP(olKm?K1sxVEdJXYyKEsl2fzv^b^3l?4ZQW8FbJ0R9sz9=|(m{tMhfkCW| zh^^=t>P$w%Zd#C215kT&dO?@S#`Bv63akT&=Mw$|b4Gai=V!+| zW+q=M0BZHtM?kocg-#z(+ z{k_&`b^!3bG@r3c6OA+ipxS7CLI8VMD?Y--Bj|@Y8mT0SH!VXZU!2wi(0MSwLXO&i=T$apLw>0uW)u zfO%g6^i|~$aRQQv;WrFe)<-2k1dGXdaH7+quqGsd7Yl$Fz!d3Azz7iyrsLt(1}N`o z9Rr@Hr(UaCZ++3n4*1%{!h0Zm=boo;6Nq3w9S>fGX^#h>(fVuan(rROvHc`7o zL%an*Ix7Tslkq@GS(zX$shuZH*Y;z3Yi44(#rggkm_LJ2T6pe?9@HBx_7Uub! z#DvRcQC;{hMx7`*KnW_WO;&(9%FD{EYF@40S}2Mnn<;8RhHVInXy}ZXDq7=#6Cqjd`^qD2@=I&7((tgAr0k zmHP|!ix@#s155zOOZa2Ymy9UUwWI+M%9cDfvHRFx$~!W4$&H|3Q1*Y1?}I7RH6u>c z8c&R`LDNm1^0<)G=Xt%7BLt8w<@A)94ro(lyo_Dp=fGqVjjDX791JOn2hW}PaKcA) z`HjQj=L$lk$`y)ugN%@rB+xk%&jpN4dF-#C+!p7tMp9zBK;pSDze%rul3Mm+lD+@S zq-d?)JSW7Sl)q49y2Z5k)*(t$fP6|C;dhbIRiwh4kmgqvMvUt4Pl5TMEf>M-Bb57( zd9a3PClzJn(wI2NiG<~(mRkbw8?O}~&kLG#uc?cp0QajRo*XjF4O{I@ zAQN4KYjsRZY0>hy*j16TJf4YQVN$po&15}(wE@tK|67#`{j>tpHb@*I)4NMnh#ex- zER2hDr1JHFG%sbNeJvfGyAhz?q4u z2h5g5JWG4!m;!UiOtldJaUi7a%Qt17kCO|r`%Tmu1K<-DYM%C6Uwf;P)qO~9NK>s! z18m&bQ~>Y=cySV$)fapD{O4@co{Wdrc?lBJSKP~+jt5GAKkr_N*I?4({+-SGk!Nk* zBS-4!dUcZ47Tw`PBxh1PMJr14+{5$+Lr-~vG33wPX)-@PriIODr6a)b8?k9Gv&Hujwu_X5G< zPiNyEIHsWYaJ>e(j)00I|IHBN?}{qY`yB%a4%uz?AV)yQ6W5Fvu3Pc@exZyAM+9&r o14Fk2Fvqpk%NyS6=n4P+AF>1lD+n~@%K!iX07*qoM6N<$f-2zKhX4Qo literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_stable.png b/app/src/main/res/drawable/ic_stable.png new file mode 100644 index 0000000000000000000000000000000000000000..3d127c127ba7e6b127db71c2337ff5affe35c373 GIT binary patch literal 1609 zcmV-P2DbT$P)zGw0>`|IRb# ztf~q*Da=L{?zdRh-f(?zNZQ0 zobzn`UM7>dx=<+m6()>OGGN7u6<1cP)sp~_w2l7hN~JQPSSCB3grp>oozJIOnT$QMp_$a_ZEn?*L%7mMu$! z5FfS@LQ67$F?J0AoB)6;Y{8dfvDk#(-rj$l1Z6UrJEGC(e(l-Ga=ARUR4NU$3PMW& z5K$i@rnS*rDTGjKeZz|}rbhb_t-vds^V}r^Ae+tJDy2NA1$@NK24~r_WjDlPvBQWs z-d6u?rBa#N*Vp$;D^8_thuIX>W3glJ&dvE0brf>@FULo;)@sY{ar$chuj9AN~IFXWU}ABdZ@a!T5WbKmc_s_AeBm8o=hgy@^-yVY^74EO!k_- zM6?(Yw`PuK0}&5tXNacSbm}t@07SF{5f|Azuq?|kO|vkP z(BYmF(H2A;@(Wa1DdihN2sKd#ay1RWFpRq+k;p!6;yWmWnAL2AYC|QZROf{AmPO05 zW(DOUH3eXB3#;7SA)71c8JjWo6ac)f0scY=F~3>Bs(w=d7-K5|;9V`akA)EWZq9eC zjUXf91NnS@x9^4rEBXeIPN%yPiNtZc%>@8w2L=XiEEbEuHyfC}em0w(FQxokYx79C zT%OhJIl(so#+Vv;l>zqaRnGa#L5i=pMMS$1@qVrCwVZSP#ObMfUjUqzC;<4aTrN*8 zl}i75ioj)I)n_a0GhYB0V|xK$uJ-OP6+(RAQjf1Budm^ktv9 z29QptuS+Bn>a=IKxy}H<#IQX4I<+9}GuHr!Xd5CvrVZVTob&TCqN$=9X(l`>89lb{6oX(tH#Y(xNzF*U&zwE*{V&hPOPbdYs| zu+N4Cplq(LuC5c>XREgV)L@6$tbH~tfCf7+A%tK-j%2fKHDjMO1TbiGsbw!-4>0Uc z*KWZyW1lqyKt#I`ae)@Zvz+s{+y)kAxd!&xMj?bUR2p860202qd`FcOLE3@Dg(G;{8Rs%_%VNGaEi8#ivl=FOYW z+Jov?06jfDcp~R8PJKN>P6F726&;>iDmx-!FA?e3V59c00000NkvXX Hu0mjfA^P?= literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_volume.png b/app/src/main/res/drawable/ic_volume.png new file mode 100644 index 0000000000000000000000000000000000000000..a58a8e47d50f2a8947c9c1d9e6b5350215788cea GIT binary patch literal 401 zcmV;C0dD?@P)Q=za<&p=$ zDuMfHp*^wI3IK@6x$paOORVfqKm}5x0;y4f)TlseR3J6k3nclNbIxtPP+PdG6KDaz zdq2e~kat2%|O$-afM7l`&2GR9oI_wDi=El;e#UDsUzG_m3@ vWZyz6kebaiz|8L=@<~KduFn-kQT{jIeZo)G4r&3q00000NkvXXu0mjfkdUWu literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/profile_avatar_placeholder.png b/app/src/main/res/drawable/profile_avatar_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..96e65f3344b65ebc636ba5aecd0cf2a61506a952 GIT binary patch literal 1938 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
1_irUj1@O2U>pVy=A-- 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

yosLp; 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 z*){pte_+-?W6zz0000000000 a4n_a~EFgdY1LHjcUfuuz000000000yK>v*Z diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 8d2f4b097..f0c280e43 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -150,13 +150,12 @@ - + android:fitsSystemWindows="false"/> + diff --git a/app/src/main/res/layout/drawer_menu.xml b/app/src/main/res/layout/drawer_menu.xml new file mode 100644 index 000000000..57ca4b316 --- /dev/null +++ b/app/src/main/res/layout/drawer_menu.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/drawer_menu_item.xml b/app/src/main/res/layout/drawer_menu_item.xml new file mode 100644 index 000000000..f00d4ac08 --- /dev/null +++ b/app/src/main/res/layout/drawer_menu_item.xml @@ -0,0 +1,35 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/drawer.xml b/app/src/main/res/layout/fragment_drawer.xml similarity index 56% rename from app/src/main/res/layout/drawer.xml rename to app/src/main/res/layout/fragment_drawer.xml index 1a7ff2450..5fc5a2a5e 100644 --- a/app/src/main/res/layout/drawer.xml +++ b/app/src/main/res/layout/fragment_drawer.xml @@ -1,5 +1,6 @@ - - + + + android:src="@drawable/profile_avatar_placeholder" + app:riv_border_color="#77f2f3f5" + app:riv_border_width="0.5dp" + app:riv_corner_radius="40dp"/> - - + @@ -54,15 +61,20 @@ android:layout_height="match_parent" android:orientation="vertical"> - + + @@ -75,15 +87,18 @@ android:gravity="center" android:orientation="horizontal"> - + @@ -98,15 +113,18 @@ android:gravity="center" android:orientation="horizontal"> - + diff --git a/app/src/main/res/layout/fragment_side_menu.xml b/app/src/main/res/layout/fragment_side_menu.xml deleted file mode 100644 index 106c7edb0..000000000 --- a/app/src/main/res/layout/fragment_side_menu.xml +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/nav_header.xml b/app/src/main/res/layout/nav_header.xml new file mode 100644 index 000000000..7cebf6c50 --- /dev/null +++ b/app/src/main/res/layout/nav_header.xml @@ -0,0 +1,38 @@ + + + + + + + + + + diff --git a/app/src/main/res/menu/menu_drawer.xml b/app/src/main/res/menu/menu_drawer.xml new file mode 100644 index 000000000..211e070fc --- /dev/null +++ b/app/src/main/res/menu/menu_drawer.xml @@ -0,0 +1,16 @@ + +

+ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 3b0dd3b8e..a0c5fc23e 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -150,7 +150,7 @@ Processing Pre-execute script - Check for updates + Check for updates New Directory 已重置 布局分析中,请稍后点击 diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 84644aa06..1899cd1fa 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -1,9 +1,12 @@ + + + - + @@ -12,6 +15,15 @@ + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ea0e78735..51160c6b5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -152,7 +152,7 @@ 正在检查更新 新版本 检查更新失败Orz - 检查更新 + 检查更新 已经是最新版本 版本过低 当然版本为公测版,显现和潜在的问题很多,不再适合继续使用, @@ -233,6 +233,9 @@ 脚本 社区 管理 + 未登录 + 音量下键控制 + 其他 diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 619146a29..0c0bb17e5 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -85,7 +85,7 @@ - + From 56920cd7073960a04f69a90ef315c384d88c0d33 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Fri, 25 Aug 2017 15:53:31 +0800 Subject: [PATCH 07/46] add: new ui for file creating --- .../app/FragmentPagerAdapterBuilder.java | 4 +- .../scriptdroid/ui/main/MainActivity.java | 14 +- .../ui/main/NewFileDialogBuilder.java | 70 +++++++ .../ui/main/ViewPagerFragment.java | 51 ++++- .../ui/main/community/CommunityFragment.java | 19 +- .../ui/main/doc/OnlineDocsFragment.java | 13 +- .../ui/main/drawer/DrawerFragment.java | 11 + .../sample_list/SampleScriptListFragment.java | 79 -------- .../SampleScriptListRecyclerView.java | 190 ------------------ .../script_list/MyScriptListFragment.java | 20 +- .../ui/main/task/TaskManagerFragment.java | 49 +---- .../java/com/stardust/widget/EWebView.java | 3 +- app/src/main/res/layout/activity_main.xml | 5 +- app/src/main/res/layout/fragment_drawer.xml | 4 +- app/src/main/res/layout/new_file_dialog.xml | 118 +++++++++++ app/src/main/res/values/colors.xml | 4 +- app/src/main/res/values/strings.xml | 5 + 17 files changed, 309 insertions(+), 350 deletions(-) create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/main/NewFileDialogBuilder.java delete mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/main/sample_list/SampleScriptListFragment.java delete mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/main/sample_list/SampleScriptListRecyclerView.java create mode 100644 app/src/main/res/layout/new_file_dialog.xml diff --git a/app/src/main/java/com/stardust/app/FragmentPagerAdapterBuilder.java b/app/src/main/java/com/stardust/app/FragmentPagerAdapterBuilder.java index a11995909..24c87d2b3 100644 --- a/app/src/main/java/com/stardust/app/FragmentPagerAdapterBuilder.java +++ b/app/src/main/java/com/stardust/app/FragmentPagerAdapterBuilder.java @@ -17,7 +17,7 @@ public class FragmentPagerAdapterBuilder { public interface OnFragmentInstantiateListener { - void OnInstantiate(Fragment fragment); + void OnInstantiate(int pos, Fragment fragment); } private List mFragments = new ArrayList<>(); @@ -71,7 +71,7 @@ public Object instantiateItem(ViewGroup container, int position) { Fragment fragment = (Fragment) super.instantiateItem(container, position); mStoredFragments.put(position, fragment); if(mOnFragmentInstantiateListener != null){ - mOnFragmentInstantiateListener.OnInstantiate(fragment); + mOnFragmentInstantiateListener.OnInstantiate(position, fragment); } return fragment; } 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 c5569e960..9e9b1e865 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 @@ -39,6 +39,8 @@ import com.stardust.scriptdroid.ui.main.drawer.DrawerFragment; import com.stardust.scriptdroid.ui.main.script_list.MyScriptListFragment_; import com.stardust.scriptdroid.ui.main.task.TaskManagerFragment_; +import com.stardust.theme.ThemeColorManager; +import com.stardust.theme.ThemeColorManagerCompat; import com.stardust.util.DeveloperUtils; import com.stardust.scriptdroid.tool.AccessibilityServiceTool; import com.stardust.scriptdroid.tool.DrawableSaver; @@ -92,6 +94,7 @@ void setUpViews() { setUpTabViewPager(); getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); registerBackPressHandlers(); + ThemeColorManager.addViewBackground(findViewById(R.id.app_bar)); } private void showAnnunciationIfNeeded() { @@ -164,13 +167,22 @@ private void setUpTabViewPager() { .build(); mViewPager.setAdapter(mPagerAdapter); tabLayout.setupWithViewPager(mViewPager); + mPagerAdapter.setOnFragmentInstantiateListener(new FragmentPagerAdapterBuilder.OnFragmentInstantiateListener() { + @Override + public void OnInstantiate(int pos, Fragment fragment) { + ((ViewPagerFragment) fragment).setFab(mFab); + if (pos == mViewPager.getCurrentItem()) { + ((ViewPagerFragment) fragment).onPageSelected(); + } + } + }); mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { Fragment fragment = mPagerAdapter.getStoredFragment(position); if (fragment == null) return; - ((ViewPagerFragment) fragment).setUpWithFab(mViewPager, mFab); + ((ViewPagerFragment) fragment).onPageSelected(); } }); } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/NewFileDialogBuilder.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/NewFileDialogBuilder.java new file mode 100644 index 000000000..c64a932b3 --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/NewFileDialogBuilder.java @@ -0,0 +1,70 @@ +package com.stardust.scriptdroid.ui.main; + +import android.app.AlertDialog; +import android.content.Context; +import android.support.annotation.IdRes; +import android.view.View; +import android.widget.RadioButton; +import android.widget.RadioGroup; + +import com.afollestad.materialdialogs.MaterialDialog; +import com.github.aakira.expandablelayout.ExpandableRelativeLayout; +import com.stardust.scriptdroid.R; +import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnCheckedChanged; +import butterknife.OnClick; + +/** + * Created by Stardust on 2017/8/25. + */ + +public class NewFileDialogBuilder extends ThemeColorMaterialDialogBuilder { + + @BindView(R.id.layout_new_file) + ExpandableRelativeLayout mLayoutNewFile; + + @BindView(R.id.layout_import) + ExpandableRelativeLayout mLayoutImport; + + ExpandableRelativeLayout mExpandedLayout; + + + public NewFileDialogBuilder(Context context) { + super(context); + View view = View.inflate(context, R.layout.new_file_dialog, null); + customView(view, true); + title(R.string.text_new); + positiveText(R.string.ok); + negativeText(R.string.cancel); + ButterKnife.bind(this, view); + mExpandedLayout = mLayoutNewFile; + } + + @OnClick(R.id.option_new_file) + void expandLayoutNewFile() { + if (mExpandedLayout != mLayoutNewFile) { + if(mExpandedLayout != null){ + mExpandedLayout.collapse(); + } + mLayoutNewFile.expand(); + mExpandedLayout = mLayoutNewFile; + } + } + + + @OnClick(R.id.option_import) + void expandLayoutImport() { + if (mExpandedLayout != mLayoutImport) { + if(mExpandedLayout != null){ + mExpandedLayout.collapse(); + } + mLayoutImport.expand(); + mExpandedLayout = mLayoutImport; + } + } + +} + diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/ViewPagerFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/ViewPagerFragment.java index 73fd65163..b070463b8 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/ViewPagerFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/ViewPagerFragment.java @@ -1,14 +1,61 @@ package com.stardust.scriptdroid.ui.main; +import android.graphics.Paint; +import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; +import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; +import android.support.v4.view.animation.FastOutSlowInInterpolator; +import android.view.View; /** * Created by Stardust on 2017/8/22. */ -public interface ViewPagerFragment { +public abstract class ViewPagerFragment extends Fragment { + + protected static final int ROTATION_GONE = -1; + + private int mRotation; + private FloatingActionButton mFab; + private View.OnClickListener mOnFabClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + onFabClick((FloatingActionButton) v); + } + }; + + public ViewPagerFragment(int rotation) { + mRotation = rotation; + } + + public void setFab(FloatingActionButton fab) { + mFab = fab; + } + + protected abstract void onFabClick(FloatingActionButton fab); + + public void onPageSelected() { + if (mRotation == ROTATION_GONE) { + if (mFab.getVisibility() == View.VISIBLE) { + mFab.hide(); + } + mFab.setOnClickListener(null); + return; + } + mFab.setOnClickListener(mOnFabClickListener); + if (mFab.getVisibility() != View.VISIBLE) { + mFab.setRotation(mRotation); + mFab.show(); + } else if (Math.abs(mFab.getRotation() - mRotation) > 0.1f) { + mFab.animate() + .rotation(mRotation) + .setDuration(300) + .setInterpolator(new FastOutSlowInInterpolator()) + .start(); + } + } - void setUpWithFab(ViewPager pager, FloatingActionButton fab); } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityFragment.java index 5853fdebb..5af6c2fb7 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityFragment.java @@ -13,17 +13,14 @@ * Created by Stardust on 2017/8/22. */ -public class CommunityFragment extends Fragment implements ViewPagerFragment { +public class CommunityFragment extends ViewPagerFragment { + + public CommunityFragment() { + super(0); + } + @Override - public void setUpWithFab(ViewPager pager, FloatingActionButton fab) { - if (fab.getVisibility() != View.VISIBLE) { - fab.show(); - return; - } - fab.animate() - .rotation(0) - .setDuration(300) - .setInterpolator(new FastOutSlowInInterpolator()) - .start(); + protected void onFabClick(FloatingActionButton fab) { + } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/doc/OnlineDocsFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/doc/OnlineDocsFragment.java index 6af618f24..323941617 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/doc/OnlineDocsFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/doc/OnlineDocsFragment.java @@ -21,12 +21,17 @@ * Created by Stardust on 2017/8/22. */ @EFragment(R.layout.fragment_online_docs) -public class OnlineDocsFragment extends Fragment implements BackPressedHandler, ViewPagerFragment { +public class OnlineDocsFragment extends ViewPagerFragment implements BackPressedHandler { @ViewById(R.id.eweb_view) EWebView mEWebView; WebView mWebView; + + public OnlineDocsFragment() { + super(ROTATION_GONE); + } + @Override public void onAttach(Context context) { super.onAttach(context); @@ -59,9 +64,7 @@ public boolean onBackPressed(Activity activity) { } @Override - public void setUpWithFab(ViewPager pager, FloatingActionButton fab) { - if (fab.getVisibility() == View.VISIBLE) { - fab.hide(); - } + protected void onFabClick(FloatingActionButton fab) { + } } 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 b85bf7a9a..899dcafe2 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 @@ -6,6 +6,7 @@ import android.support.v7.widget.SwitchCompat; import android.view.MenuInflater; import android.view.MenuItem; +import android.view.View; import android.widget.CompoundButton; import android.widget.Toast; @@ -17,6 +18,7 @@ import com.stardust.scriptdroid.external.floatingwindow.HoverMenuManger; import com.stardust.scriptdroid.external.floatingwindow.menu.HoverMenuService; import com.stardust.scriptdroid.ui.common.ProgressDialog; +import com.stardust.theme.ThemeColorManager; import com.stardust.view.accessibility.AccessibilityService; import com.stardust.scriptdroid.sublime.SublimePluginClient; import com.stardust.scriptdroid.sublime.SublimePluginService; @@ -25,6 +27,7 @@ import com.stardust.util.IntentUtil; import com.stardust.util.UnderuseExecutors; +import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.CheckedChange; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EFragment; @@ -45,8 +48,11 @@ public class DrawerFragment extends android.support.v4.app.Fragment { SwitchCompat mAccessibilityServiceSwitch; SwitchCompat mFloatingWindowSwitch; SwitchCompat mDebugSwitch; + @ViewById(R.id.header) + View mHeaderView; private Executor mExecutor = UnderuseExecutors.getExecutor(); + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -59,6 +65,11 @@ public void onStart() { //syncSwitchState(); } + @AfterViews + void setUpViews(){ + ThemeColorManager.addViewBackground(mHeaderView); + } + private void syncSwitchState() { mAccessibilityServiceSwitch.postDelayed(new Runnable() { diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/sample_list/SampleScriptListFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/sample_list/SampleScriptListFragment.java deleted file mode 100644 index aa1a07ec9..000000000 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/sample_list/SampleScriptListFragment.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.stardust.scriptdroid.ui.main.sample_list; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.stardust.app.Fragment; -import com.stardust.scriptdroid.R; -import com.stardust.scriptdroid.script.Scripts; -import com.stardust.scriptdroid.script.sample.Sample; -import com.stardust.scriptdroid.script.sample.SampleFileManager; -import com.stardust.scriptdroid.ui.common.ScriptOperations; -import com.stardust.scriptdroid.ui.edit.ViewSampleActivity; -import com.stardust.scriptdroid.ui.main.MainActivity; - -/** - * Created by Stardust on 2017/3/13. - */ - -public class SampleScriptListFragment extends Fragment { - - @Nullable - @Override - public View createView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_sample_script_list, container, false); - } - - - @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - SampleScriptListRecyclerView sampleScriptListRecyclerView = $(R.id.script_list); - sampleScriptListRecyclerView.setSamples(SampleFileManager.getInstance().getSamplesFromAssets(getContext().getAssets(), "sample")); - sampleScriptListRecyclerView.setOnItemLongClickListener(new SampleScriptListRecyclerView.OnItemLongClickListener() { - @Override - public void onItemLongClick(Sample sample) { - showMenuDialog(sample); - } - }); - sampleScriptListRecyclerView.setOnItemClickListener(new SampleScriptListRecyclerView.OnItemClickListener() { - @Override - public void onItemClick(Sample sample) { - viewSample(sample); - } - }); - } - - private void showMenuDialog(final Sample sample) { - new MaterialDialog.Builder(getActivity()) - .title(sample.name) - .items(getString(R.string.text_run), getString(R.string.text_copy_to_my_scripts)) - .itemsCallback(new MaterialDialog.ListCallback() { - @Override - public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) { - if (position == 0) { - Scripts.run(getActivity(), sample); - } else { - copySampleToMyScripts(sample); - } - } - - }) - .show(); - } - - private void copySampleToMyScripts(Sample sample) { - new ScriptOperations(getActivity(), getView()) - .importSample(sample) - .subscribe(); - } - - private void viewSample(Sample sample) { - ViewSampleActivity.view(getContext(), sample); - } - -} diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/sample_list/SampleScriptListRecyclerView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/sample_list/SampleScriptListRecyclerView.java deleted file mode 100644 index fcb45e43c..000000000 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/sample_list/SampleScriptListRecyclerView.java +++ /dev/null @@ -1,190 +0,0 @@ -package com.stardust.scriptdroid.ui.main.sample_list; - -import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.widget.DividerItemDecoration; -import android.support.v7.widget.RecyclerView; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; -import android.workground.WrapContentLinearLayoutManager; - -import com.bignerdranch.expandablerecyclerview.ChildViewHolder; -import com.bignerdranch.expandablerecyclerview.ExpandableRecyclerAdapter; -import com.bignerdranch.expandablerecyclerview.ParentViewHolder; -import com.bignerdranch.expandablerecyclerview.model.Parent; -import com.stardust.scriptdroid.R; -import com.stardust.scriptdroid.script.sample.Sample; -import com.stardust.widget.LevelBeamView; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by Stardust on 2017/3/13. - */ - -public class SampleScriptListRecyclerView extends RecyclerView { - - public interface OnItemLongClickListener { - void onItemLongClick(Sample sample); - } - - public interface OnItemClickListener { - void onItemClick(Sample sample); - } - - private OnClickListener mOnItemClickListenerProxy = new OnClickListener() { - @Override - public void onClick(View v) { - if (mOnItemClickListener != null) { - SampleViewHolder viewHolder = (SampleViewHolder) getChildViewHolder(v); - mOnItemClickListener.onItemClick(viewHolder.getChild()); - } - } - }; - private OnLongClickListener mOnLongClickListenerProxy = new OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - if (mOnItemLongClickListener != null) { - SampleViewHolder viewHolder = (SampleViewHolder) getChildViewHolder(v); - mOnItemLongClickListener.onItemLongClick(viewHolder.getChild()); - return true; - } - return false; - } - }; - private OnItemLongClickListener mOnItemLongClickListener; - private OnItemClickListener mOnItemClickListener; - - - private Adapter mAdapter; - private List mSampleGroups = new ArrayList<>(); - - public SampleScriptListRecyclerView(Context context) { - super(context); - init(); - } - - public SampleScriptListRecyclerView(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - public SampleScriptListRecyclerView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - init(); - } - - public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) { - mOnItemLongClickListener = onItemLongClickListener; - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - mOnItemClickListener = onItemClickListener; - } - - public void setSamples(List samples) { - mSampleGroups.clear(); - for (com.stardust.scriptdroid.script.sample.SampleGroup sampleGroup : samples) { - mSampleGroups.add(new SampleGroup(sampleGroup)); - } - mAdapter = new Adapter(mSampleGroups); - setAdapter(mAdapter); - } - - private void init() { - setLayoutManager(new WrapContentLinearLayoutManager(getContext())); - addItemDecoration(new DividerItemDecoration(getContext(), VERTICAL)); - } - - private class SampleGroup implements Parent { - - private com.stardust.scriptdroid.script.sample.SampleGroup mSampleGroup; - - SampleGroup(com.stardust.scriptdroid.script.sample.SampleGroup sampleGroup) { - mSampleGroup = sampleGroup; - } - - String getGroupName() { - return mSampleGroup.name; - } - - @Override - public List getChildList() { - return mSampleGroup.sampleList; - } - - @Override - public boolean isInitiallyExpanded() { - return false; - } - } - - private class SampleViewHolder extends ChildViewHolder { - - TextView name; - - SampleViewHolder(@NonNull View itemView) { - super(itemView); - name = (TextView) itemView.findViewById(R.id.name); - ((LevelBeamView) itemView.findViewById(R.id.level)).setLevel(2); - itemView.setOnClickListener(mOnItemClickListenerProxy); - itemView.setOnLongClickListener(mOnLongClickListenerProxy); - } - - void bind(Sample sample) { - name.setText(sample.name); - } - - } - - private class SampleGroupViewHolder extends ParentViewHolder { - - TextView name; - - SampleGroupViewHolder(@NonNull View itemView) { - super(itemView); - name = (TextView) itemView.findViewById(R.id.name); - ((LevelBeamView) itemView.findViewById(R.id.level)).setLevel(0); - } - - void bind(SampleGroup group) { - name.setText(group.getGroupName()); - } - - } - - private class Adapter extends ExpandableRecyclerAdapter { - - public Adapter(@NonNull List parentList) { - super(parentList); - } - - @NonNull - @Override - public SampleGroupViewHolder onCreateParentViewHolder(@NonNull ViewGroup parentViewGroup, int viewType) { - View view = LayoutInflater.from(getContext()).inflate(R.layout.sample_recycler_view_group, parentViewGroup, false); - return new SampleGroupViewHolder(view); - } - - @NonNull - @Override - public SampleViewHolder onCreateChildViewHolder(@NonNull ViewGroup childViewGroup, int viewType) { - View view = LayoutInflater.from(getContext()).inflate(R.layout.sample_recycler_view_item, childViewGroup, false); - return new SampleViewHolder(view); - } - - @Override - public void onBindParentViewHolder(@NonNull SampleGroupViewHolder parentViewHolder, int parentPosition, @NonNull SampleGroup parent) { - parentViewHolder.bind(parent); - } - - @Override - public void onBindChildViewHolder(@NonNull SampleViewHolder childViewHolder, int parentPosition, int childPosition, @NonNull Sample child) { - childViewHolder.bind(child); - } - } -} diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java index cec67b72a..6bf0ab335 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java @@ -17,6 +17,7 @@ import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.scriptdroid.ui.common.ScriptLoopDialog; import com.stardust.scriptdroid.ui.edit.ScriptEditView; +import com.stardust.scriptdroid.ui.main.NewFileDialogBuilder; import com.stardust.scriptdroid.ui.main.ViewPagerFragment; import org.androidannotations.annotations.AfterViews; @@ -36,12 +37,16 @@ * Created by Stardust on 2017/3/13. */ @EFragment(R.layout.fragment_my_script_list) -public class MyScriptListFragment extends Fragment implements ViewPagerFragment { +public class MyScriptListFragment extends ViewPagerFragment { private static final String TAG = "MyScriptListFragment"; private static ScriptFile sCurrentDirectory = StorageFileProvider.DEFAULT_DIRECTORY; + public MyScriptListFragment(){ + super(0); + } + @ViewById(R.id.script_file_list) ScriptListView mScriptFileList; @@ -145,15 +150,8 @@ public void run() { @Override - public void setUpWithFab(ViewPager pager, FloatingActionButton fab) { - if (fab.getVisibility() != View.VISIBLE) { - fab.show(); - return; - } - fab.animate() - .rotation(0) - .setDuration(300) - .setInterpolator(new FastOutSlowInInterpolator()) - .start(); + protected void onFabClick(FloatingActionButton fab) { + new NewFileDialogBuilder(getContext()) + .show(); } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/task/TaskManagerFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/task/TaskManagerFragment.java index 7b5c1bf1e..be7a4c36a 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/task/TaskManagerFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/task/TaskManagerFragment.java @@ -33,7 +33,7 @@ * Created by Stardust on 2017/3/24. */ @EFragment(R.layout.fragment_task_manager) -public class TaskManagerFragment extends Fragment implements PopupMenu.OnMenuItemClickListener, ViewPagerFragment { +public class TaskManagerFragment extends ViewPagerFragment implements PopupMenu.OnMenuItemClickListener { @ViewById(R.id.task_list) TaskListRecyclerView mTaskListRecyclerView; @@ -56,18 +56,9 @@ public class TaskManagerFragment extends Fragment implements PopupMenu.OnMenuIte @ViewById(R.id.spinner_current_item) TextView mSpinnerCurrentItem; - private FloatingActionButton mFab; - - private View.OnClickListener mOnFabClickListener = new View.OnClickListener() { - @Override - public void onClick(View v) { - if (mLogView.getVisibility() == View.VISIBLE) { - Console.clear(); - } else { - AutoJs.getInstance().getScriptEngineService().stopAll(); - } - } - }; + public TaskManagerFragment() { + super(45); + } @AfterViews @@ -140,35 +131,13 @@ private void showTaskManager() { mSpinnerCurrentItem.setText(R.string.text_task_manage); } - @Override - public void setUpWithFab(ViewPager pager, final FloatingActionButton fab) { - mFab = fab; - fab.setOnClickListener(mOnFabClickListener); - if (fab.getVisibility() != View.VISIBLE) { - fab.show(); - return; - } - fab.animate() - .rotation(45) - .setDuration(300) - .setInterpolator(new FastOutSlowInInterpolator()) - .start(); - - } - - @Override - public void onPause() { - super.onPause(); - if (mFab != null) { - mFab.setOnClickListener(null); - } - } @Override - public void onResume() { - super.onResume(); - if (mFab != null) { - mFab.setOnClickListener(mOnFabClickListener); + protected void onFabClick(FloatingActionButton fab) { + if (mLogView.getVisibility() == View.VISIBLE) { + Console.clear(); + } else { + AutoJs.getInstance().getScriptEngineService().stopAll(); } } } diff --git a/app/src/main/java/com/stardust/widget/EWebView.java b/app/src/main/java/com/stardust/widget/EWebView.java index 3939ad9b3..e56f17e41 100644 --- a/app/src/main/java/com/stardust/widget/EWebView.java +++ b/app/src/main/java/com/stardust/widget/EWebView.java @@ -52,9 +52,8 @@ private void setUpWebView() { WebSettings settings = mWebView.getSettings(); settings.setUseWideViewPort(true); settings.setBuiltInZoomControls(true); - settings.setSupportZoom(true); settings.setLoadWithOverviewMode(true); - settings.setJavaScriptEnabled(true); + //settings.setJavaScriptEnabled(true); mWebView.setWebViewClient(new MyWebViewClient()); mWebView.setWebChromeClient(new MyWebChromeClient()); } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index f0c280e43..b603494e5 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -13,9 +13,9 @@ android:layout_height="match_parent"> @@ -42,14 +42,13 @@ android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> - diff --git a/app/src/main/res/layout/fragment_drawer.xml b/app/src/main/res/layout/fragment_drawer.xml index 5fc5a2a5e..0104c12be 100644 --- a/app/src/main/res/layout/fragment_drawer.xml +++ b/app/src/main/res/layout/fragment_drawer.xml @@ -11,10 +11,10 @@ android:orientation="vertical"> + android:layout_marginBottom="5dp"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +