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

View File

@ -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" />

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() {
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();

View File

@ -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();

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) {
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);
}
}

View File

@ -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;
}
}

View File

@ -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;
}