i don't know what I did

This commit is contained in:
hyb1996
2017-09-11 13:42:07 +08:00
parent 56920cd707
commit a64a92276c
34 changed files with 499 additions and 408 deletions

View File

@@ -74,7 +74,9 @@
<activity android:name=".ui.help.DocumentationActivity"/> <activity android:name=".ui.help.DocumentationActivity"/>
<activity android:name=".ui.help.HelpCatalogueActivity"/> <activity android:name=".ui.help.HelpCatalogueActivity"/>
<activity android:name=".ui.settings.AboutActivity_"/> <activity android:name=".ui.settings.AboutActivity_"/>
<activity android:name=".ui.settings.SettingsActivity_"/> <activity
android:name=".ui.settings.SettingsActivity_"
android:theme="@style/AppTheme.Settings"/>
<activity android:name=".ui.console.LogActivity_"/> <activity android:name=".ui.console.LogActivity_"/>
<activity android:name=".ui.error.ErrorReportActivity"/> <activity android:name=".ui.error.ErrorReportActivity"/>
<activity android:name=".ui.help.LocalWebViewActivity"/> <activity android:name=".ui.help.LocalWebViewActivity"/>

View File

@@ -18,8 +18,8 @@ import com.stardust.scriptdroid.script.Scripts;
import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.scriptdroid.script.StorageFileProvider;
import com.stardust.scriptdroid.ui.common.ScriptLoopDialog; import com.stardust.scriptdroid.ui.common.ScriptLoopDialog;
import com.stardust.scriptdroid.ui.edit.EditActivity; import com.stardust.scriptdroid.ui.edit.EditActivity;
import com.stardust.scriptdroid.ui.main.script_list.ScriptListRecyclerView; import com.stardust.scriptdroid.ui.main.scripts.ScriptListRecyclerView;
import com.stardust.scriptdroid.ui.main.script_list.ScriptListWithProgressBarView; import com.stardust.scriptdroid.ui.main.scripts.ScriptListWithProgressBarView;
import com.stardust.widget.ViewHolderSupplier; import com.stardust.widget.ViewHolderSupplier;
import io.mattcarroll.hover.Navigator; import io.mattcarroll.hover.Navigator;

View File

@@ -13,8 +13,8 @@ import com.stardust.scriptdroid.external.CommonUtils;
import com.stardust.scriptdroid.script.ScriptFile; import com.stardust.scriptdroid.script.ScriptFile;
import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.scriptdroid.script.StorageFileProvider;
import com.stardust.scriptdroid.ui.BaseActivity; import com.stardust.scriptdroid.ui.BaseActivity;
import com.stardust.scriptdroid.ui.main.script_list.ScriptListRecyclerView; import com.stardust.scriptdroid.ui.main.scripts.ScriptListRecyclerView;
import com.stardust.scriptdroid.ui.main.script_list.ScriptListWithProgressBarView; import com.stardust.scriptdroid.ui.main.scripts.ScriptListWithProgressBarView;
import com.twofortyfouram.locale.sdk.client.ui.activity.AbstractAppCompatPluginActivity; import com.twofortyfouram.locale.sdk.client.ui.activity.AbstractAppCompatPluginActivity;
import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.AfterViews;

View File

@@ -11,8 +11,8 @@ import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.script.ScriptFile; import com.stardust.scriptdroid.script.ScriptFile;
import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.scriptdroid.script.StorageFileProvider;
import com.stardust.scriptdroid.ui.BaseActivity; import com.stardust.scriptdroid.ui.BaseActivity;
import com.stardust.scriptdroid.ui.main.script_list.ScriptListRecyclerView; import com.stardust.scriptdroid.ui.main.scripts.ScriptListRecyclerView;
import com.stardust.scriptdroid.ui.main.script_list.ScriptListWithProgressBarView; import com.stardust.scriptdroid.ui.main.scripts.ScriptListWithProgressBarView;
import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.EActivity;

View File

@@ -21,14 +21,18 @@ import com.stardust.scriptdroid.script.ScriptFile;
import com.stardust.scriptdroid.script.Scripts; import com.stardust.scriptdroid.script.Scripts;
import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.scriptdroid.script.StorageFileProvider;
import com.stardust.scriptdroid.script.sample.Sample; 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 com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
import org.reactivestreams.Publisher;
import org.reactivestreams.Subscriber;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer; import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function; import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
@@ -157,17 +161,18 @@ public class ScriptOperations {
private void showMessage(final int resId) { private void showMessage(final int resId) {
if (Looper.myLooper() == Looper.getMainLooper()) { if (Looper.myLooper() == Looper.getMainLooper()) {
showMessageDirectly(resId); showMessageWithoutThreadSwitch(resId);
} }
//switch to ui thread to show message
App.getApp().getUiHandler().post(new Runnable() { App.getApp().getUiHandler().post(new Runnable() {
@Override @Override
public void run() { public void run() {
showMessageDirectly(resId); showMessageWithoutThreadSwitch(resId);
} }
}); });
} }
private void showMessageDirectly(int resId) { private void showMessageWithoutThreadSwitch(int resId) {
if (mView != null) { if (mView != null) {
Snackbar.make(mView, resId, Snackbar.LENGTH_SHORT).show(); Snackbar.make(mView, resId, Snackbar.LENGTH_SHORT).show();
} else { } 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<Boolean>() {
@Override
public void subscribe(Subscriber<? super Boolean> s) {
s.onNext(PFile.deleteRecursively(scriptFile));
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Boolean>() {
@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 class InputCallback implements MaterialDialog.InputCallback {
private String mExcluded; private String mExcluded;

View File

@@ -1,8 +1,6 @@
package com.stardust.scriptdroid.ui.main; package com.stardust.scriptdroid.ui.main;
import android.Manifest; import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
@@ -15,8 +13,6 @@ import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.view.Gravity; import android.view.Gravity;
import android.view.View; import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.MaterialDialog;
@@ -31,35 +27,26 @@ import com.stardust.scriptdroid.Pref;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.autojs.AutoJs; import com.stardust.scriptdroid.autojs.AutoJs;
import com.stardust.scriptdroid.external.floatingwindow.HoverMenuManger; import com.stardust.scriptdroid.external.floatingwindow.HoverMenuManger;
import com.stardust.scriptdroid.script.ScriptFile;
import com.stardust.scriptdroid.script.StorageFileProvider; 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.community.CommunityFragment_;
import com.stardust.scriptdroid.ui.main.doc.OnlineDocsFragment_; import com.stardust.scriptdroid.ui.main.doc.OnlineDocsFragment_;
import com.stardust.scriptdroid.ui.main.drawer.DrawerFragment; import com.stardust.scriptdroid.ui.main.scripts.MyScriptListFragment_;
import com.stardust.scriptdroid.ui.main.script_list.MyScriptListFragment_;
import com.stardust.scriptdroid.ui.main.task.TaskManagerFragment_; import com.stardust.scriptdroid.ui.main.task.TaskManagerFragment_;
import com.stardust.theme.ThemeColorManager; import com.stardust.theme.ThemeColorManager;
import com.stardust.theme.ThemeColorManagerCompat;
import com.stardust.util.DeveloperUtils; import com.stardust.util.DeveloperUtils;
import com.stardust.scriptdroid.tool.AccessibilityServiceTool; import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
import com.stardust.scriptdroid.tool.DrawableSaver;
import com.stardust.scriptdroid.ui.BaseActivity; 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.settings.SettingsActivity_;
import com.stardust.scriptdroid.ui.update.VersionGuard; import com.stardust.scriptdroid.ui.update.VersionGuard;
import com.stardust.util.BackPressedHandler; import com.stardust.util.BackPressedHandler;
import com.stardust.util.MessageEvent;
import com.stardust.view.DrawerAutoClose; import com.stardust.view.DrawerAutoClose;
import com.stardust.widget.CommonMarkdownView; import com.stardust.widget.CommonMarkdownView;
import com.stardust.widget.SlidingUpPanel;
import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click; import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById; import org.androidannotations.annotations.ViewById;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@EActivity(R.layout.activity_main) @EActivity(R.layout.activity_main)
public class MainActivity extends BaseActivity implements OnActivityResultDelegate.DelegateHost { public class MainActivity extends BaseActivity implements OnActivityResultDelegate.DelegateHost {
@@ -68,10 +55,10 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
@ViewById(R.id.drawer_layout) @ViewById(R.id.drawer_layout)
DrawerLayout mDrawerLayout; DrawerLayout mDrawerLayout;
@ViewById(R.id.bottom_menu)
SlidingUpPanel mAddBottomMenuPanel;
@ViewById(R.id.viewpager) @ViewById(R.id.viewpager)
ViewPager mViewPager; ViewPager mViewPager;
@ViewById(R.id.fab) @ViewById(R.id.fab)
FloatingActionButton mFab; FloatingActionButton mFab;
@@ -92,7 +79,8 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
void setUpViews() { void setUpViews() {
setUpToolbar(); setUpToolbar();
setUpTabViewPager(); 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(); registerBackPressHandlers();
ThemeColorManager.addViewBackground(findViewById(R.id.app_bar)); ThemeColorManager.addViewBackground(findViewById(R.id.app_bar));
} }
@@ -112,16 +100,6 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
private void registerBackPressHandlers() { 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 DrawerAutoClose(mDrawerLayout, Gravity.START));
registerBackPressedHandler(new BackPressedHandler.DoublePressExit(this, R.string.text_press_again_to_exit)); 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() { private void showAccessibilitySettingPromptIfDisabled() {
if (!AccessibilityServiceTool.isAccessibilityServiceEnabled(this)) { if (AccessibilityServiceTool.isAccessibilityServiceEnabled(this)) {
new NotAskAgainDialog.Builder(this, "Eating...love you...miss you...17.4.12") return;
.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();
} }
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() { private void setUpToolbar() {
@@ -162,11 +141,15 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
mPagerAdapter = new FragmentPagerAdapterBuilder(this) mPagerAdapter = new FragmentPagerAdapterBuilder(this)
.add(new MyScriptListFragment_(), R.string.text_script) .add(new MyScriptListFragment_(), R.string.text_script)
.add(new OnlineDocsFragment_(), R.string.text_tutorial) .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) .add(new TaskManagerFragment_(), R.string.text_manage)
.build(); .build();
mViewPager.setAdapter(mPagerAdapter); mViewPager.setAdapter(mPagerAdapter);
tabLayout.setupWithViewPager(mViewPager); tabLayout.setupWithViewPager(mViewPager);
setUpViewPagerFragmentBehaviors();
}
private void setUpViewPagerFragmentBehaviors() {
mPagerAdapter.setOnFragmentInstantiateListener(new FragmentPagerAdapterBuilder.OnFragmentInstantiateListener() { mPagerAdapter.setOnFragmentInstantiateListener(new FragmentPagerAdapterBuilder.OnFragmentInstantiateListener() {
@Override @Override
public void OnInstantiate(int pos, Fragment fragment) { 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) @Click(R.id.setting)
void startSettingActivity() { void startSettingActivity() {
startActivity(new Intent(this, SettingsActivity_.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); startActivity(new Intent(this, SettingsActivity_.class));
} }
@Click(R.id.exit) @Click(R.id.exit)
@@ -247,6 +187,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
//not working
stopService(new Intent(this, DownloadService.class)); stopService(new Intent(this, DownloadService.class));
} }

View File

@@ -1,20 +1,14 @@
package com.stardust.scriptdroid.ui.main; package com.stardust.scriptdroid.ui.main;
import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.support.annotation.IdRes;
import android.view.View; 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.github.aakira.expandablelayout.ExpandableRelativeLayout;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder; import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnCheckedChanged;
import butterknife.OnClick; import butterknife.OnClick;
/** /**

View File

@@ -1,11 +1,7 @@
package com.stardust.scriptdroid.ui.main; 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.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.view.animation.FastOutSlowInInterpolator; import android.support.v4.view.animation.FastOutSlowInInterpolator;
import android.view.View; import android.view.View;
@@ -17,7 +13,7 @@ public abstract class ViewPagerFragment extends Fragment {
protected static final int ROTATION_GONE = -1; protected static final int ROTATION_GONE = -1;
private int mRotation; private int mFabRotation;
private FloatingActionButton mFab; private FloatingActionButton mFab;
private View.OnClickListener mOnFabClickListener = new View.OnClickListener() { private View.OnClickListener mOnFabClickListener = new View.OnClickListener() {
@Override @Override
@@ -26,8 +22,8 @@ public abstract class ViewPagerFragment extends Fragment {
} }
}; };
public ViewPagerFragment(int rotation) { public ViewPagerFragment(int fabRotation) {
mRotation = rotation; mFabRotation = fabRotation;
} }
public void setFab(FloatingActionButton fab) { public void setFab(FloatingActionButton fab) {
@@ -37,7 +33,7 @@ public abstract class ViewPagerFragment extends Fragment {
protected abstract void onFabClick(FloatingActionButton fab); protected abstract void onFabClick(FloatingActionButton fab);
public void onPageSelected() { public void onPageSelected() {
if (mRotation == ROTATION_GONE) { if (mFabRotation == ROTATION_GONE) {
if (mFab.getVisibility() == View.VISIBLE) { if (mFab.getVisibility() == View.VISIBLE) {
mFab.hide(); mFab.hide();
} }
@@ -46,11 +42,11 @@ public abstract class ViewPagerFragment extends Fragment {
} }
mFab.setOnClickListener(mOnFabClickListener); mFab.setOnClickListener(mOnFabClickListener);
if (mFab.getVisibility() != View.VISIBLE) { if (mFab.getVisibility() != View.VISIBLE) {
mFab.setRotation(mRotation); mFab.setRotation(mFabRotation);
mFab.show(); mFab.show();
} else if (Math.abs(mFab.getRotation() - mRotation) > 0.1f) { } else if (Math.abs(mFab.getRotation() - mFabRotation) > 0.1f) {
mFab.animate() mFab.animate()
.rotation(mRotation) .rotation(mFabRotation)
.setDuration(300) .setDuration(300)
.setInterpolator(new FastOutSlowInInterpolator()) .setInterpolator(new FastOutSlowInInterpolator())
.start(); .start();

View File

@@ -1,24 +1,70 @@
package com.stardust.scriptdroid.ui.main.community; package com.stardust.scriptdroid.ui.main.community;
import android.app.Activity;
import android.content.Context;
import android.support.design.widget.FloatingActionButton; import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager;
import android.support.v4.view.animation.FastOutSlowInInterpolator; import android.support.v4.view.animation.FastOutSlowInInterpolator;
import android.view.View; import android.view.View;
import android.webkit.WebView;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.ui.main.ViewPagerFragment; 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. * 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() { public CommunityFragment() {
super(0); 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 @Override
protected void onFabClick(FloatingActionButton fab) { protected void onFabClick(FloatingActionButton fab) {

View File

@@ -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<Boolean>() {
@Override
public void subscribe(Subscriber<? super Boolean> s) {
s.onNext(PFile.deleteRecursively(mSelectedScriptFile));
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Boolean>() {
@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();
}
}

View File

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

View File

@@ -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.content.Context;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;

View File

@@ -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.content.Context;
import android.os.Bundle; import android.os.Bundle;
@@ -27,12 +27,9 @@ import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration;
import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode; import org.greenrobot.eventbus.ThreadMode;
import org.reactivestreams.Publisher;
import org.reactivestreams.Subscriber;
import java.util.List; import java.util.List;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull; import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Consumer; import io.reactivex.functions.Consumer;

View File

@@ -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.content.Context;
import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable;
@@ -8,21 +8,22 @@ import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.PopupMenu;
import android.widget.TextView; import android.widget.TextView;
import com.stardust.autojs.script.AutoFileSource;
import com.stardust.pio.PFile; import com.stardust.pio.PFile;
import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.script.ScriptFile; import com.stardust.scriptdroid.script.ScriptFile;
import com.stardust.scriptdroid.script.Scripts; import com.stardust.scriptdroid.script.Scripts;
import com.stardust.scriptdroid.script.StorageFileProvider; import com.stardust.scriptdroid.script.StorageFileProvider;
import com.stardust.scriptdroid.tool.SimpleObserver; 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 com.stardust.widget.BindableViewHolder;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import butterknife.BindView; import butterknife.BindView;
@@ -35,7 +36,8 @@ import io.reactivex.schedulers.Schedulers;
* Created by Stardust on 2017/8/21. * 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 { public interface OnScriptFileClickListener {
void onScriptFileClick(View view, ScriptFile file); void onScriptFileClick(View view, ScriptFile file);
@@ -47,6 +49,7 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
private ArrayList<ScriptFile> mDirectories = new ArrayList<>(); private ArrayList<ScriptFile> mDirectories = new ArrayList<>();
private ScriptFile mCurrentDirectory; private ScriptFile mCurrentDirectory;
private OnScriptFileClickListener mOnScriptFileClickListener; private OnScriptFileClickListener mOnScriptFileClickListener;
private ScriptFile mSelectedScriptFile;
public ScriptListView(Context context) { public ScriptListView(Context context) {
super(context); super(context);
@@ -127,6 +130,35 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
loadScriptList(); 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<RecyclerView.ViewHolder> { private class ScriptListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final int VIEW_TYPE_FILE = 0; private final int VIEW_TYPE_FILE = 0;
@@ -188,6 +220,10 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
TextView mFirstChar; TextView mFirstChar;
@BindView(R.id.desc) @BindView(R.id.desc)
TextView mDesc; TextView mDesc;
@BindView(R.id.more)
View mOptions;
@BindView(R.id.edit)
View mEdit;
GradientDrawable mFirstCharBackground; GradientDrawable mFirstCharBackground;
private ScriptFile mScriptFile; private ScriptFile mScriptFile;
@@ -205,9 +241,11 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
if (file.getType() == ScriptFile.TYPE_JAVA_SCRIPT) { if (file.getType() == ScriptFile.TYPE_JAVA_SCRIPT) {
mFirstChar.setText("J"); mFirstChar.setText("J");
mFirstCharBackground.setColor(getResources().getColor(R.color.color_j)); mFirstCharBackground.setColor(getResources().getColor(R.color.color_j));
mEdit.setVisibility(VISIBLE);
} else { } else {
mFirstChar.setText("R"); mFirstChar.setText("R");
mFirstCharBackground.setColor(getResources().getColor(R.color.color_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) @OnClick(R.id.more)
void showOptionMenu() { 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) @BindView(R.id.name)
TextView mName; TextView mName;
@BindView(R.id.more)
View mOptions;
private ScriptFile mScriptFile; private ScriptFile mScriptFile;
DirectoryViewHolder(View itemView) { DirectoryViewHolder(View itemView) {
@@ -258,7 +303,11 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
@OnClick(R.id.more) @OnClick(R.id.more)
void showOptionMenu() { 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) { public void bind(Boolean isDirCategory, int position) {
mTitle.setText(isDirCategory ? R.string.text_directory : R.string.text_file); mTitle.setText(isDirCategory ? R.string.text_directory : R.string.text_file);
} }
} }
} }

View File

@@ -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.content.Context;
import android.os.Build; import android.os.Build;

View File

@@ -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.splash.SplashActivity_; import com.stardust.scriptdroid.ui.splash.SplashActivity_;
import com.stardust.scriptdroid.ui.update.UpdateCheckDialog; import com.stardust.scriptdroid.ui.update.UpdateCheckDialog;
import com.stardust.theme.preference.ThemeColorPreferenceFragment;
import com.stardust.util.IntentUtil; import com.stardust.util.IntentUtil;
import com.stardust.util.MapEntries; import com.stardust.util.MapEntries;
import com.stardust.scriptdroid.R; 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<String, Runnable> ACTION_MAP; private Map<String, Runnable> ACTION_MAP;

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:left="12dp">
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<size
android:width="100dp"
android:height="0.9dp"/>
<solid android:color="#f3f5f9"/>
</shape>
</item>
</layer-list>

View File

@@ -53,99 +53,6 @@
app:layout_anchorGravity="bottom|right|end" app:layout_anchorGravity="bottom|right|end"
app:layout_behavior="com.stardust.widget.ScrollAwareFABBehavior"/> app:layout_behavior="com.stardust.widget.ScrollAwareFABBehavior"/>
<com.stardust.widget.SlidingUpPanel
android:id="@+id/bottom_menu"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="160dp"
android:background="@android:color/white"
android:baselineAligned="false"
android:gravity="center"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/create_new_file"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="?attr/selectableItemBackgroundBorderless"
android:gravity="center"
android:orientation="vertical">
<com.stardust.theme.widget.ThemeColorImageViewCompat
android:layout_width="60dp"
android:layout_height="60dp"
android:padding="10dp"
android:src="@drawable/ic_add_file"/>
<com.stardust.theme.widget.ThemeColorTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/text_new_file"
android:textColor="@color/colorPrimary"
android:textSize="16sp"/>
</LinearLayout>
<LinearLayout
android:id="@+id/create_new_directory"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="?attr/selectableItemBackgroundBorderless"
android:gravity="center"
android:orientation="vertical">
<com.stardust.theme.widget.ThemeColorImageViewCompat
android:layout_width="60dp"
android:layout_height="60dp"
android:padding="10dp"
android:src="@drawable/ic_new_directory"/>
<com.stardust.theme.widget.ThemeColorTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/text_new_directory"
android:textColor="@color/colorPrimary"
android:textSize="16sp"/>
</LinearLayout>
<LinearLayout
android:id="@+id/import_from_file"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="?attr/selectableItemBackgroundBorderless"
android:gravity="center"
android:orientation="vertical">
<com.stardust.theme.widget.ThemeColorImageViewCompat
android:layout_width="60dp"
android:layout_height="60dp"
android:padding="10dp"
android:src="@drawable/ic_import"/>
<com.stardust.theme.widget.ThemeColorTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/text_import_from_file"
android:textColor="@color/colorPrimary"
android:textSize="16sp"/>
</LinearLayout>
</LinearLayout>
</com.stardust.widget.SlidingUpPanel>
</android.support.design.widget.CoordinatorLayout> </android.support.design.widget.CoordinatorLayout>

View File

@@ -24,7 +24,7 @@
</com.stardust.theme.widget.ThemeColorToolbar> </com.stardust.theme.widget.ThemeColorToolbar>
</android.support.design.widget.AppBarLayout> </android.support.design.widget.AppBarLayout>
<com.stardust.scriptdroid.ui.main.script_list.ScriptListWithProgressBarView <com.stardust.scriptdroid.ui.main.scripts.ScriptListWithProgressBarView
android:id="@+id/script_list" android:id="@+id/script_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"

View File

@@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@android:color/white"
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
android:orientation="vertical"> android:orientation="vertical">
@@ -24,5 +25,6 @@
<FrameLayout <FrameLayout
android:id="@+id/fragment_setting" android:id="@+id/fragment_setting"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"/> android:layout_height="match_parent"
android:background="@android:color/white"/>
</LinearLayout> </LinearLayout>

View File

@@ -49,7 +49,7 @@
android:textSize="16sp"/> android:textSize="16sp"/>
</LinearLayout> </LinearLayout>
<com.stardust.scriptdroid.ui.main.script_list.ScriptListWithProgressBarView <com.stardust.scriptdroid.ui.main.scripts.ScriptListWithProgressBarView
android:id="@+id/script_list" android:id="@+id/script_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<com.stardust.widget.EWebView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/eweb_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

View File

@@ -4,7 +4,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<com.stardust.scriptdroid.ui.main.script_list.ScriptListView <com.stardust.scriptdroid.ui.main.scripts.ScriptListView
android:id="@+id/script_file_list" android:id="@+id/script_file_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+android:id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingBottom="8dp"
android:paddingLeft="12dp"
android:paddingTop="8dp"
android:textColor="?attr/colorPrimary"
android:textSize="13sp"
tools:text="目录"/>
</LinearLayout>

View File

@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:gravity="center_vertical"
android:minHeight="52dp"
android:orientation="horizontal"
android:paddingEnd="?android:attr/scrollbarSize"
android:paddingRight="?android:attr/scrollbarSize"
tools:ignore="RtlSymmetry,UnusedAttribute">
<ImageView
android:id="@android:id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="@dimen/md_preference_content_inset"
android:layout_marginStart="@dimen/md_preference_content_inset"
tools:ignore="ContentDescription"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="left|start|center_vertical"
android:layout_marginBottom="12dip"
android:layout_marginEnd="6dip"
android:layout_marginLeft="12dp"
android:layout_marginRight="6dip"
android:layout_marginStart="12dp"
android:layout_marginTop="12dip"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:fontFamily="sans-serif"
android:maxLines="1"
android:textColor="?android:textColorPrimary"
android:textSize="15sp"
tools:text="Title"/>
<TextView
android:id="@android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:fontFamily="sans-serif"
android:maxLines="4"
android:textColor="?android:textColorSecondary"
android:textSize="12sp"
tools:text=""/>
</LinearLayout>
<!-- Preference should place its actual preference widget here. -->
<LinearLayout
android:id="@android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="end|right|center_vertical"
android:gravity="center_vertical"
android:orientation="vertical"/>
</LinearLayout>

View File

@@ -8,7 +8,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<com.stardust.scriptdroid.ui.main.script_list.ScriptListRecyclerView <com.stardust.scriptdroid.ui.main.scripts.ScriptListRecyclerView
android:id="@+id/script_list_recycler_view" android:id="@+id/script_list_recycler_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"/> android:layout_height="match_parent"/>

View File

@@ -67,16 +67,15 @@
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="108dp" android:layout_width="wrap_content"
android:layout_height="34dp" android:layout_height="34dp"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView
android:id="@+id/run" android:id="@+id/run"
android:layout_width="0dp" android:layout_width="34dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1"
android:background="?selectableItemBackgroundBorderless" android:background="?selectableItemBackgroundBorderless"
android:clickable="true" android:clickable="true"
android:paddingBottom="8dp" android:paddingBottom="8dp"
@@ -86,9 +85,8 @@
<ImageView <ImageView
android:id="@+id/edit" android:id="@+id/edit"
android:layout_width="0dp" android:layout_width="34dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1"
android:background="?selectableItemBackgroundBorderless" android:background="?selectableItemBackgroundBorderless"
android:clickable="true" android:clickable="true"
android:paddingBottom="8dp" android:paddingBottom="8dp"
@@ -98,9 +96,8 @@
<ImageView <ImageView
android:id="@+id/more" android:id="@+id/more"
android:layout_width="0dp" android:layout_width="24dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1"
android:background="?selectableItemBackgroundBorderless" android:background="?selectableItemBackgroundBorderless"
android:clickable="true" android:clickable="true"
android:paddingBottom="8dp" android:paddingBottom="8dp"

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/rename"
android:title="@string/text_rename"/>
<item
android:id="@+id/delete"
android:title="@string/text_delete"/>
</menu>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/run_repeatedly"
android:title="@string/text_run_repeatedly"/>
<item
android:id="@+id/rename"
android:title="@string/text_rename"/>
<item
android:id="@+id/delete"
android:title="@string/text_delete"/>
<item
android:id="@+id/create_shortcut"
android:title="@string/text_send_shortcut"/>
<item
android:id="@+id/open_by_other_apps"
android:title="@string/text_open_by_other_apps"/>
</menu>

View File

@@ -7,4 +7,6 @@
<color name="bubble_bg">#eef2f3f9</color> <color name="bubble_bg">#eef2f3f9</color>
<color name="color_r">#FD999A</color> <color name="color_r">#FD999A</color>
<color name="color_j">#99CC99</color> <color name="color_j">#99CC99</color>
<color name="prefTextColorSecondary">#9DA0A2</color>
<color name="prefTextColorPrimary">#282C2F</color>
</resources> </resources>

View File

@@ -20,6 +20,14 @@
<item name="windowActionBar">false</item> <item name="windowActionBar">false</item>
</style> </style>
<style name="AppTheme.Settings" parent="AppTheme">
<item name="android:dividerHeight">6dp</item>
<item name="android:listDivider">@drawable/pref_divider</item>
<item name="android:textColorPrimary">@color/prefTextColorPrimary</item>
<item name="android:textColorSecondary">@color/prefTextColorSecondary</item>
</style>
<style name="AppTheme.Transparent" parent="AppTheme"> <style name="AppTheme.Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item> <item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item>

View File

@@ -1,22 +1,30 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:widgetLayout="@layout/preference_custom">
<com.stardust.theme.preference.ThemeColorPreferenceCategory
android:layout="@layout/preference_category_custom"
android:title="@string/text_script_record"
android:widgetLayout="@layout/preference_custom">
<com.stardust.theme.preference.ThemeColorPreferenceCategory android:title="@string/text_script_record">
<com.stardust.theme.preference.ThemeColorSwitchPreference <com.stardust.theme.preference.ThemeColorSwitchPreference
android:defaultValue="false" android:defaultValue="false"
android:key="@string/key_use_volume_control_record" android:key="@string/key_use_volume_control_record"
android:layout="@layout/preference_custom"
android:summary="@string/summary_use_volume_control_record" android:summary="@string/summary_use_volume_control_record"
android:title="@string/text_use_volume_control_record"/> android:title="@string/text_use_volume_control_record"/>
<com.stardust.theme.preference.ThemeColorSwitchPreference <com.stardust.theme.preference.ThemeColorSwitchPreference
android:defaultValue="false" android:defaultValue="false"
android:key="@string/key_record_with_root" android:key="@string/key_record_with_root"
android:layout="@layout/preference_custom"
android:title="@string/text_record_with_root"/> android:title="@string/text_record_with_root"/>
<com.stardust.theme.preference.ThemeColorSwitchPreference <com.stardust.theme.preference.ThemeColorSwitchPreference
android:defaultValue="true" android:defaultValue="true"
android:key="@string/key_record_toast" android:key="@string/key_record_toast"
android:layout="@layout/preference_custom"
android:title="@string/text_record_msg"/> android:title="@string/text_record_msg"/>
<com.afollestad.materialdialogs.prefs.MaterialListPreference <com.afollestad.materialdialogs.prefs.MaterialListPreference
@@ -24,76 +32,119 @@
android:entries="@array/root_record_out_file_type_keys" android:entries="@array/root_record_out_file_type_keys"
android:entryValues="@array/root_record_out_file_type_values" android:entryValues="@array/root_record_out_file_type_values"
android:key="@string/key_root_record_out_file_type" android:key="@string/key_root_record_out_file_type"
android:layout="@layout/preference_custom"
android:title="@string/text_root_record_out_file_type" android:title="@string/text_root_record_out_file_type"
/> />
</com.stardust.theme.preference.ThemeColorPreferenceCategory> </com.stardust.theme.preference.ThemeColorPreferenceCategory>
<com.stardust.theme.preference.ThemeColorPreferenceCategory android:title="@string/text_script_running"> <com.stardust.theme.preference.ThemeColorPreferenceCategory
android:layout="@layout/preference_category_custom"
android:title="@string/text_script_running">
<com.stardust.theme.preference.ThemeColorSwitchPreference <com.stardust.theme.preference.ThemeColorSwitchPreference
android:defaultValue="false" android:defaultValue="false"
android:key="@string/key_use_volume_control_running" android:key="@string/key_use_volume_control_running"
android:layout="@layout/preference_custom"
android:title="@string/text_use_volume_to_stop_running"/> android:title="@string/text_use_volume_to_stop_running"/>
<com.stardust.theme.preference.ThemeColorSwitchPreference <com.stardust.theme.preference.ThemeColorSwitchPreference
android:defaultValue="false" android:defaultValue="false"
android:key="@string/key_guard_mode" android:key="@string/key_guard_mode"
android:layout="@layout/preference_custom"
android:summary="@string/summary_guard_mode" android:summary="@string/summary_guard_mode"
android:title="@string/text_guard_mode"/> android:title="@string/text_guard_mode"/>
</com.stardust.theme.preference.ThemeColorPreferenceCategory> </com.stardust.theme.preference.ThemeColorPreferenceCategory>
<com.stardust.theme.preference.ThemeColorPreferenceCategory android:title="@string/text_edit"> <com.stardust.theme.preference.ThemeColorPreferenceCategory
android:layout="@layout/preference_category_custom"
android:title="@string/text_edit">
<com.afollestad.materialdialogs.prefs.MaterialEditTextPreference <com.afollestad.materialdialogs.prefs.MaterialEditTextPreference
android:defaultValue="2000" android:defaultValue="2000"
android:inputType="number" android:inputType="number"
android:key="@string/key_max_length_for_code_completion" android:key="@string/key_max_length_for_code_completion"
android:layout="@layout/preference_custom"
android:title="@string/text_max_length_for_code_completion"/> android:title="@string/text_max_length_for_code_completion"/>
</com.stardust.theme.preference.ThemeColorPreferenceCategory> </com.stardust.theme.preference.ThemeColorPreferenceCategory>
<com.stardust.theme.preference.ThemeColorPreferenceCategory android:title="@string/text_accessibility_service"> <com.stardust.theme.preference.ThemeColorPreferenceCategory
android:layout="@layout/preference_category_custom"
android:title="@string/text_accessibility_service">
<com.stardust.theme.preference.ThemeColorSwitchPreference <com.stardust.theme.preference.ThemeColorSwitchPreference
android:defaultValue="false" android:defaultValue="false"
android:key="@string/key_enable_accessibility_service_by_root" android:key="@string/key_enable_accessibility_service_by_root"
android:layout="@layout/preference_custom"
android:summary="@string/summary_enable_accessibility_service_by_root" android:summary="@string/summary_enable_accessibility_service_by_root"
android:title="@string/text_enable_accessibility_service_by_root"/> android:title="@string/text_enable_accessibility_service_by_root"/>
<com.stardust.theme.preference.ThemeColorSwitchPreference <com.stardust.theme.preference.ThemeColorSwitchPreference
android:defaultValue="false" android:defaultValue="false"
android:key="@string/key_stable_mode" android:key="@string/key_stable_mode"
android:layout="@layout/preference_custom"
android:summary="@string/summary_stable_mode" android:summary="@string/summary_stable_mode"
android:title="@string/text_stable_mode"/> android:title="@string/text_stable_mode"/>
</com.stardust.theme.preference.ThemeColorPreferenceCategory> </com.stardust.theme.preference.ThemeColorPreferenceCategory>
<com.stardust.theme.preference.ThemeColorPreferenceCategory android:title="@string/text_appearance"> <com.stardust.theme.preference.ThemeColorPreferenceCategory
<Preference android:title="@string/text_theme_color"/> android:layout="@layout/preference_category_custom"
<Preference android:title="@string/text_reset_background"/> android:title="@string/text_appearance">
<Preference
android:layout="@layout/preference_custom"
android:title="@string/text_theme_color"
/>
<Preference
android:layout="@layout/preference_custom"
android:title="@string/text_reset_background"
/>
</com.stardust.theme.preference.ThemeColorPreferenceCategory> </com.stardust.theme.preference.ThemeColorPreferenceCategory>
<com.stardust.theme.preference.ThemeColorPreferenceCategory android:title="@string/text_ad"> <com.stardust.theme.preference.ThemeColorPreferenceCategory
<Preference android:title="@string/show_ad"/> android:layout="@layout/preference_category_custom"
android:title="@string/text_ad">
<Preference
android:layout="@layout/preference_custom"
android:title="@string/show_ad"
/>
<com.afollestad.materialdialogs.prefs.MaterialListPreference <com.afollestad.materialdialogs.prefs.MaterialListPreference
android:defaultValue="@string/text_default" android:defaultValue="@string/text_default"
android:entries="@array/ad_showing_mode_keys" android:entries="@array/ad_showing_mode_keys"
android:entryValues="@array/ad_showing_mode_values" android:entryValues="@array/ad_showing_mode_values"
android:key="@string/key_ad_showing_mode" android:key="@string/key_ad_showing_mode"
android:layout="@layout/preference_custom"
android:title="@string/text_ad_showing_settings" android:title="@string/text_ad_showing_settings"
/> />
</com.stardust.theme.preference.ThemeColorPreferenceCategory> </com.stardust.theme.preference.ThemeColorPreferenceCategory>
<com.stardust.theme.preference.ThemeColorPreferenceCategory android:title="@string/text_about"> <com.stardust.theme.preference.ThemeColorPreferenceCategory
android:layout="@layout/preference_category_custom"
android:title="@string/text_about">
<Preference android:title="@string/text_check_for_updates"/> <Preference
android:layout="@layout/preference_custom"
android:title="@string/text_check_for_updates"
/>
<Preference android:title="@string/text_join_qq_group"/> <Preference
android:layout="@layout/preference_custom"
android:title="@string/text_join_qq_group"
/>
<Preference android:title="@string/text_issue_report"/> <Preference
android:layout="@layout/preference_custom"
android:title="@string/text_issue_report"
/>
<Preference android:title="@string/text_about_me_and_repo"/> <Preference
android:layout="@layout/preference_custom"
android:title="@string/text_about_me_and_repo"
/>
<Preference android:title="@string/text_licenses"/> <Preference
android:layout="@layout/preference_custom"
android:title="@string/text_licenses"
/>
</com.stardust.theme.preference.ThemeColorPreferenceCategory> </com.stardust.theme.preference.ThemeColorPreferenceCategory>
</PreferenceScreen> </PreferenceScreen>

View File

@@ -214,12 +214,23 @@ public class ScriptRuntime {
} }
public void setClip(final String text) { public void setClip(final String text) {
final Object lock = new Object();
mUiHandler.post(new Runnable() { mUiHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
ClipboardUtil.setClip(mUiHandler.getContext(), text); ClipboardUtil.setClip(mUiHandler.getContext(), text);
synchronized (lock) {
lock.notify();
}
} }
}); });
synchronized (lock) {
try {
lock.wait();
} catch (InterruptedException e) {
throw new ScriptInterruptedException();
}
}
} }
public String getClip() { public String getClip() {

View File

@@ -165,7 +165,7 @@ public class StardustConsole extends AbstractConsole {
if (!mShown) { if (!mShown) {
show(); show();
} }
waitConsoleView(); waitForConsoleView();
} }
mConsoleView.showEditText(); mConsoleView.showEditText();
try { try {
@@ -175,7 +175,7 @@ public class StardustConsole extends AbstractConsole {
} }
} }
private void waitConsoleView() { private void waitForConsoleView() {
synchronized (this) { synchronized (this) {
try { try {
this.wait(); this.wait();