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

Commit b5c1f206 authored by Sayantan Roychowdhury's avatar Sayantan Roychowdhury
Browse files

Issue 2203: Provide blocklist and login type to Parental Control

parent 8781fed1
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -158,3 +158,15 @@ pushToPrebuilt:
    - git push
    # Sometimes a single push doesn't do all the job, so we have to push twice
    - git push

publish-contracts:
  stage: publish
  needs: ["buildRelease"]
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
      when: manual
    - if: '$CI_COMMIT_TAG !~ "/^$/"'
      when: always
  script:
    - ./gradlew :parental-control-data:build
    - ./gradlew :parental-control-data:publish
 No newline at end of file
+13 −2
Original line number Diff line number Diff line
@@ -54,6 +54,11 @@ android {
        buildConfigField "String", "BUILD_ID", "\"${getGitHash() + "." + getDate()}\""
        buildConfigField("String", "SENTRY_DSN", "\"${getSentryDsn()}\"")

        def parentalControlPkgName = "foundation.e.parentalcontrol"

        manifestPlaceholders = [parentalControlPkgName: parentalControlPkgName]
        buildConfigField "String", "PACKAGE_NAME_PARENTAL_CONTROL", "\"${parentalControlPkgName}\""

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

@@ -80,10 +85,15 @@ android {
    }

    sourceSets {
        debug {
            manifest.srcFile 'src/debug/AndroidManifest.xml'
        }
        releaseDev {
            manifest.srcFile 'src/release/AndroidManifest.xml'
            java.srcDirs = ['src/release/java']
        }
        releaseStable {
            manifest.srcFile 'src/release/AndroidManifest.xml'
            java.srcDirs = ['src/release/java']
        }
    }
@@ -149,11 +159,12 @@ allOpen {

dependencies {

    implementation project(':parental-control-data')
// TODO: Add splitinstall-lib to a repo https://gitlab.e.foundation/e/os/backlog/-/issues/628
    api files('libs/splitinstall-lib.jar')

    implementation 'foundation.e.lib:telemetry:0.0.11-alpha'
    implementation "foundation.e:gplayapi:3.2.10-3"
    implementation "foundation.e:gplayapi:3.2.10-4"
    implementation 'androidx.core:core-ktx:1.9.0'
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'androidx.fragment:fragment-ktx:1.5.6'
+6 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <permission android:name="foundation.e.apps.debug.permission.PROVIDER_READ" />

</manifest>
 No newline at end of file
+12 −0
Original line number Diff line number Diff line
@@ -49,6 +49,12 @@
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
    <uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />

    <uses-permission android:name="${parentalControlPkgName}.broadcast_permission" />

    <queries>
        <package android:name="${parentalControlPkgName}" />
    </queries>

    <application
        android:name=".AppLoungeApplication"
        android:allowBackup="false"
@@ -140,6 +146,12 @@
            android:authorities="${applicationId}.androidx-startup"
            tools:node="remove" />
        
        <provider
            android:authorities="${applicationId}.provider"
            android:name=".provider.AgeRatingProvider"
            android:exported="true"
            android:readPermission="${applicationId}.permission.PROVIDER_READ" />

        <service android:name=".install.pkg.PackageInstallerService" />

        <!-- TODO: ExportedService, suppressing because changes are needed in other apps -->
+44 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

package foundation.e.apps

import android.content.Intent
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.os.Bundle
@@ -40,6 +41,9 @@ import com.aurora.gplayapi.exceptions.ApiException
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.snackbar.Snackbar
import dagger.hilt.android.AndroidEntryPoint
import foundation.e.apps.contract.ParentalControlContract.COLUMN_LOGIN_TYPE
import foundation.e.apps.data.Constants
import foundation.e.apps.data.enums.User
import foundation.e.apps.data.install.models.AppInstall
import foundation.e.apps.data.login.AuthObject
import foundation.e.apps.data.login.LoginViewModel
@@ -123,6 +127,24 @@ class MainActivity : AppCompatActivity() {
        viewModel.updateContentRatings()

        observeEvents()

        checkGPlayLoginRequest(intent)
    }

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        checkGPlayLoginRequest(intent)
    }

    private fun checkGPlayLoginRequest(intent: Intent?) {
        viewModel.gPlayLoginRequested =
            intent?.getBooleanExtra(Constants.REQUEST_GPLAY_LOGIN, false) ?: false

        if (!viewModel.gPlayLoginRequested) return
        if (!viewModel.getTocStatus()) return
        if (viewModel.getUser() !in listOf(User.GOOGLE, User.ANONYMOUS)) {
            loginViewModel.logout()
        }
    }

    private fun refreshSession() {
@@ -315,12 +337,16 @@ class MainActivity : AppCompatActivity() {
                    // Pop back stack to prevent showing TOSFragment on pressing back button.
                    navController.popBackStack()
                    navController.navigate(R.id.signInFragment)
                    if (viewModel.gPlayLoginRequested) viewModel.closeAfterLogin = true
                    return@observe
                }

                else -> {}
            }

            it.find { it is AuthObject.GPlayAuth }?.result?.run {
            val gPlayAuthObject = it.find { it is AuthObject.GPlayAuth }

            gPlayAuthObject?.result?.run {
                if (isSuccess()) {
                    viewModel.gPlayAuthData = data as AuthData
                } else if (exception is GPlayValidationException) {
@@ -333,7 +359,24 @@ class MainActivity : AppCompatActivity() {
                    Timber.e(exception, "Login failed! message: ${exception?.localizedMessage}")
                }
            }

            // Broadcast if not gplay type login or successful gplay login
            if (gPlayAuthObject == null || gPlayAuthObject.result.isSuccess()) {
                broadcastGPlayLogin()
            }

            if (viewModel.closeAfterLogin && it.isNotEmpty() && it.all { it.result.isSuccess() }) {
                finishAndRemoveTask()
            }
        }
    }

    private fun broadcastGPlayLogin() {
        val intent = Intent(Constants.ACTION_PARENTAL_CONTROL_APP_LOUNGE_LOGIN).apply {
            setPackage(BuildConfig.PACKAGE_NAME_PARENTAL_CONTROL)
            putExtra(COLUMN_LOGIN_TYPE, viewModel.getUser().name)
        }
        sendBroadcast(intent)
    }

    private fun setupViewModels() {
Loading