Loading .gitlab-ci.yml +12 −0 Original line number Diff line number Diff line Loading @@ -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 app/build.gradle +13 −2 Original line number Diff line number Diff line Loading @@ -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" } Loading @@ -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'] } } Loading Loading @@ -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' Loading app/src/debug/AndroidManifest.xml 0 → 100644 +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 app/src/main/AndroidManifest.xml +12 −0 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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 --> Loading app/src/main/java/foundation/e/apps/MainActivity.kt +44 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -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() { Loading Loading @@ -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) { Loading @@ -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 Loading
.gitlab-ci.yml +12 −0 Original line number Diff line number Diff line Loading @@ -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
app/build.gradle +13 −2 Original line number Diff line number Diff line Loading @@ -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" } Loading @@ -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'] } } Loading Loading @@ -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' Loading
app/src/debug/AndroidManifest.xml 0 → 100644 +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
app/src/main/AndroidManifest.xml +12 −0 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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 --> Loading
app/src/main/java/foundation/e/apps/MainActivity.kt +44 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -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() { Loading Loading @@ -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) { Loading @@ -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