diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d699b9ca..f4f91ba5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,7 +74,9 @@ - + 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 5293e63d..dcc4c914 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 @@ -18,8 +18,8 @@ import com.stardust.scriptdroid.script.Scripts; 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.ScriptListRecyclerView; -import com.stardust.scriptdroid.ui.main.script_list.ScriptListWithProgressBarView; +import com.stardust.scriptdroid.ui.main.scripts.ScriptListRecyclerView; +import com.stardust.scriptdroid.ui.main.scripts.ScriptListWithProgressBarView; import com.stardust.widget.ViewHolderSupplier; import io.mattcarroll.hover.Navigator; 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 97ce7db9..2fe00588 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 @@ -13,8 +13,8 @@ import com.stardust.scriptdroid.external.CommonUtils; import com.stardust.scriptdroid.script.ScriptFile; import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.scriptdroid.ui.BaseActivity; -import com.stardust.scriptdroid.ui.main.script_list.ScriptListRecyclerView; -import com.stardust.scriptdroid.ui.main.script_list.ScriptListWithProgressBarView; +import com.stardust.scriptdroid.ui.main.scripts.ScriptListRecyclerView; +import com.stardust.scriptdroid.ui.main.scripts.ScriptListWithProgressBarView; import com.twofortyfouram.locale.sdk.client.ui.activity.AbstractAppCompatPluginActivity; import org.androidannotations.annotations.AfterViews; 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 d82eb7d3..5c7eb0ac 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 @@ -11,8 +11,8 @@ import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.script.ScriptFile; import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.scriptdroid.ui.BaseActivity; -import com.stardust.scriptdroid.ui.main.script_list.ScriptListRecyclerView; -import com.stardust.scriptdroid.ui.main.script_list.ScriptListWithProgressBarView; +import com.stardust.scriptdroid.ui.main.scripts.ScriptListRecyclerView; +import com.stardust.scriptdroid.ui.main.scripts.ScriptListWithProgressBarView; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EActivity; 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 6c7349b7..5104caa5 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 @@ -21,14 +21,18 @@ import com.stardust.scriptdroid.script.ScriptFile; import com.stardust.scriptdroid.script.Scripts; 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.scriptdroid.ui.main.scripts.MyScriptListFragment; import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder; +import org.reactivestreams.Publisher; +import org.reactivestreams.Subscriber; + import java.io.File; import java.io.IOException; import java.io.InputStream; import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.functions.Function; import io.reactivex.schedulers.Schedulers; @@ -157,17 +161,18 @@ public class ScriptOperations { private void showMessage(final int resId) { if (Looper.myLooper() == Looper.getMainLooper()) { - showMessageDirectly(resId); + showMessageWithoutThreadSwitch(resId); } + //switch to ui thread to show message App.getApp().getUiHandler().post(new Runnable() { @Override public void run() { - showMessageDirectly(resId); + showMessageWithoutThreadSwitch(resId); } }); } - private void showMessageDirectly(int resId) { + private void showMessageWithoutThreadSwitch(int resId) { if (mView != null) { Snackbar.make(mView, resId, Snackbar.LENGTH_SHORT).show(); } else { @@ -224,6 +229,29 @@ public class ScriptOperations { }); } + public void createShortcut(ScriptFile file) { + Scripts.createShortcut(file); + showMessage(R.string.text_already_create); + } + + public void delete(final ScriptFile scriptFile) { + Observable.fromPublisher(new Publisher() { + @Override + public void subscribe(Subscriber s) { + s.onNext(PFile.deleteRecursively(scriptFile)); + } + }).subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull Boolean deleted) throws Exception { + showMessage(deleted ? R.string.text_already_delete : R.string.text_delete_failed); + notifyScriptFileChanged(); + } + }); + } + + private class InputCallback implements MaterialDialog.InputCallback { private String mExcluded; 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 9e9b1e86..203af604 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 @@ -1,8 +1,6 @@ package com.stardust.scriptdroid.ui.main; import android.Manifest; -import android.annotation.SuppressLint; -import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; @@ -15,8 +13,6 @@ import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.widget.Toolbar; import android.view.Gravity; import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; @@ -31,35 +27,26 @@ 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.script.ScriptFile; import com.stardust.scriptdroid.script.StorageFileProvider; -import com.stardust.scriptdroid.ui.common.ScriptOperations; import com.stardust.scriptdroid.ui.main.community.CommunityFragment; +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.scripts.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; import com.stardust.scriptdroid.ui.BaseActivity; -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.util.BackPressedHandler; -import com.stardust.util.MessageEvent; import com.stardust.view.DrawerAutoClose; import com.stardust.widget.CommonMarkdownView; -import com.stardust.widget.SlidingUpPanel; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.ViewById; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; @EActivity(R.layout.activity_main) public class MainActivity extends BaseActivity implements OnActivityResultDelegate.DelegateHost { @@ -68,10 +55,10 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega @ViewById(R.id.drawer_layout) DrawerLayout mDrawerLayout; - @ViewById(R.id.bottom_menu) - SlidingUpPanel mAddBottomMenuPanel; + @ViewById(R.id.viewpager) ViewPager mViewPager; + @ViewById(R.id.fab) FloatingActionButton mFab; @@ -92,7 +79,8 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega void setUpViews() { setUpToolbar(); setUpTabViewPager(); - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + getWindow().getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); registerBackPressHandlers(); ThemeColorManager.addViewBackground(findViewById(R.id.app_bar)); } @@ -112,16 +100,6 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega private void registerBackPressHandlers() { - registerBackPressedHandler(new BackPressedHandler() { - @Override - public boolean onBackPressed(Activity activity) { - if (mAddBottomMenuPanel.isShowing()) { - mAddBottomMenuPanel.dismiss(); - return true; - } - return false; - } - }); registerBackPressedHandler(new DrawerAutoClose(mDrawerLayout, Gravity.START)); registerBackPressedHandler(new BackPressedHandler.DoublePressExit(this, R.string.text_press_again_to_exit)); } @@ -132,19 +110,20 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega } private void showAccessibilitySettingPromptIfDisabled() { - if (!AccessibilityServiceTool.isAccessibilityServiceEnabled(this)) { - new NotAskAgainDialog.Builder(this, "Eating...love you...miss you...17.4.12") - .title(R.string.text_need_to_enable_accessibility_service) - .content(R.string.explain_accessibility_permission) - .positiveText(R.string.text_go_to_setting) - .negativeText(R.string.text_cancel) - .onPositive(new MaterialDialog.SingleButtonCallback() { - @Override - public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { - AccessibilityServiceTool.enableAccessibilityService(); - } - }).show(); + if (AccessibilityServiceTool.isAccessibilityServiceEnabled(this)) { + return; } + new NotAskAgainDialog.Builder(this, "Eating...love you...miss you...17.4.12") + .title(R.string.text_need_to_enable_accessibility_service) + .content(R.string.explain_accessibility_permission) + .positiveText(R.string.text_go_to_setting) + .negativeText(R.string.text_cancel) + .onPositive(new MaterialDialog.SingleButtonCallback() { + @Override + public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { + AccessibilityServiceTool.enableAccessibilityService(); + } + }).show(); } private void setUpToolbar() { @@ -162,11 +141,15 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega mPagerAdapter = new FragmentPagerAdapterBuilder(this) .add(new MyScriptListFragment_(), R.string.text_script) .add(new OnlineDocsFragment_(), R.string.text_tutorial) - .add(new CommunityFragment(), R.string.text_community) + .add(new CommunityFragment_(), R.string.text_community) .add(new TaskManagerFragment_(), R.string.text_manage) .build(); mViewPager.setAdapter(mPagerAdapter); tabLayout.setupWithViewPager(mViewPager); + setUpViewPagerFragmentBehaviors(); + } + + private void setUpViewPagerFragmentBehaviors() { mPagerAdapter.setOnFragmentInstantiateListener(new FragmentPagerAdapterBuilder.OnFragmentInstantiateListener() { @Override public void OnInstantiate(int pos, Fragment fragment) { @@ -187,53 +170,10 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega }); } - @Click(R.id.create_new_file) - void createScriptFile() { - new ScriptOperations(this, mDrawerLayout) - .newScriptFile(); - } - - @Click(R.id.create_new_directory) - void createNewDirectory() { - new ScriptOperations(this, mDrawerLayout) - .newDirectory(); - } - - @Click(R.id.import_from_file) - void showFileChooser() { - 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.refreshAll(); - new ScriptOperations(MainActivity.this, mDrawerLayout) - .importFile(file.getPath()) - .subscribe(); - } - }) - .title(R.string.text_please_choose_file_to_import) - .autoDismiss(false) - .positiveText(R.string.cancel) - .neutralText(R.string.text_refresh) - .onAny(new MaterialDialog.SingleButtonCallback() { - @Override - public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { - if (which == DialogAction.POSITIVE) { - dialog.dismiss(); - } else { - provider.refreshAll(); - } - } - }) - .show(); - } @Click(R.id.setting) void startSettingActivity() { - startActivity(new Intent(this, SettingsActivity_.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); + startActivity(new Intent(this, SettingsActivity_.class)); } @Click(R.id.exit) @@ -247,6 +187,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega @Override protected void onPause() { super.onPause(); + //not working stopService(new Intent(this, DownloadService.class)); } 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 index c64a932b..126eed8d 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/NewFileDialogBuilder.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/NewFileDialogBuilder.java @@ -1,20 +1,14 @@ 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; /** 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 b070463b..5f6705df 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,11 +1,7 @@ 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; @@ -17,7 +13,7 @@ public abstract class ViewPagerFragment extends Fragment { protected static final int ROTATION_GONE = -1; - private int mRotation; + private int mFabRotation; private FloatingActionButton mFab; private View.OnClickListener mOnFabClickListener = new View.OnClickListener() { @Override @@ -26,8 +22,8 @@ public abstract class ViewPagerFragment extends Fragment { } }; - public ViewPagerFragment(int rotation) { - mRotation = rotation; + public ViewPagerFragment(int fabRotation) { + mFabRotation = fabRotation; } public void setFab(FloatingActionButton fab) { @@ -37,7 +33,7 @@ public abstract class ViewPagerFragment extends Fragment { protected abstract void onFabClick(FloatingActionButton fab); public void onPageSelected() { - if (mRotation == ROTATION_GONE) { + if (mFabRotation == ROTATION_GONE) { if (mFab.getVisibility() == View.VISIBLE) { mFab.hide(); } @@ -46,11 +42,11 @@ public abstract class ViewPagerFragment extends Fragment { } mFab.setOnClickListener(mOnFabClickListener); if (mFab.getVisibility() != View.VISIBLE) { - mFab.setRotation(mRotation); + mFab.setRotation(mFabRotation); mFab.show(); - } else if (Math.abs(mFab.getRotation() - mRotation) > 0.1f) { + } else if (Math.abs(mFab.getRotation() - mFabRotation) > 0.1f) { mFab.animate() - .rotation(mRotation) + .rotation(mFabRotation) .setDuration(300) .setInterpolator(new FastOutSlowInInterpolator()) .start(); 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 5af6c2fb..a123ef39 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 @@ -1,24 +1,70 @@ package com.stardust.scriptdroid.ui.main.community; +import android.app.Activity; +import android.content.Context; 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; +import android.webkit.WebView; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.ui.main.ViewPagerFragment; +import com.stardust.util.BackPressedHandler; +import com.stardust.widget.EWebView; + +import org.androidannotations.annotations.AfterViews; +import org.androidannotations.annotations.EFragment; +import org.androidannotations.annotations.ViewById; /** * Created by Stardust on 2017/8/22. */ +@EFragment(R.layout.fragment_community) +public class CommunityFragment extends ViewPagerFragment implements BackPressedHandler { -public class CommunityFragment extends ViewPagerFragment { + + @ViewById(R.id.eweb_view) + EWebView mEWebView; + WebView mWebView; public CommunityFragment() { super(0); } + @Override + public void onAttach(Context context) { + super.onAttach(context); + ((BackPressedHandler.HostActivity) getActivity()) + .getBackPressedObserver() + .registerHandler(this); + } + + @AfterViews + void setUpViews() { + mWebView = mEWebView.getWebView(); + mWebView.loadUrl("http://39.108.231.37/"); + } + + @Override + public void onDetach() { + super.onDetach(); + ((BackPressedHandler.HostActivity) getActivity()) + .getBackPressedObserver() + .unregisterHandler(this); + } + + @Override + public boolean onBackPressed(Activity activity) { + if (mWebView.canGoBack()) { + mWebView.goBack(); + return true; + } + return false; + } + + @Override protected void onFabClick(FloatingActionButton fab) { 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 deleted file mode 100644 index 6bf0ab33..00000000 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/MyScriptListFragment.java +++ /dev/null @@ -1,157 +0,0 @@ -package com.stardust.scriptdroid.ui.main.script_list; - -import android.support.annotation.NonNull; -import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.Snackbar; -import android.support.v4.app.Fragment; -import android.support.v4.view.ViewPager; -import android.support.v4.view.animation.FastOutSlowInInterpolator; -import android.view.View; - -import com.afollestad.materialdialogs.DialogAction; -import com.afollestad.materialdialogs.MaterialDialog; -import com.stardust.pio.PFile; -import com.stardust.scriptdroid.R; -import com.stardust.scriptdroid.script.ScriptFile; -import com.stardust.scriptdroid.script.Scripts; -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; -import org.androidannotations.annotations.EFragment; -import org.androidannotations.annotations.ViewById; -import org.reactivestreams.Publisher; -import org.reactivestreams.Subscriber; - -import butterknife.OnClick; -import butterknife.Optional; -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.functions.Consumer; -import io.reactivex.schedulers.Schedulers; - -/** - * Created by Stardust on 2017/3/13. - */ -@EFragment(R.layout.fragment_my_script_list) -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; - - private ScriptFile mSelectedScriptFile; - - - @AfterViews - void setUpViews() { - } - - - public static ScriptFile getCurrentDirectory() { - return sCurrentDirectory; - } - - - private void notifyScriptFileChanged() { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - StorageFileProvider.getDefault().notifyDirectoryChanged(getCurrentDirectory()); - } - }); - } - - @Optional - @OnClick(R.id.loop) - void runScriptRepeatedly() { - new ScriptLoopDialog(getActivity(), mSelectedScriptFile) - .show(); - } - - @Optional - @OnClick(R.id.rename) - void renameScriptFile() { - } - - - @Optional - @OnClick(R.id.open_by_other_apps) - void openByOtherApps() { - Scripts.openByOtherApps(mSelectedScriptFile); - onScriptFileOperated(); - } - - private void onScriptFileOperated() { - mSelectedScriptFile = null; - - } - - @Optional - @OnClick(R.id.create_shortcut) - void createShortcut() { - Scripts.createShortcut(mSelectedScriptFile); - Snackbar.make(getView(), R.string.text_already_create, Snackbar.LENGTH_SHORT).show(); - onScriptFileOperated(); - } - - @Optional - @OnClick(R.id.delete) - void deleteScriptFile() { - new MaterialDialog.Builder(getActivity()) - .title(R.string.delete_confirm) - .positiveText(R.string.cancel) - .negativeText(R.string.ok) - .onNegative(new MaterialDialog.SingleButtonCallback() { - @Override - public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { - doDeletingScriptFile(); - } - }) - .show(); - } - - private void doDeletingScriptFile() { - Observable.fromPublisher(new Publisher() { - @Override - public void subscribe(Subscriber s) { - s.onNext(PFile.deleteRecursively(mSelectedScriptFile)); - } - }).subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { - @Override - public void accept(@io.reactivex.annotations.NonNull Boolean deleted) throws Exception { - showMessage(deleted ? R.string.text_already_delete : R.string.text_delete_failed); - notifyScriptFileChanged(); - onScriptFileOperated(); - } - }); - } - - private void showMessage(final int resId) { - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - Snackbar.make(getView(), resId, Snackbar.LENGTH_SHORT).show(); - } - }); - } - - - @Override - protected void onFabClick(FloatingActionButton fab) { - new NewFileDialogBuilder(getContext()) - .show(); - } -} 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 new file mode 100644 index 00000000..fa60a1ed --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/MyScriptListFragment.java @@ -0,0 +1,69 @@ +package com.stardust.scriptdroid.ui.main.scripts; + +import android.support.annotation.NonNull; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; +import android.view.View; + +import com.afollestad.materialdialogs.DialogAction; +import com.afollestad.materialdialogs.MaterialDialog; +import com.stardust.pio.PFile; +import com.stardust.scriptdroid.R; +import com.stardust.scriptdroid.script.ScriptFile; +import com.stardust.scriptdroid.script.Scripts; +import com.stardust.scriptdroid.script.StorageFileProvider; +import com.stardust.scriptdroid.ui.common.ScriptLoopDialog; +import com.stardust.scriptdroid.ui.main.NewFileDialogBuilder; +import com.stardust.scriptdroid.ui.main.ViewPagerFragment; + +import org.androidannotations.annotations.AfterViews; +import org.androidannotations.annotations.EFragment; +import org.androidannotations.annotations.ViewById; +import org.reactivestreams.Publisher; +import org.reactivestreams.Subscriber; + +import butterknife.OnClick; +import butterknife.Optional; +import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.functions.Consumer; +import io.reactivex.schedulers.Schedulers; + +/** + * Created by Stardust on 2017/3/13. + */ +@EFragment(R.layout.fragment_my_script_list) +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; + + @AfterViews + void setUpViews() { + mScriptFileList.setOnScriptFileClickListener(new ScriptListView.OnScriptFileClickListener() { + @Override + public void onScriptFileClick(View view, ScriptFile file) { + Scripts.edit(file); + } + }); + } + + + public static ScriptFile getCurrentDirectory() { + return sCurrentDirectory; + } + + @Override + protected void onFabClick(FloatingActionButton fab) { + new NewFileDialogBuilder(getContext()) + .show(); + } +} 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/scripts/ScriptFileChooserDialogBuilder.java similarity index 97% rename from app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptFileChooserDialogBuilder.java rename to app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptFileChooserDialogBuilder.java index 3f6e8375..e2ce7520 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/scripts/ScriptFileChooserDialogBuilder.java @@ -1,4 +1,4 @@ -package com.stardust.scriptdroid.ui.main.script_list; +package com.stardust.scriptdroid.ui.main.scripts; import android.content.Context; import android.support.annotation.NonNull; diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListRecyclerView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListRecyclerView.java similarity index 98% rename from app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListRecyclerView.java rename to app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListRecyclerView.java index 9d421fb7..168f7bd6 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListRecyclerView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListRecyclerView.java @@ -1,4 +1,4 @@ -package com.stardust.scriptdroid.ui.main.script_list; +package com.stardust.scriptdroid.ui.main.scripts; import android.content.Context; import android.os.Bundle; @@ -27,12 +27,9 @@ import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; -import org.reactivestreams.Publisher; -import org.reactivestreams.Subscriber; import java.util.List; -import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.annotations.NonNull; import io.reactivex.functions.Consumer; diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListView.java similarity index 80% rename from app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListView.java rename to app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListView.java index 473b5e34..8c340d2f 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListView.java @@ -1,4 +1,4 @@ -package com.stardust.scriptdroid.ui.main.script_list; +package com.stardust.scriptdroid.ui.main.scripts; import android.content.Context; import android.graphics.drawable.GradientDrawable; @@ -8,21 +8,22 @@ import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.PopupMenu; import android.widget.TextView; -import com.stardust.autojs.script.AutoFileSource; import com.stardust.pio.PFile; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.script.ScriptFile; import com.stardust.scriptdroid.script.Scripts; 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.widget.BindableViewHolder; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.ArrayList; import butterknife.BindView; @@ -35,7 +36,8 @@ import io.reactivex.schedulers.Schedulers; * Created by Stardust on 2017/8/21. */ -public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLayout.OnRefreshListener { +public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLayout.OnRefreshListener, PopupMenu.OnMenuItemClickListener { + public interface OnScriptFileClickListener { void onScriptFileClick(View view, ScriptFile file); @@ -47,6 +49,7 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa private ArrayList mDirectories = new ArrayList<>(); private ScriptFile mCurrentDirectory; private OnScriptFileClickListener mOnScriptFileClickListener; + private ScriptFile mSelectedScriptFile; public ScriptListView(Context context) { super(context); @@ -127,6 +130,35 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa loadScriptList(); } + @Override + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case R.id.rename: + new ScriptOperations(getContext(), this) + .rename(mSelectedScriptFile) + .subscribe(); + break; + case R.id.delete: + new ScriptOperations(getContext(), this) + .delete(mSelectedScriptFile); + break; + case R.id.run_repeatedly: + new ScriptLoopDialog(getContext(), mSelectedScriptFile) + .show(); + break; + case R.id.create_shortcut: + new ScriptOperations(getContext(), this) + .createShortcut(mSelectedScriptFile); + break; + case R.id.open_by_other_apps: + Scripts.openByOtherApps(mSelectedScriptFile); + break; + default: + return false; + } + return true; + } + private class ScriptListAdapter extends RecyclerView.Adapter { private final int VIEW_TYPE_FILE = 0; @@ -188,6 +220,10 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa TextView mFirstChar; @BindView(R.id.desc) TextView mDesc; + @BindView(R.id.more) + View mOptions; + @BindView(R.id.edit) + View mEdit; GradientDrawable mFirstCharBackground; private ScriptFile mScriptFile; @@ -205,9 +241,11 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa if (file.getType() == ScriptFile.TYPE_JAVA_SCRIPT) { mFirstChar.setText("J"); mFirstCharBackground.setColor(getResources().getColor(R.color.color_j)); + mEdit.setVisibility(VISIBLE); } else { mFirstChar.setText("R"); mFirstCharBackground.setColor(getResources().getColor(R.color.color_r)); + mEdit.setVisibility(GONE); } } @@ -230,7 +268,11 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa @OnClick(R.id.more) void showOptionMenu() { - + mSelectedScriptFile = mScriptFile; + PopupMenu popupMenu = new PopupMenu(getContext(), mOptions); + popupMenu.inflate(R.menu.menu_script_options); + popupMenu.setOnMenuItemClickListener(ScriptListView.this); + popupMenu.show(); } } @@ -238,6 +280,9 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa @BindView(R.id.name) TextView mName; + @BindView(R.id.more) + View mOptions; + private ScriptFile mScriptFile; DirectoryViewHolder(View itemView) { @@ -258,7 +303,11 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa @OnClick(R.id.more) void showOptionMenu() { - + mSelectedScriptFile = mScriptFile; + PopupMenu popupMenu = new PopupMenu(getContext(), mOptions); + popupMenu.inflate(R.menu.menu_dir_options); + popupMenu.setOnMenuItemClickListener(ScriptListView.this); + popupMenu.show(); } } @@ -276,5 +325,6 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa 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/ScriptListWithProgressBarView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListWithProgressBarView.java similarity index 98% rename from app/src/main/java/com/stardust/scriptdroid/ui/main/script_list/ScriptListWithProgressBarView.java rename to app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListWithProgressBarView.java index be77bc11..05b106a9 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/scripts/ScriptListWithProgressBarView.java @@ -1,4 +1,4 @@ -package com.stardust.scriptdroid.ui.main.script_list; +package com.stardust.scriptdroid.ui.main.scripts; import android.content.Context; import android.os.Build; 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 1222b448..792bf3c5 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 @@ -14,6 +14,7 @@ import com.stardust.scriptdroid.ui.error.IssueReporterActivity; import com.stardust.scriptdroid.ui.splash.SplashActivity; import com.stardust.scriptdroid.ui.splash.SplashActivity_; import com.stardust.scriptdroid.ui.update.UpdateCheckDialog; +import com.stardust.theme.preference.ThemeColorPreferenceFragment; import com.stardust.util.IntentUtil; import com.stardust.util.MapEntries; import com.stardust.scriptdroid.R; @@ -82,7 +83,7 @@ public class SettingsActivity extends BaseActivity { } - public static class PreferenceFragment extends android.preference.PreferenceFragment { + public static class PreferenceFragment extends ThemeColorPreferenceFragment { private Map ACTION_MAP; diff --git a/app/src/main/res/drawable/pref_divider.xml b/app/src/main/res/drawable/pref_divider.xml new file mode 100644 index 00000000..069afdab --- /dev/null +++ b/app/src/main/res/drawable/pref_divider.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index b603494e..d03e0e7b 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -53,99 +53,6 @@ app:layout_anchorGravity="bottom|right|end" app:layout_behavior="com.stardust.widget.ScrollAwareFABBehavior"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/activity_script_widget_settings.xml b/app/src/main/res/layout/activity_script_widget_settings.xml index 0112221c..67aeb07e 100644 --- a/app/src/main/res/layout/activity_script_widget_settings.xml +++ b/app/src/main/res/layout/activity_script_widget_settings.xml @@ -24,7 +24,7 @@ - @@ -24,5 +25,6 @@ + android:layout_height="match_parent" + android:background="@android:color/white"/> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_tasker_edit.xml b/app/src/main/res/layout/activity_tasker_edit.xml index b346515a..4b23be43 100644 --- a/app/src/main/res/layout/activity_tasker_edit.xml +++ b/app/src/main/res/layout/activity_tasker_edit.xml @@ -49,7 +49,7 @@ android:textSize="16sp"/> - + \ No newline at end of file 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 03f1e40e..e0310e23 100644 --- a/app/src/main/res/layout/fragment_my_script_list.xml +++ b/app/src/main/res/layout/fragment_my_script_list.xml @@ -4,7 +4,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - diff --git a/app/src/main/res/layout/preference_category_custom.xml b/app/src/main/res/layout/preference_category_custom.xml new file mode 100644 index 00000000..9f10b0af --- /dev/null +++ b/app/src/main/res/layout/preference_category_custom.xml @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/preference_custom.xml b/app/src/main/res/layout/preference_custom.xml new file mode 100644 index 00000000..eaf07f2b --- /dev/null +++ b/app/src/main/res/layout/preference_custom.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + \ 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 358eb56d..a9433723 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_file.xml b/app/src/main/res/layout/script_file_list_file.xml index 8a877d60..c4b811f2 100644 --- a/app/src/main/res/layout/script_file_list_file.xml +++ b/app/src/main/res/layout/script_file_list_file.xml @@ -67,16 +67,15 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_script_options.xml b/app/src/main/res/menu/menu_script_options.xml new file mode 100644 index 00000000..b4176a5d --- /dev/null +++ b/app/src/main/res/menu/menu_script_options.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index fc709093..7349fbb0 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,4 +7,6 @@ #eef2f3f9 #FD999A #99CC99 + #9DA0A2 + #282C2F diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 51189956..1a0883bd 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -20,6 +20,14 @@ false + + +