Java tutorial
/* * Copyright 2016. SHENQINCI(?)<946736079@qq.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ren.qinc.markdowneditors.view; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.support.annotation.NonNull; import android.support.design.widget.TextInputLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPager; import android.support.v7.app.AlertDialog; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import java.io.File; import butterknife.Bind; import ren.qinc.markdowneditors.R; import ren.qinc.markdowneditors.base.BaseApplication; import ren.qinc.markdowneditors.base.BaseToolbarActivity; import ren.qinc.markdowneditors.event.RxEvent; import ren.qinc.markdowneditors.event.RxEventBus; import ren.qinc.markdowneditors.lib.ExpandableLinearLayout; import ren.qinc.markdowneditors.presenter.IEditorActivityView; import ren.qinc.markdowneditors.utils.Check; import ren.qinc.markdowneditors.utils.FileUtils; import ren.qinc.markdowneditors.utils.SystemBarUtils; import ren.qinc.markdowneditors.utils.Toast; import ren.qinc.markdowneditors.widget.TabIconView; public class EditorActivity extends BaseToolbarActivity implements IEditorActivityView, View.OnClickListener { public static final String SHARED_ELEMENT_NAME = "SHARED_ELEMENT_NAME"; public static final String SHARED_ELEMENT_COLOR_NAME = "SHARED_ELEMENT_COLOR_NAME"; private static final String SCHEME_FILE = "file"; private static final String SCHEME_Folder = "folder"; @Bind(R.id.pager) protected ViewPager mViewPager; private EditorFragment mEditorFragment; private EditorMarkdownFragment mEditorMarkdownFragment; private String currentFilePath; @Bind(R.id.action_other_operate) protected ExpandableLinearLayout mExpandLayout; private String mName; private TabIconView mTabIconView; @Override public int getLayoutId() { return R.layout.activity_editor; } @Override public void onCreateAfter(Bundle savedInstanceState) { ViewCompat.setTransitionName(mViewPager, SHARED_ELEMENT_NAME); // ViewCompat.setTransitionName(mViewPager, SHARED_ELEMENT_COLOR_NAME); // mExpandLayout = (ExpandableLinearLayout) getLayoutInflater().inflate(R.layout.view_edit_operate, getAppBar(), false); // getAppBar().addView(mExpandLayout); getIntentData(); mEditorFragment = EditorFragment.getInstance(currentFilePath); mEditorMarkdownFragment = EditorMarkdownFragment.getInstance(); initViewPager(); initTab(); } private void initViewPager() { mViewPager.setAdapter(new EditFragmentAdapter(getSupportFragmentManager())); mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { // if (position == 0) getToolbar().setTitle(""); else if (mName != null) getToolbar().setTitle(mName); //? if (position == 1) { RxEventBus.getInstance().send(new RxEvent(RxEvent.TYPE_REFRESH_NOTIFY)); } } @Override public void onPageScrollStateChanged(int state) { } }); } @Override protected void initStatusBar() { SystemBarUtils.tintStatusBar(this, getResources().getColor(R.color.colorPrimary)); } private void initTab() { mTabIconView = (TabIconView) findViewById(R.id.tabIconView); mTabIconView.addTab(R.drawable.ic_shortcut_format_list_bulleted, R.id.id_shortcut_list_bulleted, this); mTabIconView.addTab(R.drawable.ic_shortcut_format_list_numbers, R.id.id_shortcut_format_numbers, this); mTabIconView.addTab(R.drawable.ic_shortcut_insert_link, R.id.id_shortcut_insert_link, this); mTabIconView.addTab(R.drawable.ic_shortcut_insert_photo, R.id.id_shortcut_insert_photo, this); mTabIconView.addTab(R.drawable.ic_shortcut_console, R.id.id_shortcut_console, this); mTabIconView.addTab(R.drawable.ic_shortcut_format_bold, R.id.id_shortcut_format_bold, this); mTabIconView.addTab(R.drawable.ic_shortcut_format_italic, R.id.id_shortcut_format_italic, this); mTabIconView.addTab(R.drawable.ic_shortcut_format_header_1, R.id.id_shortcut_format_header_1, this); mTabIconView.addTab(R.drawable.ic_shortcut_format_header_2, R.id.id_shortcut_format_header_2, this); mTabIconView.addTab(R.drawable.ic_shortcut_format_header_3, R.id.id_shortcut_format_header_3, this); mTabIconView.addTab(R.drawable.ic_shortcut_format_quote, R.id.id_shortcut_format_quote, this); mTabIconView.addTab(R.drawable.ic_shortcut_xml, R.id.id_shortcut_xml, this); mTabIconView.addTab(R.drawable.ic_shortcut_minus, R.id.id_shortcut_minus, this); mTabIconView.addTab(R.drawable.ic_shortcut_format_strikethrough, R.id.id_shortcut_format_strikethrough, this); mTabIconView.addTab(R.drawable.ic_shortcut_grid, R.id.id_shortcut_grid, this); mTabIconView.addTab(R.drawable.ic_shortcut_format_header_4, R.id.id_shortcut_format_header_4, this); mTabIconView.addTab(R.drawable.ic_shortcut_format_header_5, R.id.id_shortcut_format_header_5, this); mTabIconView.addTab(R.drawable.ic_shortcut_format_header_6, R.id.id_shortcut_format_header_6, this); } @Override public void otherSuccess(int flag) { } @Override public void onFailure(int errorCode, String message, int flag) { switch (flag) { default: BaseApplication.showSnackbar(getWindow().getDecorView(), message); break; } } @Override public void showWait(String message, boolean canBack, int flag) { super.showWaitDialog(message, canBack); } @Override public void hideWait(int flag) { super.hideWaitDialog(); } @Override public void onNameChange(@NonNull String name) { this.mName = name; } private final int SYSTEM_GALLERY = 1; @Override public void onClick(View v) { if (R.id.id_shortcut_insert_photo == v.getId()) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_PICK);// Pick an item fromthe intent.setType("image/*");// startActivityForResult(intent, SYSTEM_GALLERY); return; } else if (R.id.id_shortcut_insert_link == v.getId()) { //? insertLink(); return; } else if (R.id.id_shortcut_grid == v.getId()) { //? insertTable(); return; } //? mEditorFragment.getPerformEditable().onClick(v); } private class EditFragmentAdapter extends FragmentPagerAdapter { public EditFragmentAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { if (position == 0) { return mEditorFragment; } return mEditorMarkdownFragment; } @Override public int getCount() { return 2; } } @Override public void initData() { } private void getIntentData() { Intent intent = this.getIntent(); int flags = intent.getFlags(); if ((flags & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) { if (intent.getAction() != null && Intent.ACTION_VIEW.equals(intent.getAction())) { if (SCHEME_FILE.equals(intent.getScheme())) { // String type = getIntent().getType(); // mImportingUri=file:///storage/emulated/0/Vlog.xml intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); Uri uri = intent.getData(); if (uri != null && SCHEME_FILE.equalsIgnoreCase(uri.getScheme())) { // currentFilePath = FileUtils.uri2FilePath(getBaseContext(), uri); } } } } } @NonNull @Override protected String getTitleString() { return ""; } @Override protected boolean hasBackButton() { return true; } private MenuItem mActionOtherOperate; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_editor_act, menu); mActionOtherOperate = menu.findItem(R.id.action_other_operate); if (mExpandLayout.isExpanded()) //? mActionOtherOperate.setIcon(R.drawable.ic_arrow_up); else mActionOtherOperate.setIcon(R.drawable.ic_add_white_24dp); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: if (mEditorFragment.onBackPressed()) { return true; } break; case R.id.action_other_operate:// if (!mExpandLayout.isExpanded()) //?? mActionOtherOperate.setIcon(R.drawable.ic_arrow_up); else mActionOtherOperate.setIcon(R.drawable.ic_add_white_24dp); mExpandLayout.toggle(); return true; case R.id.action_preview:// mViewPager.setCurrentItem(1, true); return true; case R.id.action_edit:// mViewPager.setCurrentItem(0, true); return true; case R.id.action_helper: CommonMarkdownActivity.startHelper(this); return true; // case R.id.action_setting:// // return true; } return super.onOptionsItemSelected(item); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) { if (!mExpandLayout.isExpanded()) //?? mActionOtherOperate.setIcon(R.drawable.ic_arrow_up); else mActionOtherOperate.setIcon(R.drawable.ic_add_white_24dp); mExpandLayout.toggle(); return true; } else if (keyCode == KeyEvent.KEYCODE_BACK) { if (mEditorFragment.onBackPressed()) return true; } return super.onKeyDown(keyCode, event); } @Override protected void onPause() { RxEventBus.getInstance().send(new RxEvent(RxEvent.TYPE_REFRESH_FOLDER)); super.onPause(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK && requestCode == SYSTEM_GALLERY) { Uri uri = data.getData(); String[] pojo = { MediaStore.Images.Media.DATA }; Cursor cursor = this.managedQuery(uri, pojo, null, null, null); if (cursor != null) { // ContentResolver cr = this.getContentResolver(); int colunm_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String path = cursor.getString(colunm_index); //?? Uri.fromFile(new File(path));//Uri.decode(imageUri.toString()) mEditorFragment.getPerformEditable().perform(R.id.id_shortcut_insert_photo, Uri.fromFile(new File(path))); } else { Toast.showShort(this, "?"); } } } /** * ? */ private void insertTable() { View rootView = LayoutInflater.from(this).inflate(R.layout.view_common_input_table_view, null); AlertDialog dialog = new AlertDialog.Builder(this).setTitle("?").setView(rootView).show(); TextInputLayout rowNumberHint = (TextInputLayout) rootView.findViewById(R.id.rowNumberHint); TextInputLayout columnNumberHint = (TextInputLayout) rootView.findViewById(R.id.columnNumberHint); EditText rowNumber = (EditText) rootView.findViewById(R.id.rowNumber); EditText columnNumber = (EditText) rootView.findViewById(R.id.columnNumber); rootView.findViewById(R.id.sure).setOnClickListener(v -> { String rowNumberStr = rowNumber.getText().toString().trim(); String columnNumberStr = columnNumber.getText().toString().trim(); if (Check.isEmpty(rowNumberStr)) { rowNumberHint.setError("?"); return; } if (Check.isEmpty(columnNumberStr)) { columnNumberHint.setError("?"); return; } if (rowNumberHint.isErrorEnabled()) rowNumberHint.setErrorEnabled(false); if (columnNumberHint.isErrorEnabled()) columnNumberHint.setErrorEnabled(false); mEditorFragment.getPerformEditable().perform(R.id.id_shortcut_grid, Integer.parseInt(rowNumberStr), Integer.parseInt(columnNumberStr)); dialog.dismiss(); }); rootView.findViewById(R.id.cancel).setOnClickListener(v -> { dialog.dismiss(); }); dialog.show(); } /** * ? */ private void insertLink() { View rootView = LayoutInflater.from(this).inflate(R.layout.view_common_input_link_view, null); AlertDialog dialog = new AlertDialog.Builder(this, R.style.DialogTheme).setTitle("?") .setView(rootView).show(); TextInputLayout titleHint = (TextInputLayout) rootView.findViewById(R.id.inputNameHint); TextInputLayout linkHint = (TextInputLayout) rootView.findViewById(R.id.inputHint); EditText title = (EditText) rootView.findViewById(R.id.name); EditText link = (EditText) rootView.findViewById(R.id.text); rootView.findViewById(R.id.sure).setOnClickListener(v -> { String titleStr = title.getText().toString().trim(); String linkStr = link.getText().toString().trim(); if (Check.isEmpty(titleStr)) { titleHint.setError("?"); return; } if (Check.isEmpty(linkStr)) { linkHint.setError("?"); return; } if (titleHint.isErrorEnabled()) titleHint.setErrorEnabled(false); if (linkHint.isErrorEnabled()) linkHint.setErrorEnabled(false); mEditorFragment.getPerformEditable().perform(R.id.id_shortcut_insert_link, titleStr, linkStr); dialog.dismiss(); }); rootView.findViewById(R.id.cancel).setOnClickListener(v -> { dialog.dismiss(); }); dialog.show(); } }