add: script list remember sorting config

This commit is contained in:
hyb1996
2017-12-03 16:35:05 +08:00
parent 08571f409b
commit 56b5f5b6b8
7 changed files with 128 additions and 38 deletions

2
.idea/modules.xml generated
View File

@@ -2,8 +2,8 @@
<project version="4"> <project version="4">
<component name="ProjectModuleManager"> <component name="ProjectModuleManager">
<modules> <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://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://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$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
<module fileurl="file://$PROJECT_DIR$/autojs/autojs.iml" filepath="$PROJECT_DIR$/autojs/autojs.iml" /> <module fileurl="file://$PROJECT_DIR$/autojs/autojs.iml" filepath="$PROJECT_DIR$/autojs/autojs.iml" />

View File

@@ -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"}}]

View File

@@ -43,8 +43,7 @@ public class TaskPrefEditActivity extends AbstractAppCompatPluginActivity {
private void initScriptListRecyclerView() { private void initScriptListRecyclerView() {
mStorageFileProvider = StorageFileProvider.getExternalStorageProvider(); mStorageFileProvider = StorageFileProvider.getExternalStorageProvider();
ScriptListView scriptList = (ScriptListView) findViewById(R.id.script_list); ScriptListView scriptList = (ScriptListView) findViewById(R.id.script_list);
scriptList.setStorageFileProvider(mStorageFileProvider); scriptList.setStorageFileProvider(mStorageFileProvider, new ScriptFile(StorageFileProvider.DEFAULT_DIRECTORY));
scriptList.setCurrentDirectory(new ScriptFile(StorageFileProvider.DEFAULT_DIRECTORY));
scriptList.setOnScriptFileClickListener((view, file) -> { scriptList.setOnScriptFileClickListener((view, file) -> {
mSelectedScriptFilePath = file.getPath(); mSelectedScriptFilePath = file.getPath();
finish(); finish();

View File

@@ -2,6 +2,7 @@ package com.stardust.scriptdroid.ui.main.scripts;
import android.app.Activity; import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton; 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.FloatingActionMenu;
import com.stardust.scriptdroid.ui.main.QueryEvent; import com.stardust.scriptdroid.ui.main.QueryEvent;
import com.stardust.scriptdroid.ui.main.ViewPagerFragment; import com.stardust.scriptdroid.ui.main.ViewPagerFragment;
import com.stardust.scriptdroid.ui.viewmodel.ScriptList;
import com.stardust.util.BackPressedHandler; import com.stardust.util.BackPressedHandler;
import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.AfterViews;
@@ -48,10 +50,10 @@ public class MyScriptListFragment extends ViewPagerFragment implements BackPress
@AfterViews @AfterViews
void setUpViews() { void setUpViews() {
ScriptList.SortConfig sortConfig = ScriptList.SortConfig.from(PreferenceManager.getDefaultSharedPreferences(getContext()));
mScriptFileList.setSortConfig(sortConfig);
mScriptFileList.setStorageFileProvider(StorageFileProvider.getDefault()); mScriptFileList.setStorageFileProvider(StorageFileProvider.getDefault());
mScriptFileList.setOnScriptFileClickListener((view, file) -> { mScriptFileList.setOnScriptFileClickListener((view, file) -> Scripts.edit(file));
Scripts.edit(file);
});
} }
@Override @Override
@@ -133,6 +135,12 @@ public class MyScriptListFragment extends ViewPagerFragment implements BackPress
mScriptFileList.setFilter((file -> file.getSimplifiedName().contains(query))); mScriptFileList.setFilter((file -> file.getSimplifiedName().contains(query)));
} }
@Override
public void onStop() {
super.onStop();
mScriptFileList.getSortConfig().saveInto(PreferenceManager.getDefaultSharedPreferences(getContext()));
}
@Override @Override
public void onDetach() { public void onDetach() {
super.onDetach(); super.onDetach();
@@ -140,6 +148,7 @@ public class MyScriptListFragment extends ViewPagerFragment implements BackPress
mFloatingActionMenu.setOnFloatingActionButtonClickListener(null); mFloatingActionMenu.setOnFloatingActionButtonClickListener(null);
} }
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();

View File

@@ -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) { public void setStorageFileProvider(StorageFileProvider fileProvider, ScriptFile currentDirectory) {
if (mStorageFileProvider != null) if (mStorageFileProvider != null)
mStorageFileProvider.unregisterDirectoryChangeListener(this); 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 @Override
protected void onDetachedFromWindow() { protected void onDetachedFromWindow() {
super.onDetachedFromWindow(); super.onDetachedFromWindow();
@@ -495,8 +511,12 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
} }
if (isDirCategory) { if (isDirCategory) {
mArrow.setRotation(mDirsCollapsed ? -90 : 0); mArrow.setRotation(mDirsCollapsed ? -90 : 0);
mSortOrder.setImageResource(mScriptList.isDirSortedAscending() ?
R.drawable.ic_ascending_order : R.drawable.ic_descending_order);
} else { } else {
mArrow.setRotation(mFilesCollapsed ? -90 : 0); mArrow.setRotation(mFilesCollapsed ? -90 : 0);
mSortOrder.setImageResource(mScriptList.isFileSortedAscending() ?
R.drawable.ic_ascending_order : R.drawable.ic_descending_order);
} }
} }

View File

@@ -1,5 +1,7 @@
package com.stardust.scriptdroid.ui.viewmodel; package com.stardust.scriptdroid.ui.viewmodel;
import android.content.SharedPreferences;
import com.stardust.scriptdroid.model.script.ScriptFile; import com.stardust.scriptdroid.model.script.ScriptFile;
import com.stardust.scriptdroid.ui.main.scripts.ScriptListView; import com.stardust.scriptdroid.ui.main.scripts.ScriptListView;
import com.stardust.util.FileSorter; import com.stardust.util.FileSorter;
@@ -14,43 +16,101 @@ import java.util.Comparator;
public class ScriptList { public class ScriptList {
public static final int SORT_TYPE_NAME = 0x10; public static class SortConfig {
public static final int SORT_TYPE_TYPE = 0x20;
public static final int SORT_TYPE_SIZE = 0x30; private static final String CLASS_NAME = "com.stardust.scriptdroid.ui.viewmodel.ScriptList.SortConfig";
public static final int SORT_TYPE_DATE = 0x40;
private ArrayList<ScriptFile> mScriptFiles = new ArrayList<>();
private ArrayList<ScriptFile> mDirectories = new ArrayList<>();
private int mDirSortType = SORT_TYPE_NAME; private int mDirSortType = SORT_TYPE_NAME;
private boolean mDirSortedAscending; private boolean mDirSortedAscending;
private boolean mFileSortedAscending; private boolean mFileSortedAscending;
private int mFileSortType = SORT_TYPE_NAME; private int mFileSortType = SORT_TYPE_NAME;
public boolean isDirSortedAscending() {
return mDirSortedAscending;
}
public boolean isFileSortedAscending() {
return mFileSortedAscending;
}
public int getDirSortType() { public int getDirSortType() {
return mDirSortType; return mDirSortType;
} }
public int getFileSortType() { public void setDirSortType(int dirSortType) {
return mFileSortType; mDirSortType = dirSortType;
}
public boolean isDirSortedAscending() {
return mDirSortedAscending;
} }
public void setDirSortedAscending(boolean dirSortedAscending) { public void setDirSortedAscending(boolean dirSortedAscending) {
mDirSortedAscending = dirSortedAscending; mDirSortedAscending = dirSortedAscending;
} }
public boolean isFileSortedAscending() {
return mFileSortedAscending;
}
public void setFileSortedAscending(boolean fileSortedAscending) { public void setFileSortedAscending(boolean fileSortedAscending) {
mFileSortedAscending = 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<>();
public boolean isDirSortedAscending() {
return mSortConfig.mDirSortedAscending;
}
public boolean isFileSortedAscending() {
return mSortConfig.mFileSortedAscending;
}
public int getDirSortType() {
return mSortConfig.mDirSortType;
}
public int getFileSortType() {
return mSortConfig.mFileSortType;
}
public void setDirSortedAscending(boolean dirSortedAscending) {
mSortConfig.mDirSortedAscending = dirSortedAscending;
}
public void setFileSortedAscending(boolean fileSortedAscending) {
mSortConfig.mFileSortedAscending = fileSortedAscending;
}
private Comparator<File> getComparator(int sortType) { private Comparator<File> getComparator(int sortType) {
switch (sortType) { switch (sortType) {
case SORT_TYPE_NAME: case SORT_TYPE_NAME:
@@ -99,26 +159,31 @@ public class ScriptList {
} }
public void sortDir(int sortType) { public void sortDir(int sortType) {
mDirSortType = sortType; mSortConfig.mDirSortType = sortType;
FileSorter.sort(mDirectories, getComparator(sortType), mDirSortedAscending); FileSorter.sort(mDirectories, getComparator(sortType), mSortConfig.mDirSortedAscending);
} }
public void sortFile(int sortType) { public void sortFile(int sortType) {
mFileSortType = sortType; mSortConfig.mFileSortType = sortType;
FileSorter.sort(mScriptFiles, getComparator(sortType), mFileSortedAscending); FileSorter.sort(mScriptFiles, getComparator(sortType), mSortConfig.mFileSortedAscending);
} }
public void sort() { public void sort() {
FileSorter.sort(mDirectories, getComparator(mDirSortType), mDirSortedAscending); FileSorter.sort(mDirectories, getComparator(mSortConfig.mDirSortType), mSortConfig.mDirSortedAscending);
FileSorter.sort(mScriptFiles, getComparator(mFileSortType), mFileSortedAscending); FileSorter.sort(mScriptFiles, getComparator(mSortConfig.mFileSortType), mSortConfig.mFileSortedAscending);
}
public SortConfig getSortConfig() {
return mSortConfig;
}
public void setSortConfig(SortConfig sortConfig) {
mSortConfig = sortConfig;
} }
public ScriptList cloneConfig() { public ScriptList cloneConfig() {
ScriptList list = new ScriptList(); ScriptList list = new ScriptList();
list.mFileSortType = mFileSortType; list.mSortConfig = mSortConfig;
list.mDirSortType = mDirSortType;
list.mDirSortedAscending = mDirSortedAscending;
list.mFileSortedAscending = mFileSortedAscending;
return list; return list;
} }
} }

View File

@@ -16,7 +16,7 @@ public class Timers {
private SparseArray<Runnable> mHandlerCallbacks = new SparseArray<>(); private SparseArray<Runnable> mHandlerCallbacks = new SparseArray<>();
private int mCallbackMaxId = 0; private int mCallbackMaxId = 0;
private ScriptBridges mBridges; private ScriptBridges mBridges;
private Handler mHandler; private ThreadLocal<Handler> mHandler = new ThreadLocal<>();
private long mFutureCallbackUptimeMillis = 0; private long mFutureCallbackUptimeMillis = 0;
public Timers(ScriptBridges bridges) { public Timers(ScriptBridges bridges) {
@@ -24,8 +24,8 @@ public class Timers {
} }
private void ensureHandler() { private void ensureHandler() {
if (mHandler == null) { if (mHandler.get() == null) {
mHandler = new Handler(); mHandler.set(new Handler());
} }
} }
@@ -33,12 +33,9 @@ public class Timers {
ensureHandler(); ensureHandler();
mCallbackMaxId++; mCallbackMaxId++;
final int id = mCallbackMaxId; final int id = mCallbackMaxId;
Runnable r = new Runnable() { Runnable r = () -> {
@Override
public void run() {
mBridges.callFunction(callback, null, args); mBridges.callFunction(callback, null, args);
mHandlerCallbacks.remove(id); mHandlerCallbacks.remove(id);
}
}; };
mHandlerCallbacks.put(id, r); mHandlerCallbacks.put(id, r);
postDelayed(r, delay); postDelayed(r, delay);
@@ -69,7 +66,7 @@ public class Timers {
private void postDelayed(Runnable r, long interval) { private void postDelayed(Runnable r, long interval) {
long uptime = SystemClock.uptimeMillis() + interval; long uptime = SystemClock.uptimeMillis() + interval;
mHandler.postAtTime(r, uptime); mHandler.get().postAtTime(r, uptime);
mFutureCallbackUptimeMillis = Math.max(mFutureCallbackUptimeMillis, uptime); mFutureCallbackUptimeMillis = Math.max(mFutureCallbackUptimeMillis, uptime);
} }
@@ -100,7 +97,7 @@ public class Timers {
private boolean clearCallback(int id) { private boolean clearCallback(int id) {
Runnable callback = mHandlerCallbacks.get(id); Runnable callback = mHandlerCallbacks.get(id);
if (callback != null) { if (callback != null) {
mHandler.removeCallbacks(callback); mHandler.get().removeCallbacks(callback);
mHandlerCallbacks.remove(id); mHandlerCallbacks.remove(id);
return true; return true;
} }