From 4475ec660dd844317b4445c399f9f8a0b3cf90b4 Mon Sep 17 00:00:00 2001 From: itgaojian Date: Thu, 22 Feb 2024 10:35:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ping=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/compiler.xml | 2 +- .idea/misc.xml | 3 +- .../com/tenlion/xztouch/MainActivity.java | 29 +- .../tenlion/xztouch/push/ServerClient.java | 34 +++ baselib/build.gradle | 2 +- .../baselib/constant/PathConfig.java | 5 +- .../core/widget/views/BottomSettingView.java | 35 +++ .../baselib/core/widget/views/PingDialog.java | 4 + .../core/widget/views/TopPingView.java | 269 ++++++++++++++++++ .../tenlionsoft/baselib/utils/AppUtils.java | 2 +- .../main/res/drawable-xhdpi/ic_ping_link.png | Bin 0 -> 7340 bytes .../res/drawable-xhdpi/ic_running_point.png | Bin 0 -> 2811 bytes .../main/res/drawable-xhdpi/ic_stop_point.png | Bin 0 -> 2782 bytes .../main/res/layout/dialog_bottom_setting.xml | 30 +- .../src/main/res/layout/dialog_top_ping.xml | 132 +++++++++ 15 files changed, 538 insertions(+), 9 deletions(-) create mode 100644 baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/PingDialog.java create mode 100755 baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/TopPingView.java create mode 100644 baselib/src/main/res/drawable-xhdpi/ic_ping_link.png create mode 100644 baselib/src/main/res/drawable-xhdpi/ic_running_point.png create mode 100644 baselib/src/main/res/drawable-xhdpi/ic_stop_point.png create mode 100755 baselib/src/main/res/layout/dialog_top_ping.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml index fb7f4a8..b589d56 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4bc4fc6..17864e8 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,4 @@ - - + \ No newline at end of file diff --git a/app/src/main/java/com/tenlion/xztouch/MainActivity.java b/app/src/main/java/com/tenlion/xztouch/MainActivity.java index 5f8f2d9..c7776f3 100644 --- a/app/src/main/java/com/tenlion/xztouch/MainActivity.java +++ b/app/src/main/java/com/tenlion/xztouch/MainActivity.java @@ -70,6 +70,7 @@ import com.tenlionsoft.baselib.core.widget.marqueen.SimpleMarqueeView; import com.tenlionsoft.baselib.core.widget.views.BottomSettingPwdView; import com.tenlionsoft.baselib.core.widget.views.BottomSettingView; import com.tenlionsoft.baselib.core.widget.views.CenterDialogUpdateView; +import com.tenlionsoft.baselib.core.widget.views.TopPingView; import com.tenlionsoft.baselib.core.widget.views.TypeFaceTextView; import com.tenlionsoft.baselib.utils.AppUtils; import com.tenlionsoft.baselib.utils.ExceptionHandler; @@ -162,6 +163,7 @@ public class MainActivity extends Activity { intentFilter.addAction(PathConfig.ACTION_SHUT_DOWN); intentFilter.addAction(PathConfig.ACTION_DO_UPDATE_APP); intentFilter.addAction(PathConfig.ACTION_APP_INSTALL); + intentFilter.addAction(PathConfig.ACTION_NOTIFY_CLIENT_STATUS); registerReceiver(this.mBoradCast, intentFilter); this.mBaseUrl = SPUtils.getInstance().getString("baseUrl"); this.mDeviceCode = SPUtils.getInstance().getString("deviceCode"); @@ -849,6 +851,11 @@ public class MainActivity extends Activity { MainActivity.this.mSettingDialog.dismiss(); } + @Override + public void showPing() { + showPingView(); + } + public void shareQQ() { MainActivity.this.mSettingDialog.dismiss(); Process.killProcess(Process.myPid()); @@ -862,6 +869,18 @@ public class MainActivity extends Activity { this.mSettingDialog.show(); } + /** + * 显示ping + */ + private void showPingView() { + TopPingView pingView = new TopPingView.DialogBuilder(MainActivity.this) + .setIsBackCancelable(false) + .setIscancelable(false) + .build(); + pingView.show(); + + } + /* access modifiers changed from: private */ public void doSubmitDeviceParams(final String str, String str2, final String str3, String str4, String str5, String str6, String str7) { @@ -983,7 +1002,7 @@ public class MainActivity extends Activity { public void checkAppVersion() { RetrofitManager.getInstance() .create(BaseApiService.class) - .doCheckAppVersion(this.mBaseUrl+BaseUrlApi.APP_VERSION_URL) + .doCheckAppVersion(this.mBaseUrl + BaseUrlApi.APP_VERSION_URL) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @@ -1066,6 +1085,12 @@ public class MainActivity extends Activity { if (!TextUtils.isEmpty(stringExtra)) { MainActivity.this.installApp(stringExtra); } + } else if (PathConfig.ACTION_NOTIFY_CLIENT_STATUS.equals(action)) { + boolean isRunning = intent.getBooleanExtra("isRunning", false); + LogUtils.e("是否正在运行"+isRunning); + if (mSettingDialog != null && mSettingDialog.isShowing()) { + mSettingDialog.setStatus(isRunning); + } } } } @@ -1142,7 +1167,7 @@ public class MainActivity extends Activity { public void startDownloadApk() { ToastUtils.show((CharSequence) "开始下载,请在通知栏查看下载进度"); Intent intent = new Intent(this, DownloadService.class); - intent.putExtra("downloadUrl", this.mBaseUrl+BaseUrlApi.APP_DOWNLOAD_URL); + intent.putExtra("downloadUrl", this.mBaseUrl + BaseUrlApi.APP_DOWNLOAD_URL); startService(intent); } } \ No newline at end of file diff --git a/app/src/main/java/com/tenlion/xztouch/push/ServerClient.java b/app/src/main/java/com/tenlion/xztouch/push/ServerClient.java index e508a16..337bf14 100755 --- a/app/src/main/java/com/tenlion/xztouch/push/ServerClient.java +++ b/app/src/main/java/com/tenlion/xztouch/push/ServerClient.java @@ -4,8 +4,10 @@ import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.Service; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.graphics.Color; import android.os.Build; import android.os.IBinder; @@ -58,6 +60,7 @@ public class ServerClient extends Service { FileUploadHolder fileUploadHolder = new FileUploadHolder(); private AsyncServer mAsyncServer = new AsyncServer(); private AsyncHttpServer server = new AsyncHttpServer(); + private PushCastReceiver mReceiver; public static void start(Context context) { Intent intent = new Intent(context, ServerClient.class); @@ -87,6 +90,10 @@ public class ServerClient extends Service { stopSelf(); } } + IntentFilter filter = new IntentFilter(); + filter.addAction(PathConfig.ACTION_GET_CLIENT_STATUS); + mReceiver = new PushCastReceiver(); + registerReceiver(mReceiver, filter); return super.onStartCommand(intent, flags, startId); } @@ -136,6 +143,13 @@ public class ServerClient extends Service { if (mAsyncServer != null) { mAsyncServer.stop(); } + if (mReceiver != null) { + unregisterReceiver(mReceiver); + } + Intent intent = new Intent(); + intent.setAction(PathConfig.ACTION_NOTIFY_CLIENT_STATUS); + intent.putExtra("isRunning", false); + sendBroadcast(intent); } private void startServer() { @@ -161,6 +175,7 @@ public class ServerClient extends Service { LogUtils.e("开始监听"); } + private void getAppConfigInfo(AsyncHttpServerRequest asyncHttpServerRequest, AsyncHttpServerResponse asyncHttpServerResponse) { try { @@ -438,4 +453,23 @@ public class ServerClient extends Service { this.totalSize += param1ArrayOfbyte.length; } } + + public class PushCastReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (PathConfig.ACTION_GET_CLIENT_STATUS.equals(action)) { + boolean isRunning = false; + if (mAsyncServer != null) { + isRunning = mAsyncServer.isRunning(); + } + Intent newIntent = new Intent(); + newIntent.setAction(PathConfig.ACTION_NOTIFY_CLIENT_STATUS); + newIntent.putExtra("isRunning", isRunning); + sendBroadcast(newIntent); + } + } + } + } diff --git a/baselib/build.gradle b/baselib/build.gradle index fa44116..c400e86 100755 --- a/baselib/build.gradle +++ b/baselib/build.gradle @@ -89,7 +89,7 @@ dependencies { api "io.github.razerdp:BasePopup:$rootProject.popup_version" //选择器 api 'io.github.lucksiege:pictureselector:v2.7.3-rc08' - api 'me.rosuh:AndroidFilePicker:0.7.0-x' + api 'me.rosuh:AndroidFilePicker:0.8.3' //toast api 'com.github.getActivity:ToastUtils:9.5' diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java b/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java index 600b1d3..bdab1c1 100755 --- a/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java +++ b/baselib/src/main/java/com/tenlionsoft/baselib/constant/PathConfig.java @@ -141,5 +141,8 @@ public class PathConfig { public static final String MODULE = "4"; - + public static final String ACTION_ASYNC_SERVER_RUNNING = "com.tenlionsoft.xz_touch.service_running"; + public static final String ACTION_ASYNC_SERVER_STOP = "com.tenlionsoft.xz_touch.service_stop"; + public static final String ACTION_GET_CLIENT_STATUS = "com.tenlionsoft.xz_touch_service_status"; + public static final String ACTION_NOTIFY_CLIENT_STATUS = "com.tenlionsoft.xz_touch_service_status"; } diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/BottomSettingView.java b/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/BottomSettingView.java index 4c6f111..80770ab 100755 --- a/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/BottomSettingView.java +++ b/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/BottomSettingView.java @@ -3,6 +3,7 @@ package com.tenlionsoft.baselib.core.widget.views; import android.app.Activity; import android.app.Dialog; import android.content.Context; +import android.content.Intent; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.text.TextUtils; @@ -21,6 +22,9 @@ import androidx.appcompat.widget.SwitchCompat; import androidx.exifinterface.media.ExifInterface; import com.tenlionsoft.baselib.R; +import com.tenlionsoft.baselib.constant.PathConfig; +import com.tenlionsoft.baselib.utils.AppUtils; +import com.tenlionsoft.baselib.utils.LogUtils; import com.tenlionsoft.baselib.utils.NetworkUtils; import com.tenlionsoft.baselib.utils.SPUtils; import com.tenlionsoft.baselib.utils.UserLgUtils; @@ -43,11 +47,13 @@ public class BottomSettingView extends Dialog { public EditText mEtUrl; public EditText mEtWidth; public ImageView mIvImg; + public ImageView mIvPing; private OnChoseListener mListener; private AppCompatSpinner mSpAppType; private View view; public int windowHeight; public int windowWidth; + private ImageView mIvStatus; public interface OnChoseListener { void checkUpdate(); @@ -57,6 +63,8 @@ public class BottomSettingView extends Dialog { void shareWeChart(); void shareWeibo(); + + void showPing(); } private BottomSettingView(Context context2) { @@ -99,6 +107,9 @@ public class BottomSettingView extends Dialog { this.mEtWidth = this.view.findViewById(R.id.et_width); this.mEtHeight = this.view.findViewById(R.id.et_height); this.mEtResul = this.view.findViewById(R.id.et_resul); + mIvStatus = this.view.findViewById(R.id.iv_status); + mIvPing = this.view.findViewById(R.id.iv_ping); + mIvPing.setOnClickListener(v -> choseType(5)); setCancelable(false); setCanceledOnTouchOutside(false); this.mEtDeviceCode = this.view.findViewById(R.id.et_device_code); @@ -123,6 +134,20 @@ public class BottomSettingView extends Dialog { window.setBackgroundDrawable(new ColorDrawable()); window.setSoftInputMode(4); getScreenSize(); + //获取服务是否在运行 + getServiceIsRunning(); + } + + private void getServiceIsRunning() { + boolean serviceIsRunning = AppUtils.serviceIsRunning(); + LogUtils.e("Service is running " + serviceIsRunning); + if (serviceIsRunning) { + Intent intent = new Intent(); + intent.setAction(PathConfig.ACTION_GET_CLIENT_STATUS); + context.sendBroadcast(intent); + } else { + setStatus(false); + } } public /* synthetic */ void lambda$onCreate$1$BottomSettingView(View view2) { @@ -155,6 +180,14 @@ public class BottomSettingView extends Dialog { } } + public void setStatus(boolean isRunning) { + if (isRunning) { + mIvStatus.setBackgroundResource(R.drawable.ic_running_point); + } else { + mIvStatus.setBackgroundResource(R.drawable.ic_stop_point); + } + } + public void addOnChoseListener(OnChoseListener onChoseListener) { this.mListener = onChoseListener; } @@ -192,6 +225,8 @@ public class BottomSettingView extends Dialog { onChoseListener.shareQQ(); } else if (i == 4) { onChoseListener.checkUpdate(); + } else if (i == 5) { + onChoseListener.showPing(); } } diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/PingDialog.java b/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/PingDialog.java new file mode 100644 index 0000000..0b958bc --- /dev/null +++ b/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/PingDialog.java @@ -0,0 +1,4 @@ +package com.tenlionsoft.baselib.core.widget.views; + +public class PingDialog { +} diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/TopPingView.java b/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/TopPingView.java new file mode 100755 index 0000000..5bdf2fd --- /dev/null +++ b/baselib/src/main/java/com/tenlionsoft/baselib/core/widget/views/TopPingView.java @@ -0,0 +1,269 @@ +package com.tenlionsoft.baselib.core.widget.views; + +import android.app.Dialog; +import android.app.ProgressDialog; +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.exifinterface.media.ExifInterface; + +import com.hjq.toast.ToastUtils; +import com.tenlionsoft.baselib.R; +import com.tenlionsoft.baselib.utils.UIUtil; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.annotations.NonNull; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableOnSubscribe; +import io.reactivex.rxjava3.core.Observer; +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.schedulers.Schedulers; + + +/** + * 作者 : Adam on 2018/7/23. + * 邮箱 : itgaojian@163.com + * 描述 : ping + */ +public class TopPingView extends Dialog { + public String appType; + private Context context; + + private OnChoseListener mListener; + private TextView mTvInfo; + private TextView mTvStart; + private TextView mTvCancel; + private EditText mEtUrl; + private ProgressDialog mDialog; + + + public interface OnChoseListener { + void checkUpdate(); + + void shareQQ(); + + void shareWeChart(); + + void shareWeibo(); + + void showPing(); + } + + private TopPingView(Context context2) { + super(context2, R.style.Dialog_ChoseFile); + this.appType = ExifInterface.GPS_MEASUREMENT_2D; + this.context = context2; + } + + /* access modifiers changed from: protected */ + public void onCreate(Bundle bundle) { + super.onCreate(bundle); + View view = LayoutInflater.from(this.context).inflate(R.layout.dialog_top_ping, null); + setContentView(view); + setCancelable(false); + setCanceledOnTouchOutside(false); + mTvInfo = view.findViewById(R.id.tv_info); + mEtUrl = view.findViewById(R.id.et_ip); + mTvStart = view.findViewById(R.id.tv_confirm); + mTvCancel = view.findViewById(R.id.tv_cancel); + mTvStart.setOnClickListener(v -> { + String url = mEtUrl.getText().toString().trim(); + if (!TextUtils.isEmpty(url)) { + ping(url); + } else { + ToastUtils.show("请输入要ping的网络地址"); + } + }); + mTvCancel.setOnClickListener(v -> { + hideSoftKeyboard(mEtUrl); + this.dismiss(); + }); + mDialog = UIUtil.initDialog(context, "执行中..."); + Window window = getWindow(); + window.setGravity(Gravity.TOP); + window.setWindowAnimations(R.style.Dialog_ChoseFile); + WindowManager.LayoutParams attributes = window.getAttributes(); + attributes.width = -1; + attributes.height = -2; + window.setAttributes(attributes); + window.setBackgroundDrawable(new ColorDrawable()); + window.setSoftInputMode(4); + + } + + + public void hideSoftKeyboard(View view) { + InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); + if (view != null) { + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } + + private void showSoftKeyBoardDialog(EditText editText) { + if (editText != null) { + editText.setFocusable(true); + editText.setFocusableInTouchMode(true); + editText.requestFocus(); + ((InputMethodManager) this.context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(editText + , 0); + } + } + + public void addOnChoseListener(OnChoseListener onChoseListener) { + this.mListener = onChoseListener; + } + + public void show() { + super.show(); + getWindow().clearFlags(131080); + } + + public void ping(String url) { + Observable.create((ObservableOnSubscribe) emitter -> { + StringBuilder buffer = new StringBuilder(); + String result = ""; // 结果集 + Process ping; + try { + ping = Runtime.getRuntime().exec( + "ping -c 4 " + url); + int status = ping.waitFor(); // 状态 + + InputStream input = ping.getInputStream(); + BufferedReader in = new BufferedReader(new InputStreamReader(input)); + + String line = ""; // 长度 + while ((line = in.readLine()) != null) { + buffer.append(line).append("\n"); + } + if (status == 0) { + result = buffer.toString(); + } else { + result = "网络不通"; + } + emitter.onNext(result); + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + emitter.onError(new Throwable("程序错误")); + + } + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@NonNull Disposable d) { + mTvStart.setEnabled(false); + mTvStart.setText("执行中..."); + mTvInfo.setText("运行中..."); + } + + @Override + public void onNext(@NonNull String result) { + mTvInfo.setText(result); + mTvStart.setText("执行"); + mTvStart.setEnabled(true); + } + + @Override + public void onError(@NonNull Throwable e) { + mTvInfo.setText(e.getMessage()); + mTvStart.setText("执行"); + mTvStart.setEnabled(true); + } + + @Override + public void onComplete() { + mTvInfo.setText(""); + mTvStart.setText("执行"); + mTvStart.setEnabled(true); + } + }); + } + + + private void choseType(int i) { + OnChoseListener onChoseListener = this.mListener; + if (onChoseListener == null) { + return; + } + if (i == 1) { + onChoseListener.shareWeChart(); + } else if (i == 2) { + onChoseListener.shareWeibo(); + } else if (i == 3) { + onChoseListener.shareQQ(); + } else if (i == 4) { + onChoseListener.checkUpdate(); + } else if (i == 5) { + onChoseListener.showPing(); + } + } + + public static class DialogBuilder { + private boolean isCancelable; + private boolean isCommentImg; + private Context mContext; + private int mGravity = 80; + private boolean mIsBackable; + private boolean mIsShow; + private boolean mIsShowOther; + private OnChoseListener mListener; + + public DialogBuilder(Context context) { + this.mContext = context; + } + + public DialogBuilder setIscancelable(boolean z) { + this.isCancelable = z; + return this; + } + + public DialogBuilder setIsBackCancelable(boolean z) { + this.mIsBackable = z; + return this; + } + + public DialogBuilder setShowLocation(int i) { + this.mGravity = i; + return this; + } + + public DialogBuilder setIsShowFile(boolean z) { + this.mIsShow = z; + return this; + } + + public DialogBuilder setIsShowOther(boolean z) { + this.mIsShowOther = z; + return this; + } + + public TopPingView build() { + return new TopPingView(this.mContext); + } + + public DialogBuilder setIsShowPhoto(String str) { + if ("0".equals(str)) { + this.isCommentImg = false; + } else { + this.isCommentImg = true; + } + return this; + } + } +} \ No newline at end of file diff --git a/baselib/src/main/java/com/tenlionsoft/baselib/utils/AppUtils.java b/baselib/src/main/java/com/tenlionsoft/baselib/utils/AppUtils.java index 104748c..0a190b2 100755 --- a/baselib/src/main/java/com/tenlionsoft/baselib/utils/AppUtils.java +++ b/baselib/src/main/java/com/tenlionsoft/baselib/utils/AppUtils.java @@ -129,7 +129,7 @@ public final class AppUtils { .getRunningServices(2147483647) .iterator(); while (iterator.hasNext()) { - if ("com.tenlionsoft.xzdisplay.push.ServerClient".equals(((ActivityManager.RunningServiceInfo) iterator.next()).service.getClassName())) + if ("com.tenlion.xztouch.push.ServerClient".equals(((ActivityManager.RunningServiceInfo) iterator.next()).service.getClassName())) return true; } return false; diff --git a/baselib/src/main/res/drawable-xhdpi/ic_ping_link.png b/baselib/src/main/res/drawable-xhdpi/ic_ping_link.png new file mode 100644 index 0000000000000000000000000000000000000000..f79f516c0a46d9adc8a7dc7eca1defb9a79bcc1b GIT binary patch literal 7340 zcmV;d98=?oP)Py6W=TXrRCr$PU3q*|)xH1z?wy$=1QBqzEeOaWNWg0Qsy?l@E^S{y6EXw1K?1H2 z7L{yB5`ttBq_PC4RYHPV3o{8peYLOKbLmrSwbCSlwOWWmf-Dk3$T~Ck_daLH#7t%~ zbMItsNXDFh^2y9^JHPXtbI(2JcYZ&@KpXHty9a2%69XRbc;FiehLrOCw-HIV0=N#q zMF3p{Ff;ftK(z#v5-ES#aL4G%ZxU3#F<@By^8SmMrF#Ls7oa$GgG_$_yI$NFKl%lA z^!=Oa8v%xt-Cx{5P@V%YKD6PYzsN4kT{mOo{?PdQ2Uo;{VNv;k91vxPV>n2XzQ1Am zi1))Gt1rrkXfP})Kac^Uyl^_6L6Zva9Jw!?GW&|Ghy_E+?)^6qq_=c%^d4v1pc}VX zEu>0^N9rBtGf%C zk8O+}b)oKhdQm~-f#J1JhftfbUT+@~;lmAgTz0kIdU{iS#DPILZ_)1RJpiWa>PX^e zH{LPoL0xt9vhaum!{Xi5nGCGf)0ZUCv<=fo{kXGbp%qb76g0m>BUxOiSb%_O% z8wA}3tu&9n5s>7txLB_L5~kXZyU5}_AZbNG`rO}!Mafwd(l5b~ZrvWQz?Dm&E7ka} z?OPM!8gh{u(r#(wQ%7N{3ABB|@3BNH)}$r8b7;_zoPZl!PrXSS5*S*ma0OT%N5F*&*d&3P zi0QD?;M^B8315WTfsDNE*D8{-5)5&{MSUZ-F>%(Kw0WPXXX+Vcx^??i3`IOX{!5c2 zW*f`KtTk!(hQ-#rg>xqWJdRkpP=OL9ftrbw!|aqk&UmK8{SK_QsRo1NBg6Hq@Eics z&)h=luF)q9l(XzCik^he)EJUl@ccEB;u4R8pQ)ku&@f{+NoV)hmReB!15$VuK(}bI z9pD#@21C}9%kI-0dy%)`zH22&b6CQ3FfQqKBnY3fg58oqDoWe1EhzYcf`Rv8tkWsy zF(6jr8XK)Q%FZ;Jgf@SS%T^apCE}GtBmkzR{Z^JaD=#(qLoG~t(q`ms`=N_y6#+MB z(nC~aFj4mEN9WW8qX*pYsqcQEY=hn-+bto zlA>f=Gn0?`GuOH>X(rrb!Gn9yoli+|C8uwB;s5-}=yqmktCCW{w6O<@JF~VZMAKKk zTJ*UBWhDr+G|GJgDH3F73Nh$P#r`|iWBD^ z`D-H-S8VwE$nR!s+U^zI?E{9kO1Tig!tg6UBXL(n680SGb`PmSk|@iXHun|1^q+0H z>DJ<8hWqgmbc&3r|2Lvece`)a^t5!(+Jq7NSwVUEjirNVUHcAmw>eVl7|80g86*EI#|KEhu;RVqL&E(Xivtb;_vze zLu-XRn+PxIsNF64>DR5OYq~%f^BEM*E?AzVyH36P6sr8xg5o8lKpexL(^-bG`8Z-v z^g@s~(WK16V)w0bubH8(!mu91i$m?0TE1Ns$;UrDc@PQHrwur%r1*0 zk$Cox252Q5$j!FPH(3QGp%;p3!{fFGr@=LPB z9!%_seK0or-Es(7wm(KD%FQe+b|*9Oo*Am-{{`dbuxj%ojEM4#lby@;))Nl-rKPWq z1)N)$IoNh{p4prbmOka=ylybm+dq*VP5K0Jc5)06o=z_;dCUh4j!N0afH@pa3?zfV zj~U~Xr}fs;Q~7rLuAhsT1{HFanav4nRnVy>$zPcC0)y{S%@86X6P9NdmbkOqc+Cus zN<%J#SA-~6HJd{CdGusgpN<*axw9-sl7i=gBEr1H#Ds0CJFk*3Z^4`=h)8T!>Dna1 zjI_d%UA|zbGTh3{f6!Gs0ArhLC|v{HufT=c54*j53Bcv(o{TG0-;gaVghwy4fVM)h{u@4wpDy2sy&@c2dfIv4H zQS1ww{0B z#+;ltoI$}L2poG1*C{fW5pc0~Wj-8l8D&>IO~Q#V$kIhbSy|a7ibAz&gfrtUizOi} zz}~TA*OXba5-I}ewLUWUdyr5D;5%yU3rxfBDzY(t`G&1Wy3z#Q+Zs`cZL zjUa3_O?KTMGJh{ImX($Lm!i1uN~mea%;tn1XKk_Bc3n$ETg~S9Nx_unFS>VxqR7t@ zaC+*x*uB)RpCG@BDtjf1c)Z^4|0AsJQ>yHr0m2=sxXxC%12 zJRk5>ShW$tkk%^MQgP_oog;>QhT(&}_sy9lfLxU_(VGs1UXGdK>{roAc6(VSKpGN! z&@EhU{HHjrb)Qa(CP{qtj2SajM|uk|F!1$W2rG~jhp3+dBD|CL z#KZsTjz!kkG!LE!4F2@=b1=+cW(~nLwBBrvU#i95c6-@;fJEJkj>e2r7E8jpTIBeE z!JGMwf{dh)4jTu+(C$c^%{H0Hprs7a?}$i57#~&?u5~(F_TP2aT|O&x&p6rbWlI3^ z+2UrV-&-v4KN$dn77z3SZE5MQ1I)Or2dcgjHLl>UbtSGD@_t3(e@l`)4(_-|-=-+M za^}n#nsQJN%nUskA+@YFTiI43nx~dN40I=*PP$6V;!)@v07Do&A54VZURD55YB0L+ zeXo7pF#v|}dB0mpcKa^zTG^`wMVRR-izWUaTDvzeGiddgO8T<0veC?vm6=1h%&Jm} zA2Mc6vRG!g15vfM0WfIwmQ9zKi{C+a#rj*gDT$dMxu9Tk?c5>1N2PicLP^w;eHFoXdN z;sOkjA~t?*>nyIhr3JOMhjIG!*VPGQVq)Ath%$Li9Ga~VJB&oMoyb+3n3(8w>shm~ zc7_2kgzC9=KD&Ka!kNbcd!4+VI@N%h+FG==eVtrJ%m||{y9_3iv8z^b$|%tBBLLqH zV$vTJh2JGIZns#bYfjY@NcI32dH@Eyeb?gvp6V*%_*Y+{rp7y-B`V51)HsWDzob{S(YwfW^r+}Ns{EFE|+qwtu6Y!d+zz!sUDadkaYkIA$Zni zv&oWVEM#V%D{o?baO~J|FR4bO5#z>Q4uioP2+VY!#S;HQ2qx&lG5`jRZY?b>9m_0j z>bgE~I2`WBLVdmW57%IjF=708$g)p10*l$4VArT#SMmWcXmD?7>F(PBevX;FVg?&d zpGIwMEm~T<%U(*7gh>;xfcV?F5h>FX6BE^3uhU>%&q)Wspwfr!`v;qS)(6MGa?c3< zTHNF-LF9d!-&=PhRCddYYyb=@yk@tTtp&(^quA4!+5Orm7K{Gcl(@-$K6c$~Hk)<7 z+NPpQen|$v5WsUbo9$af2JzbG6(rKq(t?^U`v;xH_?r=cz6}In{{R@e0fXIczX6a% z#F1CB%=-Fz9IB~>)9H0jq(e%71;PLrx&cCI>8?4<@HzQAa`Y&^{Ic5!G)%s7lFwoh zaNTY;n{~f|9_pi^GvC0>(8Y^(`!2DGBsP;enp2!F)YPKxWJhvUAKza&X`;W^$7yDB zg4zo-;TX>z$ru1byZg$^%ZECh%KrfLADung*w}=cni`06hVGg_AP^~uiHV8g>RP{P z17HA9R#x_1MIoPxF5;x|P)!ZQn?rX^>?3sDStO#n5)~9cgmU_TXyO-}k^^bbw85fTRE}8Ppnug4Fq%FXaSsga|}AaNuASz+Od6 zPc<~)(4iWLbA~|eiU||^97EG0vpHVBY$#esHU#>vV2F0LAlBK0SVt3DWz*m8{l~Uj zE_mgW2Cbr14_;1Aj#Qtx?_R0);u0QK2afjM-#??6J_Ya=0lS}`yt7BE^U~7NYnY|? zyLRa4v12%V_{*UEykf$5n0y0M!k(fps3AHKtXj3@mXQsg|8aCfHAbJRMvTkvqIoZa zUzR0$>)e+rey_$1RbW_JWnR{PC10G|t87%s3g@q%V$-}p^OtQ+Q55%Mp{}m`*G7+F z6UL82RF_aSW;|iBBxty0t+JcFNVeBJ(R7Jyc-$eG9yBQq)#(ucyrFZ-OyIwT9q?e?9m3(HnAZ_D(9*nayr5{}AAgI@g`U(qdv_PBu3;5A9CP zxUpjq6BBtrI5m69e=3YWF%Xsz?K4X|*oXb5!spVEUobpcW%(Ne-wQszS}CY#-Q=BK z>E=8VUVZh|K`kwgM$i8ubp4ZmeJb7tjt-8EzAq&u<@XymJ~OScv0+FQ6J<6%o-4HQ;F>Ggr*LJ=S7?ylwNhL;s)?rpn&$xA6oK1AltJ!Sj zR}=9Eo)1rm$HT!x7&d&^^N%fEB#NuL+uEl$ymGScWJei46i+waE=QDJBRP6=qM}c z1%{=2%|C%cx>t;gV#DzKxR<`Zy42o7yS=;yV0R%eap1In{{iu4a40Iu^xLIN7d^CY z!{!w&&CLrM8yhdWe9UOX#(EcZi-g5u$ILh@?gj$sTE~-s)^lBsA!Og@e$(>;!=qI* zpJZ@Y3TOmEFoCA|+mtFTEiY&0J3YMhr%t&ym|9!E-ry2JtKx#o;K7j#1kwK!GpAUI zkRHyNz@IEd!B5V!o!OM~o*6!}*ukOHyw+^;nGd%CdRPY%I6WW>g1e} z^l0b;23-<}cm3Ha;Fag?sC4I)@&dz>k1Q_}Luz{nd>Lpy3J2;=3XRHf~5NY zBQu`rja2`dI~WFr6SJniMBv$B5EW1aF&-ScvqJ1L`#dI|218SB!w`*~xo)z}7K~Tq zO(c@8R}`K^L=yq!V}Sn5%pX`RGc@FE45q2?eP1_o%32V-!v6KJQf5pWva`Z{sObHe zsIrJ%shxT#?JSd>(x~-U?NFT_S8sdzqWo8uKK$z&4!?7k-nN+xhD&2#{JTh1=naMk zKA1KrHY!HsunFJRXP4fPQ~vwYSN-N1y*t@o<)>PU9wSIAjfx|7!M?4CcKHhx2wU&| zJZwirM~Oz?9mq<{IwC9yo4PK7411=4YA$_2aXPctuDCy}c?GfsW+F9JnT0W9ifCiU|8^8{CTE9Mo}BN$MqDtS|uGjABOij9eEIn z3{EL~^%HYy)b}8=C^Pc5%~42{J@zf%5bJEjJ)hYztTlKHhi0$%Ijr)3YFRZifxzJn zA8#|k`1TJ#jozC@q7w`}BQs}NGn4hN_p8}!`Y@!eF0w!pAfSNT%@a<3iaS3KdkN5L z1M{?Vc2<7Wxp&>iGki4j0b=jif{@+fFu?f!)u0oBQ|S?CV@oS%ug^)+;inL?^H=?(#JD-vaA?h)0ZDUX5ghuUWm z>7+oh4&PDv7k@H>#y~FGYaSsh?g}m1w?>Kb*Il_YBQ>ui3B)T&W5F!~S)*G=X65AE z?Em&`s9xzszSM%^ACMwI5VWv*SF7F!N!bPIb2<(VIeGj!^-VG93|t;9|6-C7!|;u{{VA2qENJMyxnVIm~Jh3fWa%FwIUvK zZb4>pb}x=$k5xUsdV8Ef;#CaRx}#gs4uY4vGooQ;+?7ty0|0&s!sP*s6@jpC$`WrF z`cjq8DREam)nMq%_}IR?M#AM7=VIwX0!&0o6UlVAt%W}>{H{IdA}}q#WC7R>3U`er zRgK^xrtJKTxqUjqIo-PTas~2}1k6;`udj*z2}Q{+SUxZ4&TMD7CuV;)j@UJZfQww< zi)E%-38;*dm3S)LX!XBT89uL&lb3y!s#*Tf#%vozPlSS=F%wPD#D6mUJ4PCEMPFM1mhJSlpB>`fuK+DY4 z)V{{iEy}rv{pw)vvtaO8D5m44sK#6Z(zJD&K65mk{$>4%niN8hD$;eRHAWA@kn@A( z5AXP$IooHdJZ*NLJ?cIW29IkVf9m;I+2zUw<56|)V$>h`0!~MGkAR~ForA%{1DByD zU}b(rlBV*6>iVQFRlfm)#|>ij9%Vu<$Q>5fZEHMv6fLLqIpT;NdLg0*`|i*)*m}*F z!7D5li%Z{O(?@#014GB-W9>`lH#^&M;U{Cf%h8IHM?TlbW1@DoY{0NfMt8^;XDN=T z!7J81Y6*T#TsNzFF1X)Y^=dx_?O;DVBl2I zW~-LdR=rK?vHXYwgYd}w1sNg(jOr86ki5wJ&ekpYJ>B9CNwr=~5ekOPR{-wF?xKhD z7c8VP1aZX!PsgxF`~gByfJTKM%YprGO?v-Q+}VSeye%J129B97|zTP8HoTk zf)F?mp?gQY&yuvTsBpFJ+uY$CT&=Rc5nvEbxjQ9g$RHlPoEZx>>_L1%z=r2GTgBbB zh;QE*FnC7NymV>IkhbVVfPN%_ui`Tyac6cCnU6EkzX|w2A^agy*9P68`u_pmKm8Z+ STD{2t0000#w&V`Qc*6(ZY|B_(A^wy|WFv5b8yOWBD;)){|P_Ck*>$xe|mwvY)! zkuapPPIlt4gk%lJbIz-CUFW>GzxSKZo9~PJx;`;R2HMQ%(`Wzyv#ySY@nJ*%go*L+ zwkkVx9v1ALv9=l@(Rk+pK-cJMTr&;4xs(+a&+Ek9-qb@0kx5q5GrA%v$rNrLYiaY> z$k5RT$<^++B+llbF3@S0jBp6XGKLw8Od}HyH)|A~mijCfZ&N7Ao??GtX~{NWM%x-A z+Alz5!!&B3Knu9|EZF#fN2KK)o2~Cc{#@oTK`~pcQ zM(g?KJQ=fL;|O4IMB-$#+f&nhDa4WJRdlqSV;+Hlg3(>nJV0DF&@3#Xp;ze1^ON6N z<5Wk5kC`&1d(=4`0r3)Kbx1(qSEeD)hFx^SD5HJAp3w2qQp~n5n>fviO3)a*e!`}W zvE_z*`&CZTIoKQz%MM2_TFoAZV%EkDBH9w4-6e<1XKKsX&fFO`0nz3JNuBS<#{1|g z?&mNQnDein6xznc@zcj1>wdl$42O(M8xwWK5#$_K>TtZu^?0+@T-l%0JpJ+-HL$)|)w4?~x<{m)MdfvB?uY-iuKk2ohcU z4B)Nr3;QZ_P)0oI>a{3)=Tj#12gb$!To~&e<*{E;CSvcj7*#uqy4DD=gl^o=guasu z&$C^U-m%AV*S@@7r%?X<9#XYB!V43sP(B$f%VKwaZ*~^D*24@Lo9^;Q97r~{idjMi9Fv!W#&lf>;`t**w%B%X4$vQh zNnisjS12m=y95G`J2Yx7GhiX)+4_(==bdol(znlI8dDPj7ATbkeHo%-2NqvaT&mzW z>{1BTuhM*1@Xklysyo(^IKYNa{4-{_f6(Ay1cUwjgAa2pzm~@B$-ccywQ}s*`+(sy&~2Rgdo$?!Xyt(tPj<}g&-W>_ zvid=?Xy_DD_BgrC)R)#Hgl1#;=)1*lGMtXI7aG)$-!4kNM|_+Qew}hE+`e^khYOM8 zU7&1O5!|O?OlwDR1X}J){4kI!O+d8)(FD^p=`Xdz(ep)IMyj;*`%<&?0G)vpNk9<| zjD?=ei%c($m_jQ^E0(an*~KXXX+$$^=g32&urK;;LjeVxl6tru0wtm;t8-H{cE5%tJA_y_u|UikoWg(>Bp4S=Stt(sIVTIjlJm7N4s9KJh+ex4M)@aI^y%ixo z)?pC+G8n0<@=dp8sK^8(|M}uZD{FDp3vwT0j`#F%Q0&7HKHK7>^Iif;#I20=Sw^7h z_n`slOd&meP^DiCV5N>Kf3y@l)WuXM+u|ZzQ0e(kqpS3Dp}f)=Rly-QrQf~#rxG_?i5(CVa-OspNgf&MO9?X;^102#Amd!T;tm^+f@LnrM7JN1{I+&u<2y73_g7f@4O zLOmyHZt!a~?&zcaSEVu6fV*;}NmF``O|;p@18pbyE54R*BtbG`AfB8C{d(=Lb^OC= z>;0!+yWzbh;)0VYny!xcF7?V#9}(B8EBGor=zY8IcWqS#Co~(1BZ2V#_r%sgme@ZyQI#i%9R)5^K&T_;<2&Ko zmAcx5py_S_F;*p~z5o$`^Dygqs-d-6Eo0?pxZ^k~D%S0x|KkM;=q4AMlT%T8`sX}L zRZz-2L}~dj>fFa;V39ImdZz6rgU_?i@#213{NMRDWtTtZtuF$uFbUIlk5xBalIp~j zQR|_LvQi-fXHCFkTef{T)bFA9=1NGPg3`s*JqKT!uZZA1&|8u%tfPdm4;JCTITRNO z?BGPqHUN&!`If+-h)k)_GjH)NcFv;pAfeTU2vN&c)#dj5fD1YnUFRs5Ftg zBws~(cyjyIL@1>~VAQ>+W+|vc0Gd|K&7y`1C(?(XkKTM{62=+c-$oSN^e9jRI>SS< z*ud~LiWf`7YOU{b!rsd4S&7TXpn}2MnN~Ba&Y5E(B9k0h6P< zC!TcI*o@SY>$kED5dL0qN5*xKd1icYynbyCf5lj~C+YlNo1o^85g8z)7Krx|ge}Bz z3Xg29r}IuN+^wkpqT;`{bOE$oW;wUamfT$|rtr`|UmQ^@reZs)U+>Qcv_Gs`Q@u1S zKkGXd(jEpywO4z3V(2Nu+FFlp9BmGKhbO#&-X3jE;r^CgX46LG^eg_`o1W&Cvp(9u z0}1-4SVtbspxoBmLC))SfAjr|t8`M`do)rr^Jb@vZxr>=3G!uP{?P_uR@|i}GA*>| zBujG3j^(GCx;g4J`)`tf60#XDv->ELsQEG?hv1VJ!y@Ux%BAk!MrEA!O{zAT`G zYCd>BbVEh={ofaK8hJIe8dH~4xBjCqZ&xQt-xY#+pjwOV|8}4e5|bBA5!gQn=Y#*L zqn%;)YU^|w{t6q<^7XQldS|MDwLtx}W%aun*#i<6Up@T;m;WVKUfR^v40EKwC)3hh z?JBwRg(@suR7PzTGNe9!MPdpuZ!+Y8=fala-~K=jT(oFjTl#IglP6f qUc5Y323SBR2bmID3;(~+LDLYWH{0u`yZoWe0$oi54U(FD#J>Q}b1^ai literal 0 HcmV?d00001 diff --git a/baselib/src/main/res/drawable-xhdpi/ic_stop_point.png b/baselib/src/main/res/drawable-xhdpi/ic_stop_point.png new file mode 100644 index 0000000000000000000000000000000000000000..6084c2a1612b1b72e57cac6f68c3b2fca594f539 GIT binary patch literal 2782 zcmbW3X*d-A7RP^M%veHpW63trAPq*5B|~ZuvM(iuKeC2w*+(S%Qe>Gzk{C30lPpu& zvP*VZuO`_eByx4{+xzOiIOjaiIiKe_=Q(e_-#8;f94oT`GXQ{9S4Z3AxDx&bBm6jj zxMbgbTp+$CI4$tHPiP4M<}6)pO|yHptIr}5xo`7#wDhm^di)xE!mBwHaQo!O*!bHU z>~7lflAc^7PE(|wyNR);$72B#mUx3&*$0IP?O=$(gOPNXq#HG@*x{n9ZDT(kT0om7 z)x+1%zQG#mlZ?g!y=d}KA%}~2ujxSN!1XZNOh}&H46S;-uczsEGrg~CIdHwzBqa<7 zy<&0z0TeB%@x1{y;#(EkPD{iFvlObhZwp3Z{B zkF!;Ic*_;Z=j3JCQLEbh_*DTS|iKT^}H<<}xa$R^SUGR1R0smg%K8;O$xOeF}K+c3Z5Vn?EEmwM)$ zQTeU_MOo^lx1C@qXnh9dV5LuN3u>uCu31@b&3J?0iH@c-Jh6N?zOfy-<%}E#!ezUE zXC(Oxw#rpJ2ip`wOXe{+HQ{;Pi1$aUg^ad(!3>WN0OhXID(w~& z)4B|l17D?N8f>BOTnr2e|2bDErXxg{PxoW1#b>(yd0Fm^_nhWSInAV50EF&zL^G>K z&@I%RPVjhXrClR#Nh-T8P1A;;8u|=Do(_q^n_NAx)s~?9uRH{JP>~{et@yyF9)D;%e~tshzxLH2h;-cQL2Vu7&=SV%9(J%{H>(r zXp=Cs1KDasr$|9kXrY^hjjyh$x5BYv?&LE?o=uX z#roMHhs(7-a_E&>_$Elz)i^OPL3%v=MTCJO8)3F$UJ`W|^t`fj3Ynfu*hG@griWLg zLybDe1mnJy%6H}0yH^#FYz&LI2~nm#Vg3V55$yKMUtU_39wpNfyh!o++=K#RIAWHS z^av9kV?G;AO9(9abX6Yo*+F_NGM;W?8tEVlzR#RCF+BSyC_Z8&*ZiM-Vtip@ii`|3 zG4qGhrYnz%6f{4}$0BM&mPeOg#L{xMeQ18-BUCx)XPTw(a~8s-(V(cv-EK+8m1R=` zVt27?p7t}T`2ZyWw)LCZ4Orn4 z^&DdKt%AVRwgTa;(<8aMG@iYBTEa5&CiDjbj`!AWSwe<_F5)H=tUY$Q@zTK=62mWk z(FHYz_w&U}2vuF!=~0GG=&Z^d{G^GJ_#;jiPg`W}utcR-r5doNDd9u)m(MBI?9C!` zHTE)#rH;{wmQkOGyyE*Z^~hyIvftN}#)kr+Kzj6SKoUHER;2}rx2^v6{HAd0JDl(0 zI}Kd<&2V_93OaJLGpfi}1Rzs(W9db&pPGg`Rz>ON> z6xiG%v&Q_nkK(^yhJYoW*2Z&gbnS+EkwdxY_O5%W@ceHod9aNW*{2gd9bxgg=pSk2 z<_G9}CHMZSp1a=J!rFBbcw8S}Ug8QC2FPFT%PZaJn>_x+WG8dkR_JC@=ZG|5jM{zE zM`ZE)c-p}OiNaE5WFDxN<5~*WA@2uZqd~a@wD$E6R#%OwcV0}@T+RqH_IT)#4hCow z*Z6C!B{}|4b%5=w+ePE%^ls?^)YQ{lL#egLU9E@|vq(NQyJ$i0zkNmws=*KqN^qPd zdWsn54Zf{#^ZgFxE`V};>aQK^Z+WdZIJE7qtC4=!&xO3IoMNcx*lWBOhP1(-+Mz5|1_k zZ2E#4K^4-;r8+%(2wRBcbSm0BW0gwcCde(`C;kzO%vg7EB`A}z@oMYdSH_X`!QhV1 zG>&&CE2gc0dR@&f)b{1=MG*b*=bJu@3#HL!J4Da*($cVN=}#Lsod+n;mr zz^3HKT^oT`HtMu~aE^hHu%ObV*Wy=8?S|1|F|e~toBK8)9KL7Y30opI9Wldflbq5DQ9cUC z2T(|DSZ^O9Wpb-DZU%Xto>0Bcps=$lx}wM)?Y1$LYj?|b{guTcB?iLI%W(%Y32*FF zAxm0R%#c~wSz)632LtIo>%8YTO;0K1I1E%Z+Kr=zu-20?P&qT~I|DDt4U_TvH{RvO z!s*)QkB5WbLWyvKQEaovzL@j$XBT6KIuIRE=IkR15Kbt?W^bz%;GIsWOEJogm`DFd(I0)gzEUI$p{6qbu3Gxl z^X@ME3(s2x4m$P?Ud)A;q`$7z%gt$2tfGIW^N z`Tf*FZDyxFenOAeA^suC?KpNd*I%t60Ew0-ry|!F;_ihcRh094t$iIyzx=zCuFKcyu_a+A{;-{u^XRU?O_2EwFgHh iF8u#a?mu?#s6}XgB(HX`-}2b70^KWy+OM_n_x}wknGDbX literal 0 HcmV?d00001 diff --git a/baselib/src/main/res/layout/dialog_bottom_setting.xml b/baselib/src/main/res/layout/dialog_bottom_setting.xml index ee5e209..45845db 100755 --- a/baselib/src/main/res/layout/dialog_bottom_setting.xml +++ b/baselib/src/main/res/layout/dialog_bottom_setting.xml @@ -1,6 +1,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file