mirror of
https://github.com/TonyJiangWJ/Auto.js.git
synced 2026-06-21 21:01:43 +08:00
add: script list remember sorting config
This commit is contained in:
parent
08571f409b
commit
56b5f5b6b8
@ -2,8 +2,8 @@
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/Auto.js.iml" filepath="$PROJECT_DIR$/Auto.js.iml" />
|
||||
<module fileurl="file://E:\YiBin\AndroidStudioProjects\NoRootScriptDroid\Auto.js.iml" filepath="E:\YiBin\AndroidStudioProjects\NoRootScriptDroid\Auto.js.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/NoRootScriptDroid.iml" filepath="$PROJECT_DIR$/NoRootScriptDroid.iml" />
|
||||
<module fileurl="file://C:\Users\Stardust\Documents\AndroidProjects\Auto.js\NoRootScriptDroid.iml" filepath="C:\Users\Stardust\Documents\AndroidProjects\Auto.js\NoRootScriptDroid.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/autojs/autojs.iml" filepath="$PROJECT_DIR$/autojs/autojs.iml" />
|
||||
|
||||
@ -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"}}]
|
||||
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":230},"path":"release-3.0.0 Alpha30.apk","properties":{"packageId":"com.stardust.scriptdroid","split":"","minSdkVersion":"17"}}]
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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<ScriptFile> mScriptFiles = new ArrayList<>();
|
||||
private ArrayList<ScriptFile> 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<File> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,7 +16,7 @@ public class Timers {
|
||||
private SparseArray<Runnable> mHandlerCallbacks = new SparseArray<>();
|
||||
private int mCallbackMaxId = 0;
|
||||
private ScriptBridges mBridges;
|
||||
private Handler mHandler;
|
||||
private ThreadLocal<Handler> 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;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user