Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2b8039d9 authored by Guillaume Jacquart's avatar Guillaume Jacquart
Browse files

make IPScrambling work standalone - basic

parent 7b552d03
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@ dependencies {
    implementation project(':fakelocation')
    implementation 'foundation.e:privacymodule.trackerfilter:0.7.0'
    implementation 'foundation.e:privacymodule.api:1.1.0'
    implementation 'foundation.e:privacymodule.tor:0.2.4'
    implementation 'foundation.e:privacymodule.tor:1.0.0-dev'


    //    implementation Libs.Kotlin.stdlib
+12 −4
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@

package foundation.e.privacycentralapp.domain.usecases

import android.content.Intent
import foundation.e.privacycentralapp.data.repositories.AppListsRepository
import foundation.e.privacycentralapp.data.repositories.LocalStateRepository
import foundation.e.privacycentralapp.domain.entities.InternetPrivacyMode
@@ -132,11 +133,10 @@ class IpScramblingStateUseCase(
        when {
            isQuickPrivacyEnabled && isIpScramblingEnabled -> when (localStateRepository.internetPrivacyMode.value) {
                InternetPrivacyMode.REAL_IP, InternetPrivacyMode.REAL_IP_LOADING -> {
                    val intent = ipScramblerModule.prepareAndroidVpn()
                    if (intent != null) {
                        permissionsPrivacyModule.setVpnPackageAuthorization(appDesc.packageName)
                    val intent = prepareAndroidVpn()
                    if (intent == null) {
                        ipScramblerModule.start(enableNotification = true)
                    }
                    ipScramblerModule.start(enableNotification = false)
                }
                else -> {}
            }
@@ -147,6 +147,14 @@ class IpScramblingStateUseCase(
        }
    }

    fun prepareAndroidVpn(): Intent? {
        val intent = ipScramblerModule.prepareAndroidVpn()
        return if (intent != null &&
//            permissionsPrivacyModule.setVpnPackageAuthorization(appDesc.packageName)
            false) null
        else intent
    }

    private fun map(status: IIpScramblerModule.Status): InternetPrivacyMode {
        return when (status) {
            IIpScramblerModule.Status.OFF -> InternetPrivacyMode.REAL_IP
+7 −6
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.fragment.app.viewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
@@ -60,9 +61,9 @@ class InternetPrivacyFragment : NavToolbarFragment(R.layout.fragment_internet_ac
            .show()
    }

    // private val launchAndroidVpnDisclaimer = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
    //     viewModel.submitAction(InternetPrivacyFeature.Action.AndroidVpnActivityResultAction(it.resultCode))
    // }
    private val launchAndroidVpnDisclaimer = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
        viewModel.submitAction(InternetPrivacyViewModel.Action.AndroidVpnActivityResultAction(it.resultCode))
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
@@ -135,9 +136,9 @@ class InternetPrivacyFragment : NavToolbarFragment(R.layout.fragment_internet_ac
                        is InternetPrivacyViewModel.SingleEvent.ErrorEvent -> {
                            displayToast(event.error.toText(requireContext()))
                        }
                        // is InternetPrivacyViewModel.SingleEvent.StartAndroidVpnActivityEvent -> {
                        //     launchAndroidVpnDisclaimer.launch(event.intent)
                        // }
                        is InternetPrivacyViewModel.SingleEvent.StartAndroidVpnActivityEvent -> {
                            launchAndroidVpnDisclaimer.launch(event.intent)
                        }
                    }
                }
            }
+29 −22
Original line number Diff line number Diff line
@@ -17,6 +17,9 @@

package foundation.e.privacycentralapp.features.internetprivacy

import android.app.Activity
import android.content.Intent
import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import foundation.e.privacycentralapp.R
@@ -109,25 +112,10 @@ class InternetPrivacyViewModel(

    fun submitAction(action: Action) = viewModelScope.launch {
        when (action) {
            // action is InternetPrivacyFeature.Action.AndroidVpnActivityResultAction ->
            //     if (action.resultCode == Activity.RESULT_OK) {
            //         if (state.mode in listOf(
            //                 InternetPrivacyMode.REAL_IP,
            //                 InternetPrivacyMode.REAL_IP_LOADING
            //             )
            //         ) {
            //             ipScramblingStateUseCase.toggle(hideIp = true)
            //             flowOf(InternetPrivacyFeature.Effect.ModeUpdatedEffect(InternetPrivacyMode.HIDE_IP_LOADING))
            //         } else {
            //             flowOf(InternetPrivacyFeature.Effect.ErrorEffect("Vpn already started"))
            //         }
            //     } else {
            //         flowOf(InternetPrivacyFeature.Effect.ErrorEffect("Vpn wasn't allowed to start"))
            //     }

            is Action.UseRealIPAction -> actionUseRealIP()

            is Action.UseHiddenIPAction -> actionUseHiddenIP()
            is Action.AndroidVpnActivityResultAction -> actionAndroidVpnActivityResult(action)

            is Action.ToggleAppIpScrambled -> actionToggleAppIpScrambled(action)
            is Action.SelectLocationAction -> actionSelectLocation(action)
@@ -138,12 +126,31 @@ class InternetPrivacyViewModel(

    private fun actionUseRealIP() {
        ipScramblingStateUseCase.toggle(hideIp = false)
        //flowOf(InternetPrivacyFeature.Effect.ModeUpdatedEffect(InternetPrivacyMode.REAL_IP_LOADING))
    }

    private fun actionUseHiddenIP() {
    private suspend fun actionUseHiddenIP() {val intent = ipScramblingStateUseCase.prepareAndroidVpn()
        if (intent != null) {
            _singleEvents.emit(SingleEvent.StartAndroidVpnActivityEvent(intent))
        } else {
            ipScramblingStateUseCase.toggle(hideIp = true)
        }
    }

    private fun actionAndroidVpnActivityResult(action: Action.AndroidVpnActivityResultAction) {
        if (action.resultCode == Activity.RESULT_OK) {
            // if (state.mode in listOf(
            //         InternetPrivacyMode.REAL_IP,
            //         InternetPrivacyMode.REAL_IP_LOADING
            //     )
            // ) {
                ipScramblingStateUseCase.toggle(hideIp = true)
            //     flowOf(InternetPrivacyFeature.Effect.ModeUpdatedEffect(InternetPrivacyMode.HIDE_IP_LOADING))
            // } else {
            //     flowOf(InternetPrivacyFeature.Effect.ErrorEffect("Vpn already started"))
            // }
        } else {
            Log.d("TestOrbot","Vpn wasn't allowed to start")
        }
    }

    suspend private fun actionToggleAppIpScrambled(action: Action.ToggleAppIpScrambled) = withContext(Dispatchers.IO) {
@@ -160,14 +167,14 @@ class InternetPrivacyViewModel(
    }

    sealed class SingleEvent {
        //data class StartAndroidVpnActivityEvent(val intent: Intent) : SingleEvent()
        data class StartAndroidVpnActivityEvent(val intent: Intent) : SingleEvent()
        data class ErrorEvent(val error: Any) : SingleEvent()
    }

    sealed class Action {
        object UseRealIPAction : Action()
        object UseHiddenIPAction : Action()
        //TODO: data class AndroidVpnActivityResultAction(val resultCode: Int) : Action()
        data class AndroidVpnActivityResultAction(val resultCode: Int) : Action()
        data class ToggleAppIpScrambled(val packageName: String) : Action()
        data class SelectLocationAction(val position: Int) : Action()
        object CloseQuickPrivacyDisabledMessage : Action()
+0 −10
Original line number Diff line number Diff line
@@ -178,16 +178,6 @@ class FakeLocationFragment : NavToolbarFragment(R.layout.fragment_fake_location)
        }
    }

    // val locationPermissionRequest = registerForActivityResult(
    //     ActivityResultContracts.RequestMultiplePermissions()
    // ) { permissions ->
    //     if (permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false)
    //         || permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false)
    //     ) {
    //         startLocationUpdates()
    //     }
    // }

    private fun getCoordinatesAfterTextChanged(
        inputLayout: TextInputLayout,
        editText: TextInputEditText,