62 lines
2.3 KiB
Kotlin
62 lines
2.3 KiB
Kotlin
package be.mygod.vpnhotspot.manage
|
|
|
|
import android.content.ActivityNotFoundException
|
|
import android.content.Context
|
|
import android.content.Intent
|
|
import android.os.Build
|
|
import android.provider.Settings
|
|
import android.view.View
|
|
import androidx.databinding.BaseObservable
|
|
import androidx.recyclerview.widget.RecyclerView
|
|
import be.mygod.vpnhotspot.App.Companion.app
|
|
import be.mygod.vpnhotspot.databinding.ListitemManageBinding
|
|
import timber.log.Timber
|
|
|
|
object ManageBar : Manager() {
|
|
object Data : BaseObservable() {
|
|
/**
|
|
* It's hard to change tethering rules with Tethering hardware acceleration enabled for now.
|
|
*
|
|
* See also:
|
|
* android.provider.Settings.Global.TETHER_OFFLOAD_DISABLED
|
|
* https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r1/services/core/java/com/android/server/connectivity/tethering/OffloadHardwareInterface.java#45
|
|
* https://android.googlesource.com/platform/hardware/qcom/data/ipacfg-mgr/+/master/msm8998/ipacm/src/IPACM_OffloadManager.cpp
|
|
*/
|
|
val offloadEnabled get() = Build.VERSION.SDK_INT >= 27 && Settings.Global.getInt(app.contentResolver,
|
|
"tether_offload_disabled", 0) == 0
|
|
}
|
|
class ViewHolder(binding: ListitemManageBinding) : RecyclerView.ViewHolder(binding.root), View.OnClickListener {
|
|
init {
|
|
binding.data = Data
|
|
binding.root.setOnClickListener(this)
|
|
}
|
|
|
|
override fun onClick(v: View?) = start(itemView.context)
|
|
}
|
|
|
|
override val type: Int get() = VIEW_TYPE_MANAGE
|
|
|
|
fun start(context: Context) {
|
|
try {
|
|
context.startActivity(Intent()
|
|
.setClassName("com.android.settings", "com.android.settings.Settings\$TetherSettingsActivity"))
|
|
} catch (e: ActivityNotFoundException) {
|
|
startAlternative(context, e)
|
|
} catch (e: SecurityException) {
|
|
startAlternative(context, e)
|
|
}
|
|
}
|
|
|
|
private fun startAlternative(context: Context, e: Exception) {
|
|
try {
|
|
context.startActivity(Intent()
|
|
.setClassName("com.android.settings", "com.android.settings.TetherSettings"))
|
|
Timber.w(e)
|
|
} catch (e: ActivityNotFoundException) {
|
|
Timber.w(e)
|
|
} catch (e: SecurityException) {
|
|
Timber.w(e)
|
|
}
|
|
}
|
|
}
|