add: new ui for file creating

This commit is contained in:
hyb1996
2017-08-25 15:53:31 +08:00
parent 5d6e66d5d5
commit 56920cd707
17 changed files with 309 additions and 350 deletions

View File

@@ -17,7 +17,7 @@ import java.util.List;
public class FragmentPagerAdapterBuilder {
public interface OnFragmentInstantiateListener {
void OnInstantiate(Fragment fragment);
void OnInstantiate(int pos, Fragment fragment);
}
private List<Fragment> mFragments = new ArrayList<>();
@@ -71,7 +71,7 @@ public class FragmentPagerAdapterBuilder {
Fragment fragment = (Fragment) super.instantiateItem(container, position);
mStoredFragments.put(position, fragment);
if(mOnFragmentInstantiateListener != null){
mOnFragmentInstantiateListener.OnInstantiate(fragment);
mOnFragmentInstantiateListener.OnInstantiate(position, fragment);
}
return fragment;
}

View File

@@ -39,6 +39,8 @@ 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.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;
@@ -92,6 +94,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
setUpTabViewPager();
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
registerBackPressHandlers();
ThemeColorManager.addViewBackground(findViewById(R.id.app_bar));
}
private void showAnnunciationIfNeeded() {
@@ -164,13 +167,22 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
.build();
mViewPager.setAdapter(mPagerAdapter);
tabLayout.setupWithViewPager(mViewPager);
mPagerAdapter.setOnFragmentInstantiateListener(new FragmentPagerAdapterBuilder.OnFragmentInstantiateListener() {
@Override
public void OnInstantiate(int pos, Fragment fragment) {
((ViewPagerFragment) fragment).setFab(mFab);
if (pos == mViewPager.getCurrentItem()) {
((ViewPagerFragment) fragment).onPageSelected();
}
}
});
mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
Fragment fragment = mPagerAdapter.getStoredFragment(position);
if (fragment == null)
return;
((ViewPagerFragment) fragment).setUpWithFab(mViewPager, mFab);
((ViewPagerFragment) fragment).onPageSelected();
}
});
}

View File

@@ -0,0 +1,70 @@
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;
/**
* Created by Stardust on 2017/8/25.
*/
public class NewFileDialogBuilder extends ThemeColorMaterialDialogBuilder {
@BindView(R.id.layout_new_file)
ExpandableRelativeLayout mLayoutNewFile;
@BindView(R.id.layout_import)
ExpandableRelativeLayout mLayoutImport;
ExpandableRelativeLayout mExpandedLayout;
public NewFileDialogBuilder(Context context) {
super(context);
View view = View.inflate(context, R.layout.new_file_dialog, null);
customView(view, true);
title(R.string.text_new);
positiveText(R.string.ok);
negativeText(R.string.cancel);
ButterKnife.bind(this, view);
mExpandedLayout = mLayoutNewFile;
}
@OnClick(R.id.option_new_file)
void expandLayoutNewFile() {
if (mExpandedLayout != mLayoutNewFile) {
if(mExpandedLayout != null){
mExpandedLayout.collapse();
}
mLayoutNewFile.expand();
mExpandedLayout = mLayoutNewFile;
}
}
@OnClick(R.id.option_import)
void expandLayoutImport() {
if (mExpandedLayout != mLayoutImport) {
if(mExpandedLayout != null){
mExpandedLayout.collapse();
}
mLayoutImport.expand();
mExpandedLayout = mLayoutImport;
}
}
}

View File

@@ -1,14 +1,61 @@
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;
/**
* Created by Stardust on 2017/8/22.
*/
public interface ViewPagerFragment {
public abstract class ViewPagerFragment extends Fragment {
protected static final int ROTATION_GONE = -1;
private int mRotation;
private FloatingActionButton mFab;
private View.OnClickListener mOnFabClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
onFabClick((FloatingActionButton) v);
}
};
public ViewPagerFragment(int rotation) {
mRotation = rotation;
}
public void setFab(FloatingActionButton fab) {
mFab = fab;
}
protected abstract void onFabClick(FloatingActionButton fab);
public void onPageSelected() {
if (mRotation == ROTATION_GONE) {
if (mFab.getVisibility() == View.VISIBLE) {
mFab.hide();
}
mFab.setOnClickListener(null);
return;
}
mFab.setOnClickListener(mOnFabClickListener);
if (mFab.getVisibility() != View.VISIBLE) {
mFab.setRotation(mRotation);
mFab.show();
} else if (Math.abs(mFab.getRotation() - mRotation) > 0.1f) {
mFab.animate()
.rotation(mRotation)
.setDuration(300)
.setInterpolator(new FastOutSlowInInterpolator())
.start();
}
}
void setUpWithFab(ViewPager pager, FloatingActionButton fab);
}

View File

@@ -13,17 +13,14 @@ import com.stardust.scriptdroid.ui.main.ViewPagerFragment;
* Created by Stardust on 2017/8/22.
*/
public class CommunityFragment extends Fragment implements ViewPagerFragment {
public class CommunityFragment extends ViewPagerFragment {
public CommunityFragment() {
super(0);
}
@Override
public void setUpWithFab(ViewPager pager, FloatingActionButton fab) {
if (fab.getVisibility() != View.VISIBLE) {
fab.show();
return;
}
fab.animate()
.rotation(0)
.setDuration(300)
.setInterpolator(new FastOutSlowInInterpolator())
.start();
protected void onFabClick(FloatingActionButton fab) {
}
}

View File

@@ -21,12 +21,17 @@ import org.androidannotations.annotations.ViewById;
* Created by Stardust on 2017/8/22.
*/
@EFragment(R.layout.fragment_online_docs)
public class OnlineDocsFragment extends Fragment implements BackPressedHandler, ViewPagerFragment {
public class OnlineDocsFragment extends ViewPagerFragment implements BackPressedHandler {
@ViewById(R.id.eweb_view)
EWebView mEWebView;
WebView mWebView;
public OnlineDocsFragment() {
super(ROTATION_GONE);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
@@ -59,9 +64,7 @@ public class OnlineDocsFragment extends Fragment implements BackPressedHandler,
}
@Override
public void setUpWithFab(ViewPager pager, FloatingActionButton fab) {
if (fab.getVisibility() == View.VISIBLE) {
fab.hide();
}
protected void onFabClick(FloatingActionButton fab) {
}
}

View File

@@ -6,6 +6,7 @@ import android.support.annotation.Nullable;
import android.support.v7.widget.SwitchCompat;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.Toast;
@@ -17,6 +18,7 @@ import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.external.floatingwindow.HoverMenuManger;
import com.stardust.scriptdroid.external.floatingwindow.menu.HoverMenuService;
import com.stardust.scriptdroid.ui.common.ProgressDialog;
import com.stardust.theme.ThemeColorManager;
import com.stardust.view.accessibility.AccessibilityService;
import com.stardust.scriptdroid.sublime.SublimePluginClient;
import com.stardust.scriptdroid.sublime.SublimePluginService;
@@ -25,6 +27,7 @@ import com.stardust.scriptdroid.tool.WifiTool;
import com.stardust.util.IntentUtil;
import com.stardust.util.UnderuseExecutors;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.CheckedChange;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EFragment;
@@ -45,8 +48,11 @@ public class DrawerFragment extends android.support.v4.app.Fragment {
SwitchCompat mAccessibilityServiceSwitch;
SwitchCompat mFloatingWindowSwitch;
SwitchCompat mDebugSwitch;
@ViewById(R.id.header)
View mHeaderView;
private Executor mExecutor = UnderuseExecutors.getExecutor();
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -59,6 +65,11 @@ public class DrawerFragment extends android.support.v4.app.Fragment {
//syncSwitchState();
}
@AfterViews
void setUpViews(){
ThemeColorManager.addViewBackground(mHeaderView);
}
private void syncSwitchState() {
mAccessibilityServiceSwitch.postDelayed(new Runnable() {

View File

@@ -1,79 +0,0 @@
package com.stardust.scriptdroid.ui.main.sample_list;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.afollestad.materialdialogs.MaterialDialog;
import com.stardust.app.Fragment;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.script.Scripts;
import com.stardust.scriptdroid.script.sample.Sample;
import com.stardust.scriptdroid.script.sample.SampleFileManager;
import com.stardust.scriptdroid.ui.common.ScriptOperations;
import com.stardust.scriptdroid.ui.edit.ViewSampleActivity;
import com.stardust.scriptdroid.ui.main.MainActivity;
/**
* Created by Stardust on 2017/3/13.
*/
public class SampleScriptListFragment extends Fragment {
@Nullable
@Override
public View createView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_sample_script_list, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
SampleScriptListRecyclerView sampleScriptListRecyclerView = $(R.id.script_list);
sampleScriptListRecyclerView.setSamples(SampleFileManager.getInstance().getSamplesFromAssets(getContext().getAssets(), "sample"));
sampleScriptListRecyclerView.setOnItemLongClickListener(new SampleScriptListRecyclerView.OnItemLongClickListener() {
@Override
public void onItemLongClick(Sample sample) {
showMenuDialog(sample);
}
});
sampleScriptListRecyclerView.setOnItemClickListener(new SampleScriptListRecyclerView.OnItemClickListener() {
@Override
public void onItemClick(Sample sample) {
viewSample(sample);
}
});
}
private void showMenuDialog(final Sample sample) {
new MaterialDialog.Builder(getActivity())
.title(sample.name)
.items(getString(R.string.text_run), getString(R.string.text_copy_to_my_scripts))
.itemsCallback(new MaterialDialog.ListCallback() {
@Override
public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
if (position == 0) {
Scripts.run(getActivity(), sample);
} else {
copySampleToMyScripts(sample);
}
}
})
.show();
}
private void copySampleToMyScripts(Sample sample) {
new ScriptOperations(getActivity(), getView())
.importSample(sample)
.subscribe();
}
private void viewSample(Sample sample) {
ViewSampleActivity.view(getContext(), sample);
}
}

View File

@@ -1,190 +0,0 @@
package com.stardust.scriptdroid.ui.main.sample_list;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.workground.WrapContentLinearLayoutManager;
import com.bignerdranch.expandablerecyclerview.ChildViewHolder;
import com.bignerdranch.expandablerecyclerview.ExpandableRecyclerAdapter;
import com.bignerdranch.expandablerecyclerview.ParentViewHolder;
import com.bignerdranch.expandablerecyclerview.model.Parent;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.script.sample.Sample;
import com.stardust.widget.LevelBeamView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Stardust on 2017/3/13.
*/
public class SampleScriptListRecyclerView extends RecyclerView {
public interface OnItemLongClickListener {
void onItemLongClick(Sample sample);
}
public interface OnItemClickListener {
void onItemClick(Sample sample);
}
private OnClickListener mOnItemClickListenerProxy = new OnClickListener() {
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
SampleViewHolder viewHolder = (SampleViewHolder) getChildViewHolder(v);
mOnItemClickListener.onItemClick(viewHolder.getChild());
}
}
};
private OnLongClickListener mOnLongClickListenerProxy = new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (mOnItemLongClickListener != null) {
SampleViewHolder viewHolder = (SampleViewHolder) getChildViewHolder(v);
mOnItemLongClickListener.onItemLongClick(viewHolder.getChild());
return true;
}
return false;
}
};
private OnItemLongClickListener mOnItemLongClickListener;
private OnItemClickListener mOnItemClickListener;
private Adapter mAdapter;
private List<SampleGroup> mSampleGroups = new ArrayList<>();
public SampleScriptListRecyclerView(Context context) {
super(context);
init();
}
public SampleScriptListRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public SampleScriptListRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
mOnItemLongClickListener = onItemLongClickListener;
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
public void setSamples(List<com.stardust.scriptdroid.script.sample.SampleGroup> samples) {
mSampleGroups.clear();
for (com.stardust.scriptdroid.script.sample.SampleGroup sampleGroup : samples) {
mSampleGroups.add(new SampleGroup(sampleGroup));
}
mAdapter = new Adapter(mSampleGroups);
setAdapter(mAdapter);
}
private void init() {
setLayoutManager(new WrapContentLinearLayoutManager(getContext()));
addItemDecoration(new DividerItemDecoration(getContext(), VERTICAL));
}
private class SampleGroup implements Parent<Sample> {
private com.stardust.scriptdroid.script.sample.SampleGroup mSampleGroup;
SampleGroup(com.stardust.scriptdroid.script.sample.SampleGroup sampleGroup) {
mSampleGroup = sampleGroup;
}
String getGroupName() {
return mSampleGroup.name;
}
@Override
public List<Sample> getChildList() {
return mSampleGroup.sampleList;
}
@Override
public boolean isInitiallyExpanded() {
return false;
}
}
private class SampleViewHolder extends ChildViewHolder<Sample> {
TextView name;
SampleViewHolder(@NonNull View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name);
((LevelBeamView) itemView.findViewById(R.id.level)).setLevel(2);
itemView.setOnClickListener(mOnItemClickListenerProxy);
itemView.setOnLongClickListener(mOnLongClickListenerProxy);
}
void bind(Sample sample) {
name.setText(sample.name);
}
}
private class SampleGroupViewHolder extends ParentViewHolder<SampleGroup, Sample> {
TextView name;
SampleGroupViewHolder(@NonNull View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name);
((LevelBeamView) itemView.findViewById(R.id.level)).setLevel(0);
}
void bind(SampleGroup group) {
name.setText(group.getGroupName());
}
}
private class Adapter extends ExpandableRecyclerAdapter<SampleGroup, Sample, SampleGroupViewHolder, SampleViewHolder> {
public Adapter(@NonNull List<SampleGroup> parentList) {
super(parentList);
}
@NonNull
@Override
public SampleGroupViewHolder onCreateParentViewHolder(@NonNull ViewGroup parentViewGroup, int viewType) {
View view = LayoutInflater.from(getContext()).inflate(R.layout.sample_recycler_view_group, parentViewGroup, false);
return new SampleGroupViewHolder(view);
}
@NonNull
@Override
public SampleViewHolder onCreateChildViewHolder(@NonNull ViewGroup childViewGroup, int viewType) {
View view = LayoutInflater.from(getContext()).inflate(R.layout.sample_recycler_view_item, childViewGroup, false);
return new SampleViewHolder(view);
}
@Override
public void onBindParentViewHolder(@NonNull SampleGroupViewHolder parentViewHolder, int parentPosition, @NonNull SampleGroup parent) {
parentViewHolder.bind(parent);
}
@Override
public void onBindChildViewHolder(@NonNull SampleViewHolder childViewHolder, int parentPosition, int childPosition, @NonNull Sample child) {
childViewHolder.bind(child);
}
}
}

View File

@@ -17,6 +17,7 @@ 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;
@@ -36,12 +37,16 @@ import io.reactivex.schedulers.Schedulers;
* Created by Stardust on 2017/3/13.
*/
@EFragment(R.layout.fragment_my_script_list)
public class MyScriptListFragment extends Fragment implements ViewPagerFragment {
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;
@@ -145,15 +150,8 @@ public class MyScriptListFragment extends Fragment implements ViewPagerFragment
@Override
public void setUpWithFab(ViewPager pager, FloatingActionButton fab) {
if (fab.getVisibility() != View.VISIBLE) {
fab.show();
return;
}
fab.animate()
.rotation(0)
.setDuration(300)
.setInterpolator(new FastOutSlowInInterpolator())
.start();
protected void onFabClick(FloatingActionButton fab) {
new NewFileDialogBuilder(getContext())
.show();
}
}

View File

@@ -33,7 +33,7 @@ import butterknife.OnClick;
* Created by Stardust on 2017/3/24.
*/
@EFragment(R.layout.fragment_task_manager)
public class TaskManagerFragment extends Fragment implements PopupMenu.OnMenuItemClickListener, ViewPagerFragment {
public class TaskManagerFragment extends ViewPagerFragment implements PopupMenu.OnMenuItemClickListener {
@ViewById(R.id.task_list)
TaskListRecyclerView mTaskListRecyclerView;
@@ -56,18 +56,9 @@ public class TaskManagerFragment extends Fragment implements PopupMenu.OnMenuIte
@ViewById(R.id.spinner_current_item)
TextView mSpinnerCurrentItem;
private FloatingActionButton mFab;
private View.OnClickListener mOnFabClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mLogView.getVisibility() == View.VISIBLE) {
Console.clear();
} else {
AutoJs.getInstance().getScriptEngineService().stopAll();
}
}
};
public TaskManagerFragment() {
super(45);
}
@AfterViews
@@ -140,35 +131,13 @@ public class TaskManagerFragment extends Fragment implements PopupMenu.OnMenuIte
mSpinnerCurrentItem.setText(R.string.text_task_manage);
}
@Override
public void setUpWithFab(ViewPager pager, final FloatingActionButton fab) {
mFab = fab;
fab.setOnClickListener(mOnFabClickListener);
if (fab.getVisibility() != View.VISIBLE) {
fab.show();
return;
}
fab.animate()
.rotation(45)
.setDuration(300)
.setInterpolator(new FastOutSlowInInterpolator())
.start();
}
@Override
public void onPause() {
super.onPause();
if (mFab != null) {
mFab.setOnClickListener(null);
}
}
@Override
public void onResume() {
super.onResume();
if (mFab != null) {
mFab.setOnClickListener(mOnFabClickListener);
protected void onFabClick(FloatingActionButton fab) {
if (mLogView.getVisibility() == View.VISIBLE) {
Console.clear();
} else {
AutoJs.getInstance().getScriptEngineService().stopAll();
}
}
}

View File

@@ -52,9 +52,8 @@ public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefres
WebSettings settings = mWebView.getSettings();
settings.setUseWideViewPort(true);
settings.setBuiltInZoomControls(true);
settings.setSupportZoom(true);
settings.setLoadWithOverviewMode(true);
settings.setJavaScriptEnabled(true);
//settings.setJavaScriptEnabled(true);
mWebView.setWebViewClient(new MyWebViewClient());
mWebView.setWebChromeClient(new MyWebChromeClient());
}