diff --git a/.idea/misc.xml b/.idea/misc.xml index 8cdb7ebe..13e60141 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index 6d885aad..793741b1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,16 +5,13 @@ android { buildToolsVersion "25.0.2" defaultConfig { applicationId "com.stardust.scriptdroid" - minSdkVersion 24 + minSdkVersion 19 //由于不知道在API24以上如何调起其他文件编辑器应用编辑文件,只能改到API23。FileProvider貌似只能查看编辑后不能保存? //参照ScriptFileOperation.Edit targetSdkVersion 23 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - jackOptions { - enabled true - } } buildTypes { release { @@ -23,10 +20,19 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 encoding = 'utf-8' } + dataBinding { + enabled = true + } +} + +repositories { + flatDir { + dirs 'libs' + } } dependencies { @@ -46,4 +52,21 @@ dependencies { compile files('libs/JSTransformer.jar') + compile 'com.afollestad.material-dialogs:commons:0.9.2.3' + compile 'com.makeramen:roundedimageview:2.2.1' + compile 'com.rengwuxian.materialedittext:library:2.0.3' + compile(name:'920-common-release', ext:'aar'){ + transitive = true + } + compile(name:'920-styles-debug', ext:'aar'){ + transitive = true + } + compile(name:'920-file_explorer-release', ext:'aar'){ + transitive = true + } + compile(name:'920-app-debug', ext:'aar'){ + transitive = true + } + + } diff --git a/app/libs/920-app-debug.aar b/app/libs/920-app-debug.aar new file mode 100644 index 00000000..aa73dbf9 Binary files /dev/null and b/app/libs/920-app-debug.aar differ diff --git a/app/libs/920-common-release.aar b/app/libs/920-common-release.aar new file mode 100644 index 00000000..e5626de0 Binary files /dev/null and b/app/libs/920-common-release.aar differ diff --git a/app/libs/920-file_explorer-release.aar b/app/libs/920-file_explorer-release.aar new file mode 100644 index 00000000..2e65988a Binary files /dev/null and b/app/libs/920-file_explorer-release.aar differ diff --git a/app/libs/920-styles-debug.aar b/app/libs/920-styles-debug.aar new file mode 100644 index 00000000..97afc95b Binary files /dev/null and b/app/libs/920-styles-debug.aar differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c365a792..9385ba85 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -72,6 +72,7 @@ android:resource="@xml/provider_paths"/> + \ No newline at end of file diff --git a/app/src/main/java/com/stardust/scriptdroid/BaseActivity.java b/app/src/main/java/com/stardust/scriptdroid/BaseActivity.java index cef1e52b..a70e306d 100644 --- a/app/src/main/java/com/stardust/scriptdroid/BaseActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/BaseActivity.java @@ -4,6 +4,8 @@ import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.view.View; +import java.util.ArrayList; +import java.util.List; import java.util.stream.Stream; import static android.content.pm.PackageManager.PERMISSION_DENIED; @@ -22,11 +24,20 @@ public class BaseActivity extends AppCompatActivity { protected void checkPermission(String... permissions) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - String[] requestPermissions = Stream.of(permissions).filter(permission -> checkSelfPermission(permission) == PERMISSION_DENIED).toArray(String[]::new); - + String[] requestPermissions = getRequestPermissions(permissions); if (requestPermissions.length > 0) requestPermissions(requestPermissions, 0); } } + private String[] getRequestPermissions(String[] permissions) { + List list = new ArrayList<>(); + for (String permission : permissions) { + if (checkSelfPermission(permission) == PERMISSION_DENIED) { + list.add(permission); + } + } + return list.toArray(new String[list.size()]); + } + } diff --git a/app/src/main/java/com/stardust/scriptdroid/MainActivity.java b/app/src/main/java/com/stardust/scriptdroid/MainActivity.java index 08f65a46..212e35b0 100644 --- a/app/src/main/java/com/stardust/scriptdroid/MainActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/MainActivity.java @@ -1,8 +1,10 @@ package com.stardust.scriptdroid; import android.Manifest; +import android.content.ActivityNotFoundException; import android.content.Intent; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; import android.support.v7.widget.Toolbar; import android.text.InputType; @@ -10,7 +12,9 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; +import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; +import com.jecelyin.editor.v2.core.widget.JecEditText; import com.stardust.scriptdroid.droid.runtime.action.ActionPerformService; import com.stardust.scriptdroid.droid.script.file.ScriptFile; import com.stardust.scriptdroid.droid.script.file.ScriptFileList; @@ -23,8 +27,8 @@ import com.stardust.scriptdroid.ui.SlidingUpPanel; import com.stardust.util.MapEntries; import com.stardust.view.accessibility.AccessibilityServiceUtils; +import java.io.InputStream; import java.util.Map; -import java.util.Optional; public class MainActivity extends BaseActivity { @@ -54,6 +58,7 @@ public class MainActivity extends BaseActivity { private void checkPermissions() { checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE); goToAccessibilityPermissionSettingIfDisabled(); + JecEditText jecEditText = new JecEditText(this); } private void goToAccessibilityPermissionSettingIfDisabled() { @@ -62,19 +67,37 @@ public class MainActivity extends BaseActivity { .content(R.string.explain_accessibility_permission) .positiveText(R.string.text_go_to_setting) .negativeText(R.string.text_cancel) - .onPositive((dialog, which) -> AccessibilityServiceUtils.goToPermissionSetting(this)).show(); + .onPositive(new MaterialDialog.SingleButtonCallback() { + @Override + public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { + AccessibilityServiceUtils.goToPermissionSetting(MainActivity.this); + } + }).show(); } } private void setUpFileChooser() { mFileChooser = new FileChooser(this); - mFileChooser.setOnFileChoseListener(inputStream -> Optional.ofNullable(FileUtils.getPath(inputStream)).ifPresent(this::addScriptFile)); + mFileChooser.setOnFileChoseListener(new FileChooser.OnFileChoseListener() { + @Override + public void onFileChose(InputStream inputStream) { + String path = FileUtils.getPath(inputStream); + if (path != null) { + MainActivity.this.addScriptFile(path); + } + } + }); } private void addScriptFile(final String path) { new MaterialDialog.Builder(this).title(R.string.text_name) .inputType(InputType.TYPE_CLASS_TEXT) - .input(getString(R.string.text_please_input_name), "", (dialog, input) -> addScriptFile(input.toString(), path)).show(); + .input(getString(R.string.text_please_input_name), "", new MaterialDialog.InputCallback() { + @Override + public void onInput(@NonNull MaterialDialog dialog, CharSequence input) { + MainActivity.this.addScriptFile(input.toString(), path); + } + }).show(); } private void addScriptFile(String name, String path) { @@ -107,17 +130,35 @@ public class MainActivity extends BaseActivity { } private void setUpListener() { - $(R.id.fab).setOnClickListener(view -> mSlidingUpPanel.show()); - $(R.id.import_from_file).setOnClickListener(v -> showFileChooser()); - $(R.id.create_new_file).setOnClickListener(v -> createScriptFile()); + $(R.id.fab).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + mSlidingUpPanel.show(); + } + }); + $(R.id.import_from_file).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MainActivity.this.showFileChooser(); + } + }); + $(R.id.create_new_file).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MainActivity.this.createScriptFile(); + } + }); } private void createScriptFile() { new MaterialDialog.Builder(this).title(R.string.text_name) .inputType(InputType.TYPE_CLASS_TEXT) - .input(getString(R.string.text_please_input_name), "", (dialog, input) -> { - String path = ScriptFile.DEFAULT_FOLDER + input + ".js"; - createScriptFile(input.toString(), path); + .input(getString(R.string.text_please_input_name), "", new MaterialDialog.InputCallback() { + @Override + public void onInput(@NonNull MaterialDialog dialog, CharSequence input) { + String path = ScriptFile.DEFAULT_FOLDER + input + ".js"; + MainActivity.this.createScriptFile(input.toString(), path); + } }).show(); } @@ -131,9 +172,12 @@ public class MainActivity extends BaseActivity { } private void showFileChooser() { - mFileChooser.startFileManagerToChoose("*/*", (exception, mimeType) -> { - exception.printStackTrace(); - Snackbar.make(mView, R.string.text_file_manager_not_found, Snackbar.LENGTH_SHORT).show(); + mFileChooser.startFileManagerToChoose("*/*", new FileChooser.FileManagerNotFoundHandler() { + @Override + public void handle(ActivityNotFoundException exception, String mimeType) { + exception.printStackTrace(); + Snackbar.make(mView, R.string.text_file_manager_not_found, Snackbar.LENGTH_SHORT).show(); + } }); } @@ -145,8 +189,24 @@ public class MainActivity extends BaseActivity { private final Map mOptionActionMap = new MapEntries() - .entry(R.id.action_exit, this::finish) - .entry(R.id.action_disable_service, this::disableAccessibilityService) + .entry(R.id.action_exit, new Runnable() { + @Override + public void run() { + MainActivity.this.finish(); + } + }) + .entry(R.id.action_disable_service, new Runnable() { + @Override + public void run() { + MainActivity.this.disableAccessibilityService(); + } + }) + .entry(R.id.action_test, new Runnable() { + @Override + public void run() { + startActivity(new Intent(MainActivity.this, TestActivity.class)); + } + }) .map(); @@ -156,7 +216,9 @@ public class MainActivity extends BaseActivity { } private void disableAccessibilityService() { - Optional.ofNullable(ActionPerformService.getInstance()).ifPresent(ActionPerformService::disableSelf); + if (ActionPerformService.getInstance() != null) { + ActionPerformService.getInstance().disableSelf(); + } Snackbar.make(mView, R.string.text_service_disabled, Snackbar.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/stardust/scriptdroid/ShortcutActivity.java b/app/src/main/java/com/stardust/scriptdroid/ShortcutActivity.java index 3508aed6..e97e3b4f 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ShortcutActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ShortcutActivity.java @@ -22,19 +22,51 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED; */ public class ShortcutActivity extends Activity { + interface BooleanSupplier { + boolean getAsBoolean(); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final String path = getIntent().getStringExtra("path"); - if (!ensure(() -> !TextUtils.isEmpty(path), R.string.text_path_is_empty)) + if (!ensure(new BooleanSupplier() { + @Override + public boolean getAsBoolean() { + return !TextUtils.isEmpty(path); + } + }, R.string.text_path_is_empty)) return; final File scriptFile = new File(path); new Domino() - .then(() -> ensure(scriptFile::exists, R.string.text_file_not_exists)) - .then(() -> ensure(this::hasStorageReadPermission, R.string.text_no_file_rw_permission)) - .then(() -> { - runScriptFile(path); - return true; + .then(new Tile() { + @Override + public boolean fall() { + return ShortcutActivity.this.ensure(new BooleanSupplier() { + @Override + public boolean getAsBoolean() { + return scriptFile.exists(); + } + }, R.string.text_file_not_exists); + } + }) + .then(new Tile() { + @Override + public boolean fall() { + return ShortcutActivity.this.ensure(new BooleanSupplier() { + @Override + public boolean getAsBoolean() { + return ShortcutActivity.this.hasStorageReadPermission(); + } + }, R.string.text_no_file_rw_permission); + } + }) + .then(new Tile() { + @Override + public boolean fall() { + ShortcutActivity.this.runScriptFile(path); + return true; + } }) .fall(); } @@ -70,7 +102,6 @@ public class ShortcutActivity extends Activity { checkSelfPermission(READ_EXTERNAL_STORAGE) == PERMISSION_GRANTED; } - @FunctionalInterface interface Tile { boolean fall(); } diff --git a/app/src/main/java/com/stardust/scriptdroid/TestActivity.java b/app/src/main/java/com/stardust/scriptdroid/TestActivity.java new file mode 100644 index 00000000..0b6a4c24 --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/TestActivity.java @@ -0,0 +1,61 @@ +package com.stardust.scriptdroid; + +import android.os.Bundle; + +import com.jecelyin.editor.v2.Pref; +import com.jecelyin.editor.v2.common.Command; +import com.jecelyin.editor.v2.ui.EditorDelegate; +import com.jecelyin.editor.v2.ui.IActivity; +import com.jecelyin.editor.v2.ui.TabManager; +import com.jecelyin.editor.v2.view.EditorView; + +/** + * Created by Stardust on 2017/1/29. + */ + +public class TestActivity extends BaseActivity implements IActivity{ + + public void onCreate(Bundle b) { + super.onCreate(b); + Pref.getInstance(this).setTheme(0); + setContentView(R.layout.edit_layout); + EditorDelegate editorDelegate = new EditorDelegate(0, "Hello 920 Editor", "Hello 920"); + EditorView editorView = $(R.id.editor); + editorDelegate.setEditorView(editorView); + } + + @Override + public void startPickPathActivity(String s, String s1) { + + } + + @Override + public void doNextCommand() { + + } + + @Override + public TabManager getTabManager() { + return null; + } + + @Override + public void setMenuStatus(int i, int i1) { + + } + + @Override + public void onDocumentChanged(int i) { + + } + + @Override + public void doCommand(Command command) { + + } + + @Override + public void openFile(String s, String s1, int i) { + + } +} diff --git a/app/src/main/java/com/stardust/scriptdroid/droid/Droid.java b/app/src/main/java/com/stardust/scriptdroid/droid/Droid.java index cfce138d..e575b6f9 100644 --- a/app/src/main/java/com/stardust/scriptdroid/droid/Droid.java +++ b/app/src/main/java/com/stardust/scriptdroid/droid/Droid.java @@ -35,12 +35,15 @@ public class Droid { runScriptFile(new File(path)); } - public void runScript(String script) { - new Thread(() -> { - try { - JAVA_SCRIPT_ENGINE.execute(script); - } catch (Exception e) { - RUNTIME.toast("错误" + e.getMessage()); + public void runScript(final String script) { + new Thread(new Runnable() { + @Override + public void run() { + try { + JAVA_SCRIPT_ENGINE.execute(script); + } catch (Exception e) { + RUNTIME.toast("错误" + e.getMessage()); + } } }).start(); } diff --git a/app/src/main/java/com/stardust/scriptdroid/droid/runtime/DroidRuntime.java b/app/src/main/java/com/stardust/scriptdroid/droid/runtime/DroidRuntime.java index 03b2b264..4aa261e6 100644 --- a/app/src/main/java/com/stardust/scriptdroid/droid/runtime/DroidRuntime.java +++ b/app/src/main/java/com/stardust/scriptdroid/droid/runtime/DroidRuntime.java @@ -148,8 +148,13 @@ public class DroidRuntime implements IDroidRuntime { @Override - public void toast(String text) { - mUIHandler.post(() -> Toast.makeText(App.getApp(), text, Toast.LENGTH_SHORT).show()); + public void toast(final String text) { + mUIHandler.post(new Runnable() { + @Override + public void run() { + Toast.makeText(App.getApp(), text, Toast.LENGTH_SHORT).show(); + } + }); } @Override diff --git a/app/src/main/java/com/stardust/scriptdroid/droid/runtime/action/Able.java b/app/src/main/java/com/stardust/scriptdroid/droid/runtime/action/Able.java index 412e598f..ced0f07c 100644 --- a/app/src/main/java/com/stardust/scriptdroid/droid/runtime/action/Able.java +++ b/app/src/main/java/com/stardust/scriptdroid/droid/runtime/action/Able.java @@ -13,11 +13,36 @@ import com.stardust.util.SparseArrayEntries; public interface Able { SparseArray ABLE_MAP = new SparseArrayEntries() - .entry(AccessibilityNodeInfo.ACTION_CLICK, AccessibilityNodeInfo::isClickable) - .entry(AccessibilityNodeInfo.ACTION_LONG_CLICK, AccessibilityNodeInfo::isLongClickable) - .entry(AccessibilityNodeInfo.ACTION_FOCUS, AccessibilityNodeInfo::isFocusable) - .entry(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD, AccessibilityNodeInfo::isScrollable) - .entry(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD, AccessibilityNodeInfo::isScrollable) + .entry(AccessibilityNodeInfo.ACTION_CLICK, new Able() { + @Override + public boolean isAble(AccessibilityNodeInfo nodeInfo) { + return nodeInfo.isClickable(); + } + }) + .entry(AccessibilityNodeInfo.ACTION_LONG_CLICK, new Able() { + @Override + public boolean isAble(AccessibilityNodeInfo nodeInfo) { + return nodeInfo.isLongClickable(); + } + }) + .entry(AccessibilityNodeInfo.ACTION_FOCUS, new Able() { + @Override + public boolean isAble(AccessibilityNodeInfo nodeInfo) { + return nodeInfo.isFocusable(); + } + }) + .entry(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD, new Able() { + @Override + public boolean isAble(AccessibilityNodeInfo nodeInfo) { + return nodeInfo.isScrollable(); + } + }) + .entry(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD, new Able() { + @Override + public boolean isAble(AccessibilityNodeInfo nodeInfo) { + return nodeInfo.isScrollable(); + } + }) .sparseArray(); boolean isAble(AccessibilityNodeInfo node); diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/ScriptFileOperation.java b/app/src/main/java/com/stardust/scriptdroid/ui/ScriptFileOperation.java index 824b9e6c..4cbf4723 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/ScriptFileOperation.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/ScriptFileOperation.java @@ -3,6 +3,7 @@ package com.stardust.scriptdroid.ui; import android.content.Context; import android.content.Intent; import android.net.Uri; +import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; import com.afollestad.materialdialogs.MaterialDialog; @@ -91,9 +92,12 @@ public abstract class ScriptFileOperation { public void operate(final ScriptListRecyclerView recyclerView, final ScriptFileList scriptFileList, final int position) { String oldName = scriptFileList.get(position).name; new MaterialDialog.Builder(recyclerView.getContext()).title("重命名") - .input("输入新名称", oldName, (dialog, input) -> { - scriptFileList.rename(position, input.toString()); - recyclerView.getAdapter().notifyItemChanged(position); + .input("输入新名称", oldName, new MaterialDialog.InputCallback() { + @Override + public void onInput(@NonNull MaterialDialog dialog, CharSequence input) { + scriptFileList.rename(position, input.toString()); + recyclerView.getAdapter().notifyItemChanged(position); + } }).show(); } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/ScriptListRecyclerView.java b/app/src/main/java/com/stardust/scriptdroid/ui/ScriptListRecyclerView.java index 81cac3f1..8d21a3bd 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/ScriptListRecyclerView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/ScriptListRecyclerView.java @@ -86,9 +86,12 @@ public class ScriptListRecyclerView extends RecyclerView { private void initScriptFileOperationPopupMenu() { mScriptFileOperationPopupMenu = new ScriptFileOperationPopupMenu(getContext()); - mScriptFileOperationPopupMenu.setOnItemClickListener((view, position) -> { - ScriptFileOperation.getOperation(position).operate(ScriptListRecyclerView.this, mScriptFileList, mOperateFileIndex); - mScriptFileOperationPopupMenu.dismiss(); + mScriptFileOperationPopupMenu.setOnItemClickListener(new ScriptFileOperationPopupMenu.OnItemClickListener() { + @Override + public void onClick(View view, int position) { + ScriptFileOperation.getOperation(position).operate(ScriptListRecyclerView.this, mScriptFileList, mOperateFileIndex); + mScriptFileOperationPopupMenu.dismiss(); + } }); } @@ -99,7 +102,12 @@ public class ScriptListRecyclerView extends RecyclerView { private void showOperationDialog(final int position) { new MaterialDialog.Builder(getContext()).items(ScriptFileOperation.getOperationNames()) - .itemsCallback((dialog, itemView, operation, text) -> ScriptFileOperation.getOperation(operation).operate(ScriptListRecyclerView.this, mScriptFileList, position)).show(); + .itemsCallback(new MaterialDialog.ListCallback() { + @Override + public void onSelection(MaterialDialog dialog, View itemView, int operation, CharSequence text) { + ScriptFileOperation.getOperation(operation).operate(ScriptListRecyclerView.this, mScriptFileList, position); + } + }).show(); } private void showOrDismissOperationPopupMenu(View v) { diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/SlidingUpPanel.java b/app/src/main/java/com/stardust/scriptdroid/ui/SlidingUpPanel.java index 5da55754..60cb63e0 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/SlidingUpPanel.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/SlidingUpPanel.java @@ -56,7 +56,12 @@ public class SlidingUpPanel extends FrameLayout { public void dismiss() { mContentContainer.startAnimation(mSlideDownAnimation); - postDelayed(() -> setVisibility(GONE), mSlideDownAnimation.getDuration()); + postDelayed(new Runnable() { + @Override + public void run() { + SlidingUpPanel.this.setVisibility(GONE); + } + }, mSlideDownAnimation.getDuration()); mShowing = false; } @@ -85,7 +90,12 @@ public class SlidingUpPanel extends FrameLayout { private void initShadow() { mShadow = findViewById(R.id.shadow); - mShadow.setOnClickListener(v -> dismiss()); + mShadow.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + SlidingUpPanel.this.dismiss(); + } + }); } @Override diff --git a/app/src/main/java/com/stardust/util/MapEntries.java b/app/src/main/java/com/stardust/util/MapEntries.java index 23c618fb..2730238b 100644 --- a/app/src/main/java/com/stardust/util/MapEntries.java +++ b/app/src/main/java/com/stardust/util/MapEntries.java @@ -12,7 +12,7 @@ public class MapEntries { private Map mMap; public MapEntries() { - this(new TreeMap<>()); + this(new TreeMap()); } public MapEntries(Map map) { diff --git a/app/src/main/res/drawable/divider.xml b/app/src/main/res/drawable/divider.xml new file mode 100644 index 00000000..dcf30bcf --- /dev/null +++ b/app/src/main/res/drawable/divider.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/divider_drak.xml b/app/src/main/res/drawable/divider_drak.xml new file mode 100644 index 00000000..3fc12436 --- /dev/null +++ b/app/src/main/res/drawable/divider_drak.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/edit_layout.xml b/app/src/main/res/layout/edit_layout.xml new file mode 100644 index 00000000..e8c2daff --- /dev/null +++ b/app/src/main/res/layout/edit_layout.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index ca351e53..d096a821 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -15,8 +15,14 @@ app:showAsAction="never"/> + + diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 55344e51..9ee8f7d7 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -1,3 +1,28 @@ + + + + 4dp + 12sp + 8dp + 8dp + 12sp + 8dp + 0dp + 0dp + + + + + + Vince Mi + https://github.com/vinc3m1 + true + A fast ImageView (and Drawable) that supports rounded corners (and ovals or circles) based on the original example from Romain Guy. + RoundedImageView + 1.3.0 + https://github.com/vinc3m1/RoundedImageView + apache_2_0 + https://github.com/vinc3m1/RoundedImageView.git \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2903c800..f7f31270 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -17,4 +17,5 @@ 路径为空 文件不存在 无文件读写权限 + 内嵌920测试