Commit b53fd3fa authored by sheteng's avatar sheteng

版本1.0.0

parent ac0fa240
......@@ -24,6 +24,11 @@
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <!-- 用于 log 日志 -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:ignore="QueryAllPackagesPermission"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" tools:node="remove"/>
<!-- <uses-permission android:name="android.permission.READ_SMS" tools:node="remove"/>-->
<uses-permission android:name="android.permission.READ_CALENDAR" tools:node="remove"/>
<uses-permission android:name="android.permission.READ_CONTACTS" tools:node="remove"/>
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" tools:node="remove"/>
<!-- 配置可查询包名, 配置测试游戏必须添加 添加 -->
<queries>
<package android:name="com.tencent.mm" />
......
......@@ -5,7 +5,6 @@ import android.content.res.Configuration
import android.os.Environment
import androidx.multidex.MultiDex
import com.ccwangluo.accelerator.ui.MainActivity
import com.ccwangluo.accelerator.utils.PhoneUtils
import com.ccwangluo.accelerator.utils.SysUtils
import com.github.shadowsocks.Core
import com.hjq.toast.ToastUtils
......
......@@ -9,7 +9,6 @@ import com.ccwangluo.accelerator.ui.home.AcceleratorFragment
import com.ccwangluo.accelerator.ui.home.AccelertorViewModel
import com.ccwangluo.accelerator.ui.home.MineFragment
import com.ccwangluo.accelerator.ui.home.NewsFragment
import com.ccwangluo.accelerator.utils.AcceleratorUtils
import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.datareport.DataRePortUtils
import com.google.android.material.bottomnavigation.BottomNavigationView
......
......@@ -8,12 +8,9 @@ import android.hardware.Sensor
import android.hardware.SensorEventListener
import android.hardware.SensorManager
import android.os.Bundle
import android.os.Looper
import android.util.Log
import android.view.KeyEvent
import androidx.appcompat.app.AlertDialog
import androidx.lifecycle.ViewModelProvider
import com.ccwangluo.accelerator.R
import com.ccwangluo.accelerator.receiver.AppDownloadReceiver
import com.ccwangluo.accelerator.ui.dialog.PermissionDialog
import com.ccwangluo.accelerator.ui.dialog.PrivacyDialog
......@@ -23,20 +20,15 @@ import com.ccwangluo.accelerator.utils.AcceleratorUtils
import com.ccwangluo.accelerator.utils.PhoneUtils
import com.ccwangluo.accelerator.utils.datareport.DataRePortUtils
import com.ccwangluo.cc_quickly.utils.SettingSPUtils
import com.github.shadowsocks.bg.AuthManager
import com.github.shadowsocks.http.HttpConfig
import com.github.shadowsocks.utils.StartService
import com.hjq.toast.ToastUtils
import com.tencent.android.tpush.XGIOperateCallback
import com.tencent.android.tpush.XGPushManager
import com.tencent.map.geolocation.TencentLocation
import com.tencent.map.geolocation.TencentLocationListener
import com.tencent.map.geolocation.TencentLocationManager
import com.tencent.tauth.Tencent
import com.umeng.socialize.UMShareAPI
import com.xuexiang.xpage.base.XPageActivity
import com.xuexiang.xpage.core.PageOption
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
import com.xuexiang.xutil.system.PermissionUtils
import fm.jiecao.jcvideoplayer_lib.JCVideoPlayer
......@@ -120,6 +112,7 @@ class MainActivity() : XPageActivity() {
}
}).request()
}
private fun initPhoneUtils() {
......
......@@ -6,6 +6,7 @@ import android.content.DialogInterface
import android.database.Cursor
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.lifecycleScope
import com.hjq.toast.ToastUtils
import com.xuexiang.xui.widget.dialog.materialdialog.GravityEnum
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
import kotlinx.coroutines.Dispatchers
......@@ -25,12 +26,17 @@ class DownloadDialog(
.contentGravity(GravityEnum.CENTER)
.progress(false, 100, true)
.cancelListener(
{ })
{ ToastUtils.show("下载中") })
.cancelable(false)
.negativeText("隐藏")
.onPositive { dialog, which ->
cancellDownload()
}
.positiveText("取消")
.showListener({})
.show()
context.lifecycleScope.launch(Dispatchers.IO) {
while (dialog.progressBar.progress < 100) {
while (dialog.progressBar.progress < 100 && dialog.isShowing) {
val progress = getDownloadProgress()
withContext(Dispatchers.Main) {
dialog.setProgress(progress.toInt())
......@@ -38,11 +44,21 @@ class DownloadDialog(
delay(500)
}
withContext(Dispatchers.Main) {
if (dialog.isShowing) {
dialog.dismiss()
}
}
}
}
fun cancellDownload() {
try {
downloadManager.remove(downloadId)
} catch (e: Exception) {
}
}
fun getDownloadProgress(): Float {
......
......@@ -20,10 +20,9 @@ import com.ccwangluo.accelerator.model.Plugin
import com.ccwangluo.accelerator.ui.news.NewsCollectionAdapter
import com.ccwangluo.accelerator.ui.web.CommonWebViewFragment
import com.ccwangluo.accelerator.utils.AcceleratorUtils
import com.ccwangluo.accelerator.utils.LoginUtils
import com.ccwangluo.accelerator.utils.DownloadUtils
import com.ccwangluo.accelerator.utils.SysUtils
import com.ccwangluo.accelerator.utils.datareport.DataRePortUtils
import com.github.shadowsocks.http.HttpConfig
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
......@@ -141,7 +140,7 @@ class NewsFragment : XPageFragment() {
itemData.url?.let {
DataRePortUtils.report("st_game_down_clk", mapOf("scene" to "3"))
activity?.let { it1 ->
SysUtils.downloadFile(it1, it)
DownloadUtils.downloadFile(it1, it)
}
}
}
......
......@@ -8,8 +8,6 @@ import com.ccwangluo.accelerator.utils.SysUtils
import com.ccwangluo.accelerator.utils.http.HttpGo
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.security.auth.callback.Callback
class NewsViewModel : ViewModel() {
......
package com.ccwangluo.accelerator.ui.web
import android.os.Bundle
import android.webkit.JavascriptInterface
import com.ccwangluo.accelerator.utils.LoginUtils
import com.github.shadowsocks.http.HttpConfig
import com.ccwangluo.cc_quickly.utils.SettingSPUtils
import com.ccwangluo.cc_quickly.utils.XToastUtils
import com.just.agentweb.core.AgentWeb
import com.xuexiang.xutil.app.AppUtils
......
......@@ -2,9 +2,7 @@ package com.ccwangluo.accelerator.ui.web
import android.os.Bundle
import android.webkit.JavascriptInterface
import com.ccwangluo.accelerator.utils.LoginUtils
import com.github.shadowsocks.http.HttpConfig
import com.ccwangluo.cc_quickly.utils.SettingSPUtils
import com.ccwangluo.cc_quickly.utils.XToastUtils
import com.just.agentweb.core.AgentWeb
import com.xuexiang.xpage.base.XPageFragment
......@@ -14,9 +12,7 @@ import android.content.Intent
import android.net.Uri
import android.os.Handler
import android.provider.Settings
import com.ccwangluo.accelerator.utils.AcceleratorUtils
import com.ccwangluo.accelerator.utils.ShareUtils
import com.ccwangluo.accelerator.utils.SysUtils
import com.ccwangluo.accelerator.utils.*
import com.ccwangluo.accelerator.utils.datareport.DataRePortUtils
import com.github.shadowsocks.bg.AuthManager
import com.github.shadowsocks.bg.BaseService
......@@ -49,11 +45,11 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
}
@JavascriptInterface
fun openWebview(url: String, noNeedToken: Boolean) {
fun openWebview(url: String, showTitle: Boolean) {
LoginUtils.token?.let {
val params = Bundle()
params.putString(CommonWebViewFragment.WEBVIEW_URL_KEY, HttpConfig.UI_MAIN_URL + url)
params.putBoolean(CommonWebViewFragment.NOEEDTOKEN, noNeedToken)
params.putBoolean(CommonWebViewFragment.SHOW_TITLE, showTitle)
xPageFragment.openPage(CommonWebViewFragment::class.java, params)
} ?: let {
xPageFragment.context?.let { it1 ->
......@@ -77,14 +73,16 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
xPageFragment.context?.startActivity(intent)
}
/**
* 跳转协议
*/
@JavascriptInterface
fun openWebviewByWholeUrl(url: String) {
fun openWebviewByWholeUrl(url: String,showTitle: Boolean) {
val params = Bundle()
if (url.startsWith("http:") || url.startsWith("https:")) {
params.putString(CommonWebViewFragment.WEBVIEW_URL_KEY, url)
params.putBoolean(CommonWebViewFragment.SHOW_TITLE, showTitle)
} else {
params.putString(
CommonWebViewFragment.WEBVIEW_URL_KEY,
......@@ -94,6 +92,14 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
xPageFragment.openPage(CommonWebViewFragment::class.java, params)
}
/**
* 跳转协议
*/
@JavascriptInterface
fun openWebviewByWholeUrl(url: String) {
openWebviewByWholeUrl(url,false)
}
//打开系统设置
@JavascriptInterface
fun openSysSetting() {
......@@ -361,7 +367,7 @@ class AndroidInterface(val xPageFragment: XPageFragment, val agentWeb: AgentWeb)
@JavascriptInterface
fun downloadFile(url: String) {
xPageFragment.activity?.let {
SysUtils.downloadFile(it, url)
DownloadUtils.downloadFile(it, url)
}
}
......
package com.ccwangluo.accelerator.ui.web
import android.graphics.Bitmap
import android.graphics.Color
import android.util.Log
import android.text.TextUtils
import android.view.KeyEvent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.WebChromeClient
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.FrameLayout
import androidx.fragment.app.Fragment
import com.ccwangluo.accelerator.databinding.FragmentWebviewBinding
......@@ -33,13 +37,25 @@ class CommonWebViewFragment : XPageFragment() {
return binding.root
}
private var show_title = false
override fun initViews() {
val url = arguments?.getString(WEBVIEW_URL_KEY)
val noNeedToken = arguments?.getBoolean(NOEEDTOKEN) ?: false
show_title = arguments?.getBoolean(SHOW_TITLE) ?: false
if (show_title) {
binding.webBar.visibility = View.VISIBLE
}
binding.webBack.setOnClickListener {
if (agentWeb?.back() == false || binding.webTitle.text.contains("订单")) {
popToBack()
}
}
binding.webClose.setOnClickListener {
popToBack()
}
agentWeb =
url?.let {
var weburl = it
if (!noNeedToken) {
if (weburl.contains("?")) {
weburl = weburl + "&channel=${SysUtils.getChannel()}"
} else {
......@@ -48,7 +64,6 @@ class CommonWebViewFragment : XPageFragment() {
LoginUtils.token?.let {
weburl = weburl + "&token=${it}"
}
}
createAgentWeb(this, binding.commonWebview, weburl)
}
agentWeb?.getJsInterfaceHolder()
......@@ -67,12 +82,42 @@ class CommonWebViewFragment : XPageFragment() {
)
)
.useDefaultIndicator(Color.parseColor("#3CA4FD"), 3)
.setWebChromeClient(mWebChromeClient)
.setWebViewClient(mWebViewClient)
.setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.ASK)
.createAgentWeb()
.ready()
.go(url)
}
val mWebViewClient: WebViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
println("webview " + url)
}
}
val mWebChromeClient: WebChromeClient = object : WebChromeClient() {
override fun onProgressChanged(view: WebView?, newProgress: Int) {
//do you work
println("webview process" + newProgress)
}
override fun onReceivedTitle(view: WebView?, title: String) {
var title = title
super.onReceivedTitle(view, title)
if (show_title && !TextUtils.isEmpty(title)) {
if (title.length > 10) {
title = title.substring(0, 10) + "..."
}
}
binding.webTitle.setText(title)
if (agentWeb?.webCreator?.webView?.canGoBack() == true) {
binding.webClose.visibility = View.VISIBLE
} else {
binding.webClose.visibility = View.GONE
}
}
}
override fun initListeners() {
}
......@@ -136,6 +181,6 @@ class CommonWebViewFragment : XPageFragment() {
companion object {
val WEBVIEW_URL_KEY = "WEBVIEW_URL_KEY"
val NOEEDTOKEN = "NOEEDTOKEN"
val SHOW_TITLE = "SHOW_TITLE"
}
}
\ No newline at end of file
......@@ -37,7 +37,6 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import timber.log.Timber
import kotlin.math.roundToInt
......
package com.ccwangluo.accelerator.utils
import android.Manifest
import android.app.DownloadManager
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Environment
import androidx.core.content.FileProvider
import androidx.fragment.app.FragmentActivity
import com.ccwangluo.accelerator.ui.dialog.DownloadDialog
import com.hjq.toast.ToastUtils
import com.xuexiang.xutil.system.PermissionUtils
import java.io.File
object DownloadUtils {
fun downloadFile(activity: FragmentActivity, url: String) {
if (!PermissionUtils.isGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
ToastUtils.show("下载需要打开存储权限")
PermissionUtils.permission(Manifest.permission.WRITE_EXTERNAL_STORAGE.toString())
.rationale({
PermissionUtils.openAppSettings()
}).request()
return
}
var filename = url.split("/").last()
val file = File(
Environment.getExternalStorageDirectory().absolutePath + "/${Environment.DIRECTORY_DOWNLOADS}",
filename
)
if (file.exists()) {
installApp(activity, file)
return
}
val downloadManager = activity.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
val request =
DownloadManager.Request(Uri.parse(url)) //添加下载文件的网络路径
request.setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS,
filename
) //添加保存文件路径与名称
request.setTitle("下载中") //添加在通知栏里显示的标题
// request.setDescription("下载中") //添加在通知栏里显示的描述
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE or DownloadManager.Request.NETWORK_WIFI) //设置下载的网络类型
request.setVisibleInDownloadsUi(false) //是否显示下载 从Android Q开始会被忽略
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) //下载中与下载完成后都会在通知中显示| 另外可以选 DownloadManager.Request.VISIBILITY_VISIBLE 仅在下载中时显示在通知中,完成后会自动隐藏
val id = downloadManager.enqueue(request) //加入队列,会返回一个唯一下载id
DownloadDialog(activity, downloadManager, id).show()
}
fun installApp(context: Context, apkFile: File) {
try {
val intent = Intent(Intent.ACTION_VIEW)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
val contentUri: Uri = FileProvider.getUriForFile(
context,
"com.ccwangluo.accelerator.fileprovider",
apkFile
) //authorities就是provider里声明的authorities
intent.setDataAndType(contentUri, "application/vnd.android.package-archive")
} else {
intent.setDataAndType(
Uri.fromFile(apkFile),
"application/vnd.android.package-archive"
)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
context.startActivity(intent)
} catch (e: Exception) {
}
}
}
\ No newline at end of file
......@@ -5,7 +5,6 @@ import android.app.DownloadManager
import android.content.Context
import android.content.Context.DOWNLOAD_SERVICE
import android.content.Intent
import android.content.pm.PackageInfo
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.net.Uri
......@@ -13,13 +12,12 @@ import android.os.Build
import android.os.Environment
import android.text.TextUtils
import android.util.DisplayMetrics
import androidx.core.content.FileProvider
import androidx.fragment.app.FragmentActivity
import com.ccwangluo.accelerator.ui.dialog.DownloadDialog
import com.ccwangluo.cc_quickly.utils.SettingSPUtils
import com.ccwangluo.cc_quickly.utils.XToastUtils
import com.hjq.toast.ToastUtils
import com.mcxiaoke.packer.helper.PackerNg
import com.sdk.base.framework.bean.PInfo
import com.tencent.mmkv.MMKV
import com.xuexiang.xpage.base.XPageActivity
import com.xuexiang.xpage.base.XPageFragment
......@@ -27,7 +25,7 @@ import com.xuexiang.xutil.app.AppUtils
import com.xuexiang.xutil.net.NetworkUtils
import com.xuexiang.xutil.system.DeviceUtils
import com.xuexiang.xutil.system.PermissionUtils
import java.security.Permission
import java.io.File
import java.text.SimpleDateFormat
import java.util.*
......@@ -70,7 +68,12 @@ object SysUtils {
* 判断包是否安装
*/
fun isPackageInstall(context: Context, packageName: String): Boolean {
return AppUtils.isInstallApp(packageName)
try {
return context.getPackageManager().getPackageInfo(packageName, 0) != null
} catch (e: Exception) {
}
return false
}
fun getnetQuality(delay: Int): String {
......@@ -134,38 +137,6 @@ object SysUtils {
}
fun downloadFile(activity: FragmentActivity, url: String) {
if (!PermissionUtils.isGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
ToastUtils.show("下载需要打开存储权限")
PermissionUtils.permission(Manifest.permission.WRITE_EXTERNAL_STORAGE.toString()).rationale({
PermissionUtils.openAppSettings()
}).request()
return
}
val downloadManager = activity.getSystemService(DOWNLOAD_SERVICE) as DownloadManager
val request =
DownloadManager.Request(Uri.parse(url)) //添加下载文件的网络路径
var filename = url.split("/").last()
ToastUtils.show("开始下载")
request.setDestinationInExternalPublicDir(
Environment.DIRECTORY_DOWNLOADS,
filename
) //添加保存文件路径与名称
request.setTitle("下载中") //添加在通知栏里显示的标题
// request.setDescription("下载中") //添加在通知栏里显示的描述
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE or DownloadManager.Request.NETWORK_WIFI) //设置下载的网络类型
request.setVisibleInDownloadsUi(false) //是否显示下载 从Android Q开始会被忽略
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) //下载中与下载完成后都会在通知中显示| 另外可以选 DownloadManager.Request.VISIBILITY_VISIBLE 仅在下载中时显示在通知中,完成后会自动隐藏
val id = downloadManager.enqueue(request) //加入队列,会返回一个唯一下载id
DownloadDialog(activity, downloadManager, id).show()
}
fun joinQQGroup(context: Context) {
val key = "5CmyFzMWyucgmmLTM7JLG_sSArmaFQxT"
......@@ -224,19 +195,4 @@ object SysUtils {
return MMKV.defaultMMKV().decodeString("device_uuid", null)
}
fun getInstalledApps(context: Context, packageName: String): Int {
val packs: List<PackageInfo> = context.getPackageManager().getInstalledPackages(0)
for (i in packs.indices) {
val p = packs[i]
if (p.versionName == null) {
continue
}
if (packageName.equals(p.packageName)) {
return p.versionCode
}
}
return -1
}
}
\ No newline at end of file
......@@ -73,12 +73,13 @@
<TextView
android:gravity="center"
android:id="@+id/premission_know"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:layout_marginBottom="20dp"
android:paddingTop="15dp"
android:paddingBottom="20dp"
android:text="我知道了"
android:textColor="#FF3CA4FD"
android:textSize="15sp" />
......
......@@ -3,12 +3,50 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:paddingTop="30dp"
android:orientation="vertical">
<LinearLayout
android:id="@+id/web_bar"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_marginRight="20dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/web_back"
android:layout_width="17dp"
android:layout_height="17dp"
android:src="@drawable/back_icon" />
<ImageView
android:visibility="gone"
android:id="@+id/web_close"
android:layout_width="17dp"
android:layout_height="17dp"
android:layout_marginLeft="20dp"
android:src="@mipmap/btn_close" />
<TextView
android:id="@+id/web_title"
android:layout_marginLeft="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLength="15"
android:maxLines="1"/>
</LinearLayout>
<FrameLayout
android:layout_marginTop="30dp"
android:id="@+id/common_webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent"
/>
</LinearLayout>
\ No newline at end of file
......@@ -7,8 +7,6 @@
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowNoTitle">true</item><!--隐藏标题栏-->
<item name="android:background">@color/white</item>
<item name="android:textColor">@color/black</item>
<item name="colorPrimary">@color/black</item>
<item name="buttonBarButtonStyle">@style/ButtonStyle</item>
<item name="android:textColorPrimary">@color/black</item>
<item name="android:windowBackground">#00000000</item><!--这儿也很重要啊,我这儿用了一张透明的.9.png的图,当然用#00000000也是可以的,否则的话这儿出来后有一个黑色的背景-->
......@@ -19,7 +17,8 @@
<item name="android:layout_width">?attr/xui_btn_view_width</item>
<item name="android:layout_height">?attr/xui_btn_view_height</item>
<item name="android:textSize">?attr/xui_btn_view_text_size</item>
<item name="android:textColor">@color/black</item>
<item name="android:textColor">@color/colorPrimaryDark</item>
<item name="android:textColorPrimary">@color/colorPrimaryDark</item>
<item name="android:gravity">center</item>
<item name="android:background">@color/white</item>
</style>
......
......@@ -21,7 +21,7 @@
<!-- 自定义自己的主题样式 -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimary</item>
<item name="colorAccent">@color/black</item>
<item name="colorAccent">@color/colorPrimaryDark</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">false</item>
<!-- <item name="android:background">@mipmap/splash</item>-->
......
......@@ -5,4 +5,10 @@
<root-path name="opensdk_root" path=""/>
<external-files-path name="opensdk_external" path="Images/tmp"/>
<external-path name="external_storage_root" path="."/>
<external-path
name="external"
path="./Download"/>
<files-path
name="files"
path="."/>
</paths>
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment