diff --git a/.idea/modules.xml b/.idea/modules.xml index 4fac18b4..7e950955 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,8 +2,8 @@ + - diff --git a/app/release/output.json b/app/release/output.json index becbfd63..f1b1ec8d 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -1 +1 @@ -[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":228},"path":"release-3.0.0 Alpha28.apk","properties":{"packageId":"com.stardust.scriptdroid","split":"","minSdkVersion":"17"}}] \ No newline at end of file +[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":230},"path":"release-3.0.0 Alpha30.apk","properties":{"packageId":"com.stardust.scriptdroid","split":"","minSdkVersion":"17"}}] \ No newline at end of file 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 feec24cd..71d146de 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 @@ -43,8 +43,7 @@ public class TaskPrefEditActivity extends AbstractAppCompatPluginActivity { private void initScriptListRecyclerView() { mStorageFileProvider = StorageFileProvider.getExternalStorageProvider(); ScriptListView scriptList = (ScriptListView) findViewById(R.id.script_list); - scriptList.setStorageFileProvider(mStorageFileProvider); - scriptList.setCurrentDirectory(new ScriptFile(StorageFileProvider.DEFAULT_DIRECTORY)); + scriptList.setStorageFileProvider(mStorageFileProvider, new ScriptFile(StorageFileProvider.DEFAULT_DIRECTORY)); scriptList.setOnScriptFileClickListener((view, file) -> { mSelectedScriptFilePath = file.getPath(); finish(); diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/MyScriptListFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/MyScriptListFragment.java index 7ea344fc..36db8fe6 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/MyScriptListFragment.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/MyScriptListFragment.java @@ -2,6 +2,7 @@ package com.stardust.scriptdroid.ui.main.scripts; import android.app.Activity; import android.os.Bundle; +import android.preference.PreferenceManager; import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; @@ -13,6 +14,7 @@ import com.stardust.scriptdroid.ui.common.ScriptOperations; import com.stardust.scriptdroid.ui.main.FloatingActionMenu; import com.stardust.scriptdroid.ui.main.QueryEvent; import com.stardust.scriptdroid.ui.main.ViewPagerFragment; +import com.stardust.scriptdroid.ui.viewmodel.ScriptList; import com.stardust.util.BackPressedHandler; import org.androidannotations.annotations.AfterViews; @@ -48,10 +50,10 @@ public class MyScriptListFragment extends ViewPagerFragment implements BackPress @AfterViews void setUpViews() { + ScriptList.SortConfig sortConfig = ScriptList.SortConfig.from(PreferenceManager.getDefaultSharedPreferences(getContext())); + mScriptFileList.setSortConfig(sortConfig); mScriptFileList.setStorageFileProvider(StorageFileProvider.getDefault()); - mScriptFileList.setOnScriptFileClickListener((view, file) -> { - Scripts.edit(file); - }); + mScriptFileList.setOnScriptFileClickListener((view, file) -> Scripts.edit(file)); } @Override @@ -133,6 +135,12 @@ public class MyScriptListFragment extends ViewPagerFragment implements BackPress mScriptFileList.setFilter((file -> file.getSimplifiedName().contains(query))); } + @Override + public void onStop() { + super.onStop(); + mScriptFileList.getSortConfig().saveInto(PreferenceManager.getDefaultSharedPreferences(getContext())); + } + @Override public void onDetach() { super.onDetach(); @@ -140,6 +148,7 @@ public class MyScriptListFragment extends ViewPagerFragment implements BackPress mFloatingActionMenu.setOnFloatingActionButtonClickListener(null); } + @Override public void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListView.java index 055ec5f2..a2d54f5b 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListView.java @@ -105,6 +105,14 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa } + public void setSortConfig(ScriptList.SortConfig sortConfig) { + mScriptList.setSortConfig(sortConfig); + } + + public ScriptList.SortConfig getSortConfig() { + return mScriptList.getSortConfig(); + } + public void setStorageFileProvider(StorageFileProvider fileProvider, ScriptFile currentDirectory) { if (mStorageFileProvider != null) mStorageFileProvider.unregisterDirectoryChangeListener(this); @@ -286,6 +294,14 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa } + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + if (mStorageFileProvider != null) + mStorageFileProvider.registerDirectoryChangeListener(this); + + } + @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); @@ -495,8 +511,12 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa } if (isDirCategory) { mArrow.setRotation(mDirsCollapsed ? -90 : 0); + mSortOrder.setImageResource(mScriptList.isDirSortedAscending() ? + R.drawable.ic_ascending_order : R.drawable.ic_descending_order); } else { mArrow.setRotation(mFilesCollapsed ? -90 : 0); + mSortOrder.setImageResource(mScriptList.isFileSortedAscending() ? + R.drawable.ic_ascending_order : R.drawable.ic_descending_order); } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/viewmodel/ScriptList.java b/app/src/main/java/com/stardust/scriptdroid/ui/viewmodel/ScriptList.java index 712080a8..e67b603f 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/viewmodel/ScriptList.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/viewmodel/ScriptList.java @@ -1,5 +1,7 @@ package com.stardust.scriptdroid.ui.viewmodel; +import android.content.SharedPreferences; + import com.stardust.scriptdroid.model.script.ScriptFile; import com.stardust.scriptdroid.ui.main.scripts.ScriptListView; import com.stardust.util.FileSorter; @@ -14,41 +16,99 @@ import java.util.Comparator; public class ScriptList { + public static class SortConfig { + + private static final String CLASS_NAME = "com.stardust.scriptdroid.ui.viewmodel.ScriptList.SortConfig"; + + private int mDirSortType = SORT_TYPE_NAME; + private boolean mDirSortedAscending; + private boolean mFileSortedAscending; + private int mFileSortType = SORT_TYPE_NAME; + + public int getDirSortType() { + return mDirSortType; + } + + public void setDirSortType(int dirSortType) { + mDirSortType = dirSortType; + } + + public boolean isDirSortedAscending() { + return mDirSortedAscending; + } + + public void setDirSortedAscending(boolean dirSortedAscending) { + mDirSortedAscending = dirSortedAscending; + } + + public boolean isFileSortedAscending() { + return mFileSortedAscending; + } + + public void setFileSortedAscending(boolean fileSortedAscending) { + mFileSortedAscending = fileSortedAscending; + } + + public int getFileSortType() { + return mFileSortType; + } + + public void setFileSortType(int fileSortType) { + mFileSortType = fileSortType; + } + + public void saveInto(SharedPreferences preferences) { + preferences.edit() + .putInt(CLASS_NAME + "." + "file_sort_type", mFileSortType) + .putInt(CLASS_NAME + "." + "dir_sort_type", mDirSortType) + .putBoolean(CLASS_NAME + "." + "file_ascending", mFileSortedAscending) + .putBoolean(CLASS_NAME + "." + "dir_ascending", mDirSortedAscending) + .apply(); + + } + + public static SortConfig from(SharedPreferences preferences) { + SortConfig config = new SortConfig(); + config.setDirSortedAscending(preferences.getBoolean(CLASS_NAME + "." + "dir_ascending", false)); + config.setFileSortedAscending(preferences.getBoolean(CLASS_NAME + "." + "file_ascending", false)); + config.setDirSortType(preferences.getInt(CLASS_NAME + "." + "dir_sort_type", SORT_TYPE_NAME)); + config.setFileSortType(preferences.getInt(CLASS_NAME + "." + "file_sort_type", SORT_TYPE_NAME)); + return config; + } + } + public static final int SORT_TYPE_NAME = 0x10; public static final int SORT_TYPE_TYPE = 0x20; public static final int SORT_TYPE_SIZE = 0x30; public static final int SORT_TYPE_DATE = 0x40; + private SortConfig mSortConfig = new SortConfig(); private ArrayList mScriptFiles = new ArrayList<>(); private ArrayList mDirectories = new ArrayList<>(); - private int mDirSortType = SORT_TYPE_NAME; - private boolean mDirSortedAscending; - private boolean mFileSortedAscending; - private int mFileSortType = SORT_TYPE_NAME; public boolean isDirSortedAscending() { - return mDirSortedAscending; + return mSortConfig.mDirSortedAscending; } public boolean isFileSortedAscending() { - return mFileSortedAscending; + return mSortConfig.mFileSortedAscending; } public int getDirSortType() { - return mDirSortType; + return mSortConfig.mDirSortType; } public int getFileSortType() { - return mFileSortType; + return mSortConfig.mFileSortType; } public void setDirSortedAscending(boolean dirSortedAscending) { - mDirSortedAscending = dirSortedAscending; + mSortConfig.mDirSortedAscending = dirSortedAscending; } public void setFileSortedAscending(boolean fileSortedAscending) { - mFileSortedAscending = fileSortedAscending; + mSortConfig.mFileSortedAscending = fileSortedAscending; } private Comparator getComparator(int sortType) { @@ -99,26 +159,31 @@ public class ScriptList { } public void sortDir(int sortType) { - mDirSortType = sortType; - FileSorter.sort(mDirectories, getComparator(sortType), mDirSortedAscending); + mSortConfig.mDirSortType = sortType; + FileSorter.sort(mDirectories, getComparator(sortType), mSortConfig.mDirSortedAscending); } public void sortFile(int sortType) { - mFileSortType = sortType; - FileSorter.sort(mScriptFiles, getComparator(sortType), mFileSortedAscending); + mSortConfig.mFileSortType = sortType; + FileSorter.sort(mScriptFiles, getComparator(sortType), mSortConfig.mFileSortedAscending); } public void sort() { - FileSorter.sort(mDirectories, getComparator(mDirSortType), mDirSortedAscending); - FileSorter.sort(mScriptFiles, getComparator(mFileSortType), mFileSortedAscending); + FileSorter.sort(mDirectories, getComparator(mSortConfig.mDirSortType), mSortConfig.mDirSortedAscending); + FileSorter.sort(mScriptFiles, getComparator(mSortConfig.mFileSortType), mSortConfig.mFileSortedAscending); + } + + public SortConfig getSortConfig() { + return mSortConfig; + } + + public void setSortConfig(SortConfig sortConfig) { + mSortConfig = sortConfig; } public ScriptList cloneConfig() { ScriptList list = new ScriptList(); - list.mFileSortType = mFileSortType; - list.mDirSortType = mDirSortType; - list.mDirSortedAscending = mDirSortedAscending; - list.mFileSortedAscending = mFileSortedAscending; + list.mSortConfig = mSortConfig; return list; } } 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 c480a892..c18713e2 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 @@ -16,7 +16,7 @@ public class Timers { private SparseArray mHandlerCallbacks = new SparseArray<>(); private int mCallbackMaxId = 0; private ScriptBridges mBridges; - private Handler mHandler; + private ThreadLocal mHandler = new ThreadLocal<>(); private long mFutureCallbackUptimeMillis = 0; public Timers(ScriptBridges bridges) { @@ -24,8 +24,8 @@ public class Timers { } private void ensureHandler() { - if (mHandler == null) { - mHandler = new Handler(); + if (mHandler.get() == null) { + mHandler.set(new Handler()); } } @@ -33,12 +33,9 @@ public class Timers { ensureHandler(); mCallbackMaxId++; final int id = mCallbackMaxId; - Runnable r = new Runnable() { - @Override - public void run() { - mBridges.callFunction(callback, null, args); - mHandlerCallbacks.remove(id); - } + Runnable r = () -> { + mBridges.callFunction(callback, null, args); + mHandlerCallbacks.remove(id); }; mHandlerCallbacks.put(id, r); postDelayed(r, delay); @@ -69,7 +66,7 @@ public class Timers { private void postDelayed(Runnable r, long interval) { long uptime = SystemClock.uptimeMillis() + interval; - mHandler.postAtTime(r, uptime); + mHandler.get().postAtTime(r, uptime); mFutureCallbackUptimeMillis = Math.max(mFutureCallbackUptimeMillis, uptime); } @@ -100,7 +97,7 @@ public class Timers { private boolean clearCallback(int id) { Runnable callback = mHandlerCallbacks.get(id); if (callback != null) { - mHandler.removeCallbacks(callback); + mHandler.get().removeCallbacks(callback); mHandlerCallbacks.remove(id); return true; }