pull/5/head v2.0.8
fengyuecanzhu 4 years ago
parent 233ab6d229
commit 3c520e296d
  1. 22
      DialogX/src/main/java/com/kongzue/dialogx/dialogs/WaitDialog.java
  2. 5
      DialogX/src/main/java/com/kongzue/dialogx/interfaces/BaseDialog.java
  3. 3
      DialogX/src/main/java/com/kongzue/dialogx/util/views/NoArticulatedProgressView.java
  4. 4
      app/src/main/assets/updatelog.fy
  5. 46
      app/src/main/java/xyz/fycz/myreader/enums/Font.java
  6. 31
      app/src/main/java/xyz/fycz/myreader/ui/activity/AboutActivity.java
  7. 10
      app/src/main/java/xyz/fycz/myreader/ui/activity/BookInfoEditActivity.java
  8. 5
      app/src/main/java/xyz/fycz/myreader/ui/activity/MainActivity.java
  9. 3
      app/src/main/java/xyz/fycz/myreader/ui/presenter/BookcasePresenter.java
  10. 103
      app/src/main/java/xyz/fycz/myreader/util/UriFileUtil.java
  11. 3
      app/src/main/java/xyz/fycz/myreader/util/utils/OkHttpUtils.java
  12. 18
      app/src/main/res/drawable/ic_edit.xml
  13. 14
      app/src/main/res/drawable/ic_share.xml
  14. 15
      app/src/main/res/drawable/ic_top.xml
  15. 4
      app/version_code.properties

@ -79,7 +79,7 @@ public class WaitDialog extends BaseDialog {
DialogImpl dialogImpl = me().dialogImpl;
me().message = message;
me().showType = -1;
if (dialogImpl != null) {
if (dialogImpl != null && dialogImpl.progressView != null) {
dialogImpl.progressView.loading();
setMessage(message);
return me();
@ -95,7 +95,7 @@ public class WaitDialog extends BaseDialog {
DialogImpl dialogImpl = me().dialogImpl;
me().message = message;
me().showType = -1;
if (dialogImpl != null && dialogImpl.bkg.getContext() == activity) {
if (dialogImpl != null&& dialogImpl.progressView != null && dialogImpl.bkg.getContext() == activity) {
dialogImpl.progressView.loading();
setMessage(message);
return me();
@ -111,7 +111,7 @@ public class WaitDialog extends BaseDialog {
DialogImpl dialogImpl = me().dialogImpl;
me().preMessage(messageResId);
me().showType = -1;
if (dialogImpl != null) {
if (dialogImpl != null&& dialogImpl.progressView != null) {
dialogImpl.progressView.loading();
setMessage(messageResId);
return me();
@ -127,7 +127,7 @@ public class WaitDialog extends BaseDialog {
DialogImpl dialogImpl = me().dialogImpl;
me().preMessage(messageResId);
me().showType = -1;
if (dialogImpl != null && dialogImpl.bkg.getContext() == activity) {
if (dialogImpl != null&& dialogImpl.progressView != null && dialogImpl.bkg.getContext() == activity) {
dialogImpl.progressView.loading();
setMessage(messageResId);
return me();
@ -143,7 +143,7 @@ public class WaitDialog extends BaseDialog {
DialogImpl dialogImpl = me().dialogImpl;
me().showType = -1;
me().preMessage(message);
if (dialogImpl != null) {
if (dialogImpl != null&& dialogImpl.progressView != null) {
setMessage(message);
me().setProgress(progress);
return me();
@ -160,7 +160,7 @@ public class WaitDialog extends BaseDialog {
DialogImpl dialogImpl = me().dialogImpl;
me().showType = -1;
me().preMessage(message);
if (dialogImpl != null && dialogImpl.bkg.getContext() == activity) {
if (dialogImpl != null && dialogImpl.progressView != null&& dialogImpl.bkg.getContext() == activity) {
setMessage(message);
me().setProgress(progress);
return me();
@ -177,7 +177,7 @@ public class WaitDialog extends BaseDialog {
DialogImpl dialogImpl = me().dialogImpl;
me().showType = -1;
me().preMessage(messageResId);
if (dialogImpl != null) {
if (dialogImpl != null&& dialogImpl.progressView != null) {
setMessage(messageResId);
me().setProgress(progress);
return me();
@ -194,7 +194,7 @@ public class WaitDialog extends BaseDialog {
DialogImpl dialogImpl = me().dialogImpl;
me().showType = -1;
me().preMessage(messageResId);
if (dialogImpl != null && dialogImpl.bkg.getContext() == activity) {
if (dialogImpl != null&& dialogImpl.progressView != null && dialogImpl.bkg.getContext() == activity) {
setMessage(messageResId);
me().setProgress(progress);
return me();
@ -210,7 +210,7 @@ public class WaitDialog extends BaseDialog {
public static WaitDialog show(Activity activity, float progress) {
DialogImpl dialogImpl = me().dialogImpl;
me().showType = -1;
if (dialogImpl != null && dialogImpl.bkg.getContext() == activity) {
if (dialogImpl != null&& dialogImpl.progressView != null && dialogImpl.bkg.getContext() == activity) {
me().setProgress(progress);
return me();
} else {
@ -224,7 +224,7 @@ public class WaitDialog extends BaseDialog {
public static WaitDialog show(float progress) {
DialogImpl dialogImpl = me().dialogImpl;
me().showType = -1;
if (dialogImpl != null) {
if (dialogImpl != null&& dialogImpl.progressView != null) {
me().setProgress(progress);
return me();
} else {
@ -300,7 +300,7 @@ public class WaitDialog extends BaseDialog {
this.layoutResId = layoutResId;
}
public void lazyCreate(){
public void lazyCreate() {
dialogView = createView(layoutResId);
boxRoot = dialogView.findViewById(R.id.box_root);
bkg = dialogView.findViewById(R.id.bkg);

@ -298,7 +298,10 @@ public abstract class BaseDialog {
}
public static FrameLayout getRootFrameLayout() {
if (rootFrameLayout == null) return null;
if (rootFrameLayout == null) {
error("DialogX 未初始化。\n请检查是否在启动对话框前进行初始化操作,使用以下代码进行初始化:\nDialogX.init(context);\n\n另外建议您前往查看 DialogX 的文档进行使用:https://github.com/kongzue/DialogX");
return null;
}
return rootFrameLayout.get();
}

@ -19,6 +19,7 @@ import android.view.animation.LinearInterpolator;
import androidx.annotation.Nullable;
import com.kongzue.dialogx.DialogX;
import com.kongzue.dialogx.R;
import com.kongzue.dialogx.interfaces.ProgressViewInterface;
@ -188,7 +189,7 @@ public class NoArticulatedProgressView extends View implements ProgressViewInter
}
if (tickShowRunnable != null) {
tickShowRunnable.run();
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
if (DialogX.useHaptic)performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
tickShowRunnable = null;
}
switch (status) {

@ -1,6 +1,10 @@
2021.06.04
风月读书v2.0.8
更新内容:
1、优化书籍、书源拖拽移动效果
2、重做书籍长按菜单
3、修复部分字体无法下载的问题
4、修复其他已知bug
2021.06.03
风月读书v2.0.7

@ -1,31 +1,33 @@
package xyz.fycz.myreader.enums;
import xyz.fycz.myreader.common.URLCONST;
public enum Font {
默认字体( "默认字体"),
本地字体( "默认字体"),
方正楷体( "https://fycz.lanzousi.com/ilLFMe6kefe"),
方正行楷( "https://fycz.lanzousi.com/imFvne6keji"),
经典宋体("https://fycz.lanzousi.com/idhI5e6keqf"),
方正硬笔行书("https://fycz.lanzousi.com/ilVh6ep9xja"),
包图小白体("https://fycz.lanzoui.com/i5qgAicrirc"),
仓耳非白W02("https://fycz.lanzoui.com/iHwRnicriuf"),
仓耳舒圆体W02("https://fycz.lanzoui.com/i3GVPicrj3e"),
仓耳与墨W02("https://fycz.lanzoui.com/ivhv9icrj7i"),
方正仿宋简体("https://fycz.lanzoui.com/iEcCHicrjef"),
方正黑体简体("https://fycz.lanzoui.com/iw8kKicrjij"),
方正书宋简体("https://fycz.lanzoui.com/i5976icrjmd"),
品如手写体("https://fycz.lanzoui.com/iZccuicrjyf"),
千图小兔体("https://fycz.lanzoui.com/iOONMicrkda"),
手书体("https://fycz.lanzoui.com/iqbmdicrkvi"),
演示春风楷("https://fycz.lanzoui.com/ioRJSicrldg"),
演示秋鸿楷("https://fycz.lanzoui.com/i8qnzicrlsb"),
演示夏行楷("https://fycz.lanzoui.com/iyYUTicrm6f"),
演示悠然小楷("https://fycz.lanzoui.com/ikKq7icrmrg"),
杨任东竹石体("https://fycz.lanzoui.com/iiWdVicrnbg"),
站酷仓耳渔阳体("https://fycz.lanzoui.com/if5weicrnje"),
迷你隶书( "https://fycz.lanzousi.com/ihaXVe6kekj"),
方正黄草("https://fycz.lanzousi.com/iQg67e6keed");
方正楷体( URLCONST.LAN_ZOUS_URL + " /ilLFMe6kefe"),
方正行楷( URLCONST.LAN_ZOUS_URL + "/imFvne6keji"),
经典宋体(URLCONST.LAN_ZOUS_URL + "/idhI5e6keqf"),
方正硬笔行书(URLCONST.LAN_ZOUS_URL + "/ilVh6ep9xja"),
包图小白体(URLCONST.LAN_ZOUS_URL + "/i5qgAicrirc"),
仓耳非白W02(URLCONST.LAN_ZOUS_URL + "/iHwRnicriuf"),
仓耳舒圆体W02(URLCONST.LAN_ZOUS_URL + "/i3GVPicrj3e"),
仓耳与墨W02(URLCONST.LAN_ZOUS_URL + "/ivhv9icrj7i"),
方正仿宋简体(URLCONST.LAN_ZOUS_URL + "/iEcCHicrjef"),
方正黑体简体(URLCONST.LAN_ZOUS_URL + "/iw8kKicrjij"),
方正书宋简体(URLCONST.LAN_ZOUS_URL + "/i5976icrjmd"),
品如手写体(URLCONST.LAN_ZOUS_URL + "/iZccuicrjyf"),
千图小兔体(URLCONST.LAN_ZOUS_URL + "/iOONMicrkda"),
手书体(URLCONST.LAN_ZOUS_URL + "/iqbmdicrkvi"),
演示春风楷(URLCONST.LAN_ZOUS_URL + "/ioRJSicrldg"),
演示秋鸿楷(URLCONST.LAN_ZOUS_URL + "/i8qnzicrlsb"),
演示夏行楷(URLCONST.LAN_ZOUS_URL + "/iyYUTicrm6f"),
演示悠然小楷(URLCONST.LAN_ZOUS_URL + "/ikKq7icrmrg"),
杨任东竹石体(URLCONST.LAN_ZOUS_URL + "/iiWdVicrnbg"),
站酷仓耳渔阳体(URLCONST.LAN_ZOUS_URL + "/if5weicrnje"),
迷你隶书( URLCONST.LAN_ZOUS_URL + "/ihaXVe6kekj"),
方正黄草(URLCONST.LAN_ZOUS_URL + "/iQg67e6keed");
public String downloadPath;

@ -14,6 +14,7 @@ import java.io.File;
import io.reactivex.Observable;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.disposables.Disposable;
import xyz.fycz.myreader.R;
import xyz.fycz.myreader.application.App;
import xyz.fycz.myreader.base.BaseActivity;
@ -22,6 +23,7 @@ import xyz.fycz.myreader.common.APPCONST;
import xyz.fycz.myreader.common.URLCONST;
import xyz.fycz.myreader.databinding.ActivityAboutBinding;
import xyz.fycz.myreader.ui.dialog.DialogCreator;
import xyz.fycz.myreader.ui.dialog.LoadingDialog;
import xyz.fycz.myreader.util.ShareUtils;
import xyz.fycz.myreader.util.SharedPreUtils;
import xyz.fycz.myreader.util.ToastUtils;
@ -73,7 +75,9 @@ public class AboutActivity extends BaseActivity {
SharedPreUtils.getInstance().getString(getString(R.string.downloadLink), URLCONST.LAN_ZOUS_URL)));
binding.il.vwUpdate.setOnClickListener(v -> App.checkVersionByServer(this, true));
binding.il.vwUpdateLog.setOnClickListener(v -> DialogCreator.createAssetTipDialog(this, "更新日志", "updatelog.fy"));
binding.il.vwShareLog.setOnClickListener(v -> shareCrashLog());
binding.il.vwShareLog.setOnClickListener(v -> DialogCreator.createCommonDialog(this, "分享崩溃日志",
"你是希望将日志上传到服务器,还是直接分享给他人?", true,
"上传服务器", "直接分享", (dialog, which) -> uploadCrashLog(), (dialog, which) -> shareCrashLog()));
binding.il.vwQq.setOnClickListener(v -> {
if (!App.joinQQGroup(this, "8PIOnHFuH6A38hgxvD_Rp2Bu-Ke1ToBn")) {
//数据
@ -99,16 +103,21 @@ public class AboutActivity extends BaseActivity {
}
private void updateCrashLog() {
private void uploadCrashLog() {
File logDir = new File(APPCONST.LOG_DIR);
if (!logDir.exists() || logDir.listFiles() == null || logDir.listFiles().length == 0) {
ToastUtils.showWarring("没有日志文件");
return;
}
final Disposable[] disposable = new Disposable[1];
LoadingDialog dialog = new LoadingDialog(this, "正在上传", () -> {
if (disposable[0] != null) disposable[0].dispose();
});
dialog.show();
String time = String.valueOf(System.currentTimeMillis());
String fileName = "log-" + time + ".zip";
String logZip = FileUtils.getCachePath() + File.separator + fileName;
Observable.create((ObservableOnSubscribe<String>) emitter -> {
String time = String.valueOf(System.currentTimeMillis());
String fileName = "log-" + time + ".zip";
String logZip = FileUtils.getCachePath() + File.separator + fileName;
File zipFile = FileUtils.getFile(logZip);
if (ZipUtils.zipFile(logDir, zipFile)) {
emitter.onNext(OkHttpUtils.upload(URLCONST.LOG_UPLOAD_URL, logZip, fileName));
@ -117,14 +126,24 @@ public class AboutActivity extends BaseActivity {
}
emitter.onComplete();
}).compose(RxUtils::toSimpleSingle).subscribe(new MyObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
disposable[0] = d;
}
@Override
public void onNext(@NotNull String s) {
ToastUtils.showInfo(s);
FileUtils.deleteFile(APPCONST.LOG_DIR);
FileUtils.deleteFile(logZip);
dialog.dismiss();
}
@Override
public void onError(Throwable e) {
ToastUtils.showError(e.getLocalizedMessage());
FileUtils.deleteFile(logZip);
dialog.dismiss();
}
});
@ -150,7 +169,7 @@ public class AboutActivity extends BaseActivity {
}).compose(RxUtils::toSimpleSingle).subscribe(new MyObserver<File>() {
@Override
public void onNext(@NotNull File file) {
ShareUtils.share(AboutActivity.this, file, file.getName(), "application/x-zip-compressed");
ShareUtils.share(AboutActivity.this, file, "分享日志文件", "application/x-zip-compressed");
}
@Override

@ -8,6 +8,8 @@ import android.view.MenuItem;
import androidx.appcompat.widget.Toolbar;
import java.util.Objects;
import xyz.fycz.myreader.R;
import xyz.fycz.myreader.application.App;
import xyz.fycz.myreader.base.BaseActivity;
@ -154,9 +156,9 @@ public class BookInfoEditActivity extends BaseActivity {
}
private boolean hasChange() {
return !bookName.equals(binding.tieBookName.getText().toString()) ||
!author.equals(binding.tieBookAuthor.getText().toString()) ||
!imgUrl.equals(binding.tieCoverUrl.getText().toString()) ||
!desc.equals(binding.tieBookDesc.getText().toString());
return !Objects.equals(bookName, binding.tieBookName.getText().toString()) ||
!Objects.equals(author, binding.tieBookAuthor.getText().toString()) ||
!Objects.equals(imgUrl, binding.tieCoverUrl.getText().toString()) ||
!Objects.equals(desc, binding.tieBookDesc.getText().toString());
}
}

@ -143,7 +143,10 @@ public class MainActivity extends BaseActivity {
super.initClick();
mToolbar.setOnLongClickListener(v -> {
if (binding.viewPagerMain.getCurrentItem() == 0 && !BookGroupService.getInstance().curGroupIsPrivate()) {
if (binding.viewPagerMain.getCurrentItem() == 0 &&
!BookGroupService.getInstance().curGroupIsPrivate() &&
(mBookcaseFragment.getmBookcasePresenter() != null &&
!mBookcaseFragment.getmBookcasePresenter().ismEditState())) {
goPrivateBookcase();
return true;
}

@ -554,6 +554,9 @@ public class BookcasePresenter implements BasePresenter {
if (canEditBookcase()) {
mMainActivity.getViewPagerMain().setEnableScroll(false);
mBookcaseFragment.getSrlContent().setEnableRefresh(false);
if (mSetting.getSortStyle() == 0){
ToastUtils.showInfo("长按可移动书籍哦!");
}
itemTouchCallback.setLongPressDragEnable(mSetting.getSortStyle() == 0);
mBookcaseAdapter.setmEditState(true);
mBookcaseFragment.getRlBookEdit().setVisibility(View.VISIBLE);

@ -93,113 +93,72 @@ public class UriFileUtil {
*/
public static String getPath(final Context context, final Uri uri) {
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
// DocumentProvider
if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
// ExternalStorageProvider
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
// TODO handle non-primary volumes
}
// DownloadsProvider
else if (isDownloadsDocument(uri)) {
final String id = DocumentsContract.getDocumentId(uri);
final String[] split = id.split(":");
final String type = split[0];
if ("raw".equalsIgnoreCase(type)) { //处理某些机型(比如Goole Pixel )ID是raw:/storage/emulated/0/Download/c20f8664da05ab6b4644913048ea8c83.mp4
return split[1];
}
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
return getDataColumn(context, contentUri, null, null);
}
// MediaProvider
else if (isMediaDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[]{
split[1]
};
return getDataColumn(context, contentUri, selection, selectionArgs);
}
}
// MediaStore (and general)
else if ("content".equalsIgnoreCase(uri.getScheme())) {
return getDataColumn(context, uri, null, null);
// Return the remote address
if (isGooglePhotosUri(uri))
return uri.getLastPathSegment();
return getDataColumn(context, uri, null, null);
}
// File
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}
@ -218,45 +177,21 @@ public class UriFileUtil {
*/
public static String getDataColumn(Context context, Uri uri, String selection,
String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = {
column
};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null);
try (Cursor cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null)) {
if (cursor != null && cursor.moveToFirst()) {
final int column_index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(column_index);
final int index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(index);
}
} finally {
if (cursor != null)
cursor.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@ -294,4 +229,12 @@ public class UriFileUtil {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is Google Photos.
*/
public static boolean isGooglePhotosUri(Uri uri) {
return "com.google.android.apps.photos.content".equals(uri.getAuthority());
}
}

@ -331,8 +331,7 @@ public class OkHttpUtils {
OkHttpClient client = getOkHttpClient();
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", fileName,
RequestBody.create(MediaType.parse("multipart/form-data"), new File(filePath)))
.addFormDataPart("file", fileName, RequestBody.create(MediaType.parse("multipart/form-data"), new File(filePath)))
.build();
Request request = new Request.Builder()

@ -1,12 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M856.9,927.3H118.6c-8.5,0 -16.7,-3.4 -22.7,-9.4s-9.4,-14.2 -9.3,-22.7l2,-732.3c0,-17.6 14.4,-31.9 32,-31.9H633c17.7,0 32,14.3 32,32s-14.3,32 -32,32H152.6l-1.8,668.3H825l1.5,-514.8c0.1,-17.6 14.4,-31.9 32,-31.9h0.1c17.7,0.1 32,14.4 31.9,32.1l-1.6,546.7c0,17.6 -14.3,31.9 -32,31.9z"
android:fillColor="#ffffff"/>
<path
android:pathData="M401.1,665c-8.2,0 -16.4,-3.1 -22.6,-9.4 -12.5,-12.5 -12.5,-32.8 0,-45.3L882.8,106c12.5,-12.5 32.8,-12.5 45.3,0s12.5,32.8 0,45.3L423.7,655.7c-6.3,6.2 -14.5,9.3 -22.6,9.3z"
android:fillColor="#ffffff"/>
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#595757"
android:pathData="M5.6,20.009c-0.881,0-1.6-0.789-1.6-1.758V5.749C4,4.78,4.719,3.991,5.6,3.991h10.62 c0.882,0,1.599,0.789,1.599,1.758v1.258h-1.483l-0.076-1.258c0-0.122-0.062-0.172-0.062-0.172L5.6,5.582 c0.002,0.015-0.039,0.069-0.039,0.167v12.502c0,0.107,0.051,0.164,0.063,0.172l10.596-0.005c-0.002-0.014,0.039-0.067,0.039-0.167 l0.016-4.739h1.469l0.075,4.739c0,0.969-0.717,1.758-1.599,1.758H5.6z" />
<path
android:fillColor="#595757"
android:pathData="M 12.549 13.354 L 13.738 12.323 L 13.738 12.323 L 18.967 7.553 L 20 8.646 L 14.658 13.514 L 13.54 14.515 Z" />
</vector>

@ -1,9 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
android:width="20dp"
android:height="20dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M783.7,653.3c-42.8,0 -80.8,20.5 -104.9,52.1l-277.1,-165c3.1,-12.1 5,-24.8 5,-37.9 0,-3.8 -0.3,-7.5 -0.6,-11.3l277.3,-167.1c24.2,28.3 60.1,46.4 100.3,46.4 72.9,0 132,-59.1 132,-132 0,-72.9 -59.1,-132 -132,-132 -72.9,0 -132,59.1 -132,132 0,14.5 2.4,28.3 6.7,41.3L383.5,422.5c-26.7,-42.5 -73.8,-70.8 -127.7,-70.8C172.5,351.7 105,419.2 105,502.5s67.6,150.8 150.9,150.8c44.6,0 84.6,-19.5 112.2,-50.3L656.2,752c-2.8,10.7 -4.4,21.8 -4.4,33.3 0,72.9 59.1,132 132,132 72.9,0 132,-59.1 132,-132 0,-72.9 -59.2,-132 -132.1,-132z"
android:fillColor="#ffffff"/>
android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"
android:fillColor="#FFFFFF" />
</vector>

@ -1,9 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M855.87,106.43a42.46,42.46 0,0 1,-42.46 42.46L203.44,148.9a42.46,42.46 0,0 1,0 -84.93h609.97a42.46,42.46 0,0 1,42.46 42.46zM511.82,264.35a42.46,42.46 0,0 0,-42.46 42.46v609.97a42.46,42.46 0,0 0,84.93 0L554.29,306.82a42.46,42.46 0,0 0,-42.46 -42.46zM541.97,233.02c-16.59,-16.58 -42.53,-17.54 -57.92,-2.13L171.23,543.68c-15.41,15.41 -14.45,41.34 2.13,57.92 16.59,16.59 42.51,17.54 57.92,2.13l312.8,-312.78c15.39,-15.41 14.45,-41.34 -2.13,-57.92zM481.7,233.02c-16.58,16.58 -17.54,42.51 -2.13,57.92l312.8,312.8c15.39,15.39 41.33,14.45 57.92,-2.14 16.58,-16.58 17.52,-42.51 2.11,-57.92L539.62,230.9c-15.41,-15.41 -41.34,-14.45 -57.92,2.13z"
android:fillColor="#000000"/>
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#595757"
android:pathData="M 4 4.003 H 20 V 5.603 H 4 V 4.003 Z" />
<path
android:fillColor="#595757"
android:pathData="M 5.594 12.821 L 6.742 13.935 L 11.199 9.338 L 11.194 20 L 12.794 20 L 12.799 9.338 L 17.251 13.938 L 18.401 12.825 L 11.999 6.214 Z" />
</vector>

@ -1,2 +1,2 @@
#Thu Jun 03 14:18:11 CST 2021
VERSION_CODE=207
#Fri Jun 04 20:20:53 CST 2021
VERSION_CODE=208

Loading…
Cancel
Save