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

Commit 4eda568c authored by Jonathan Klee's avatar Jonathan Klee
Browse files

Permissions

parent e624368f
Loading
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.os.Environment
import android.os.StatFs
import android.os.storage.StorageManager
import android.view.View
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.distinctUntilChanged
@@ -46,6 +47,7 @@ import foundation.e.apps.login.AuthObject
import foundation.e.apps.login.LoginViewModel
import foundation.e.apps.manager.database.fusedDownload.FusedDownload
import foundation.e.apps.manager.workmanager.InstallWorkManager
import foundation.e.apps.permission.PermissionChecker
import foundation.e.apps.purchase.AppPurchaseFragmentDirections
import foundation.e.apps.settings.SettingsFragment
import foundation.e.apps.setup.signin.SignInViewModel
@@ -71,6 +73,7 @@ class MainActivity : AppCompatActivity() {
    private val TAG = MainActivity::class.java.simpleName
    private lateinit var viewModel: MainActivityViewModel

    @RequiresApi(Build.VERSION_CODES.O)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

@@ -230,6 +233,8 @@ class MainActivity : AppCompatActivity() {
                ).show(supportFragmentManager, TAG)
            }
        }

        PermissionChecker.run(applicationContext, supportFragmentManager)
    }

    private suspend fun observeInvalidAuth() {
+22 −1
Original line number Diff line number Diff line
@@ -69,11 +69,32 @@ class InstallerService : Service() {
        val packageNamePackageManagerModule = intent.getStringExtra(PkgManagerModule.PACKAGE_NAME)

        packageName = packageName ?: packageNamePackageManagerModule
        postStatus(status, packageName, extra)

        when (status) {
            PackageInstaller.STATUS_PENDING_USER_ACTION -> promptUser(intent)
            else -> postStatus(status, packageName, extra)
        }

        stopSelf()
        return START_NOT_STICKY
    }

    private fun promptUser(intent: Intent) {
        val confirmationIntent: Intent? = intent.getParcelableExtra(Intent.EXTRA_INTENT)

        confirmationIntent?.let {
            it.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true)
            it.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME, PkgManagerModule.FAKE_STORE_PACKAGE_NAME)
            it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

            try {
                startActivity(it)
            } catch (e: Exception) {
                Timber.e(e.message)
            }
        }
    }

    private fun postStatus(status: Int, packageName: String?, extra: String?) {
        Timber.d("postStatus: $status $packageName $extra")
        if (status == PackageInstaller.STATUS_SUCCESS) {
+1 −1
Original line number Diff line number Diff line
@@ -183,7 +183,7 @@ class PkgManagerModule @Inject constructor(
                setInstallReason(PackageManager.INSTALL_REASON_USER)
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
                setRequireUserAction(SessionParams.USER_ACTION_NOT_REQUIRED)
                setRequireUserAction(SessionParams.USER_ACTION_REQUIRED)
            }
        }

+60 −0
Original line number Diff line number Diff line
package foundation.e.apps.permission

import android.app.AlertDialog
import android.app.Dialog
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.os.Environment
import android.provider.Settings
import androidx.annotation.RequiresApi
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager

object PermissionChecker {

    private const val TAG = "PermissionChecker"

    @RequiresApi(Build.VERSION_CODES.O)
    fun run(context: Context, supportFragmentManager: FragmentManager) {

        if (!context.packageManager.canRequestPackageInstalls()) {
            InstallSettingDialog().show(supportFragmentManager, TAG)
        }


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            if (!Environment.isExternalStorageManager()) {
                ExternalManagerSettingDialog().show(supportFragmentManager, TAG)
            }
        } else {

        }
    }

    class InstallSettingDialog() : DialogFragment() {

        @RequiresApi(Build.VERSION_CODES.O)
        override fun onCreateDialog(savedInstanceState: Bundle?): Dialog =
            AlertDialog.Builder(requireContext())
                .setMessage("App Lounge requires some more permission to install packages.")
                .setCancelable(false)
                .setPositiveButton("Go to settings") { _, _ ->
                    startActivity(Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES))
                }
                .create()
    }

    class ExternalManagerSettingDialog() : DialogFragment() {
        @RequiresApi(Build.VERSION_CODES.R)
        override fun onCreateDialog(savedInstanceState: Bundle?): Dialog =
            AlertDialog.Builder(requireContext())
                .setMessage("App Lounge requires some more permission to access files.")
                .setCancelable(false)
                .setPositiveButton("Go to settings") { _, _ ->
                    startActivity(Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION))
                }
                .create()
    }
}
 No newline at end of file