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

Commit 7ca2766d authored by Sayantan Roychowdhury's avatar Sayantan Roychowdhury
Browse files

Merge branch '2203-paco' into 'main'

Issue 2203 - includes the following:

ContentProvider for blacklisted apps and login type.
Broadcast to Parental Control on successful login.
Intent to request GPlay type login for App Lounge.

See merge request !449
parents 8781fed1 b5c1f206
Loading
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