- Added ability to remove accounts
- Added ability to disable updates
bytecode target: 1.8 -> 11
gradle version: 6.5 -> 6.9
kotlin version: 1.3.72 -> 1.5.31
This commit is contained in:
basti564 2021-10-03 03:28:37 +02:00
parent 8b83d2da5b
commit 998cce9210
13 changed files with 167 additions and 73 deletions

View File

@ -1,22 +1,6 @@
<component name="ProjectCodeStyleConfiguration"> <component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173"> <code_scheme name="Project" version="173">
<JetCodeStyleSettings> <JetCodeStyleSettings>
<option name="PACKAGES_TO_USE_STAR_IMPORTS">
<value>
<package name="java.util" alias="false" withSubpackages="false" />
<package name="kotlinx.android.synthetic" alias="false" withSubpackages="true" />
<package name="io.ktor" alias="false" withSubpackages="true" />
</value>
</option>
<option name="PACKAGES_IMPORT_LAYOUT">
<value>
<package name="" alias="false" withSubpackages="true" />
<package name="java" alias="false" withSubpackages="true" />
<package name="javax" alias="false" withSubpackages="true" />
<package name="kotlin" alias="false" withSubpackages="true" />
<package name="" alias="true" withSubpackages="true" />
</value>
</option>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings> </JetCodeStyleSettings>
<codeStyleSettings language="XML"> <codeStyleSettings language="XML">

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="CompilerConfiguration"> <component name="CompilerConfiguration">
<bytecodeTargetLevel target="1.8" /> <bytecodeTargetLevel target="11" />
</component> </component>
</project> </project>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
<component name="ProjectType"> <component name="ProjectType">

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
</set>
</option>
</component>
</project>

View File

@ -11,8 +11,8 @@ android {
applicationId "com.bos.oculess" applicationId "com.bos.oculess"
minSdkVersion 23 minSdkVersion 23
targetSdkVersion 30 targetSdkVersion 30
versionCode 2 versionCode 3
versionName "1.1" versionName "1.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }
@ -35,11 +35,11 @@ android {
dependencies { dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.core:core-ktx:1.6.0'
implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.2.1' implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
testImplementation 'junit:junit:4.+' testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
} }

View File

@ -5,13 +5,13 @@
"kind": "Directory" "kind": "Directory"
}, },
"applicationId": "com.bos.oculess", "applicationId": "com.bos.oculess",
"variantName": "processReleaseResources", "variantName": "release",
"elements": [ "elements": [
{ {
"type": "SINGLE", "type": "SINGLE",
"filters": [], "filters": [],
"versionCode": 2, "versionCode": 3,
"versionName": "1.1", "versionName": "1.2",
"outputFile": "app-release.apk" "outputFile": "app-release.apk"
} }
] ]

View File

@ -23,8 +23,6 @@
android:resource="@xml/device_admin" /> android:resource="@xml/device_admin" />
</receiver> </receiver>
<activity android:name=".TelemetryActivity" />
<meta-data <meta-data
android:name="com.oculus.supportedDevices" android:name="com.oculus.supportedDevices"
android:value="quest|quest2" /> android:value="quest|quest2" />

View File

@ -3,10 +3,10 @@ package com.bos.oculess
import android.app.admin.DevicePolicyManager import android.app.admin.DevicePolicyManager
import android.content.ComponentName import android.content.ComponentName
import android.content.Context import android.content.Context
import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import android.graphics.Color import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.provider.Settings
import android.view.WindowManager import android.view.WindowManager
import android.widget.Button import android.widget.Button
import android.widget.TextView import android.widget.TextView
@ -20,6 +20,7 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
val updaterName = "com.oculus.updater"
val telemetryApps = arrayOf( val telemetryApps = arrayOf(
"com.oculus.unifiedtelemetry", "com.oculus.unifiedtelemetry",
"com.oculus.gatekeeperservice", "com.oculus.gatekeeperservice",
@ -29,13 +30,20 @@ class MainActivity : AppCompatActivity() {
"com.oculus.appsafety" "com.oculus.appsafety"
) )
val viewAdminsBtn = findViewById<Button>(R.id.viewAdminsBtn)
val isEnabledText = findViewById<TextView>(R.id.isEnabledText) val isEnabledText = findViewById<TextView>(R.id.isEnabledText)
val viewAdminsBtn = findViewById<Button>(R.id.viewAdminsBtn)
val viewAccountsBtn = findViewById<Button>(R.id.viewAccountsBtn)
val viewOtaBtn = findViewById<Button>(R.id.viewOtaBtn)
val viewTelemetryBtn = findViewById<Button>(R.id.viewTelemetryBtn) val viewTelemetryBtn = findViewById<Button>(R.id.viewTelemetryBtn)
val dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager val dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val deviceAdminReceiverComponentName = ComponentName(
applicationContext,
DevAdminReceiver::class.java
)
fixedRateTimer("timer", false, 0L, 1000) { fixedRateTimer("timer", false, 0L, 1000) {
this@MainActivity.runOnUiThread { this@MainActivity.runOnUiThread {
if (dpm.isAdminActive( if (dpm.isAdminActive(
@ -53,13 +61,25 @@ class MainActivity : AppCompatActivity() {
isEnabledText.text = getString(R.string.is_disabled) isEnabledText.text = getString(R.string.is_disabled)
viewAdminsBtn.text = getString(R.string.enable_companion) viewAdminsBtn.text = getString(R.string.enable_companion)
} }
if (dpm.isDeviceOwnerApp(packageName)) {
if (dpm.isApplicationHidden(
deviceAdminReceiverComponentName, updaterName
)) {
viewOtaBtn.text = getString(R.string.enable_ota)
}
else {
viewOtaBtn.text = getString(R.string.disable_ota)
}
} else {
viewOtaBtn.text = getString(R.string.disable_ota)
}
} }
} }
viewAdminsBtn.setOnClickListener { viewAdminsBtn.setOnClickListener {
val builder: AlertDialog.Builder = AlertDialog.Builder(this) val builder: AlertDialog.Builder = AlertDialog.Builder(this)
builder.setTitle(getString(R.string.title)) builder.setTitle(getString(R.string.title))
builder.setMessage(getString(R.string.message)) builder.setMessage(getString(R.string.message0))
builder.setPositiveButton( builder.setPositiveButton(
getString(R.string.ok) getString(R.string.ok)
) { _, _ -> ) { _, _ ->
@ -101,6 +121,57 @@ class MainActivity : AppCompatActivity() {
} }
viewAccountsBtn.setOnClickListener {
val builder: AlertDialog.Builder = AlertDialog.Builder(this)
builder.setTitle(getString(R.string.title))
builder.setMessage(getString(R.string.message1))
builder.setPositiveButton(
getString(R.string.ok)
) { _, _ ->
startActivity(
Intent(Settings.ACTION_SYNC_SETTINGS)
)
}
builder.setNegativeButton(
getString(R.string.cancel)
) { dialog, _ ->
dialog.dismiss()
}
val alertDialog: AlertDialog = builder.create()
alertDialog.show()
alertDialog.window!!.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
}
viewOtaBtn.setOnClickListener {
if (dpm.isDeviceOwnerApp(packageName)) {
if (!dpm.isApplicationHidden(
deviceAdminReceiverComponentName, updaterName
)
) {
dpm.setApplicationHidden(
deviceAdminReceiverComponentName, updaterName, true
)
} else {
dpm.setApplicationHidden(
deviceAdminReceiverComponentName, updaterName, false
)
}
} else {
val builder: AlertDialog.Builder = AlertDialog.Builder(this)
builder.setTitle(getString(R.string.title))
builder.setMessage(getString(R.string.message2))
builder.setPositiveButton(
getString(R.string.ok)
) { dialog, _ ->
dialog.dismiss()
}
val alertDialog: AlertDialog = builder.create()
alertDialog.show()
alertDialog.window!!.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
}
}
viewTelemetryBtn.setOnClickListener { viewTelemetryBtn.setOnClickListener {
if (dpm.isDeviceOwnerApp(packageName)) { if (dpm.isDeviceOwnerApp(packageName)) {
val builder: AlertDialog.Builder = AlertDialog.Builder(this) val builder: AlertDialog.Builder = AlertDialog.Builder(this)
@ -111,10 +182,7 @@ class MainActivity : AppCompatActivity() {
) { _, _ -> ) { _, _ ->
telemetryApps.forEach { telemetryApps.forEach {
dpm.setApplicationHidden( dpm.setApplicationHidden(
ComponentName( deviceAdminReceiverComponentName, it, true
applicationContext,
DevAdminReceiver::class.java
), it, true
) )
} }
} }
@ -123,10 +191,7 @@ class MainActivity : AppCompatActivity() {
) { _, _ -> ) { _, _ ->
telemetryApps.forEach { telemetryApps.forEach {
dpm.setApplicationHidden( dpm.setApplicationHidden(
ComponentName( deviceAdminReceiverComponentName, it, false
applicationContext,
DevAdminReceiver::class.java
), it, false
) )
} }
} }

View File

@ -7,6 +7,17 @@
tools:context=".MainActivity"> tools:context=".MainActivity">
<Button
android:id="@+id/viewOtaBtn"
android:layout_width="217dp"
android:layout_height="87dp"
android:layout_marginTop="12dp"
android:text="@string/disable_ota"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.494"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/viewAccountsBtn" />
<Button <Button
android:id="@+id/viewTelemetryBtn" android:id="@+id/viewTelemetryBtn"
android:layout_width="217dp" android:layout_width="217dp"
@ -14,30 +25,44 @@
android:layout_marginTop="12dp" android:layout_marginTop="12dp"
android:text="@string/telemetry" android:text="@string/telemetry"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.499"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/viewAdminsBtn" /> app:layout_constraintTop_toBottomOf="@+id/viewOtaBtn" />
<Button
android:id="@+id/viewAdminsBtn"
android:layout_width="217dp"
android:layout_height="87dp"
android:text="@string/disable_companion"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/isEnabledText" android:id="@+id/isEnabledText"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="12dp" android:layout_marginBottom="8dp"
android:text="placeholder" android:text="@string/app_name"
android:textSize="18sp" android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/viewAdminsBtn" app:layout_constraintBottom_toTopOf="@+id/viewAdminsBtn"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/viewAdminsBtn"
android:layout_width="217dp"
android:layout_height="87dp"
android:layout_marginBottom="12dp"
android:text="@string/disable_companion"
app:layout_constraintBottom_toTopOf="@+id/viewAccountsBtn"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.494"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/viewAccountsBtn"
android:layout_width="217dp"
android:layout_height="87dp"
android:layout_marginBottom="12dp"
android:text="@string/remove_accounts"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.494"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.362" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,17 +1,24 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="app_name">Oculess</string> <string name="app_name">Oculess</string>
<string name="disable_companion">BEGLEITER DEAKTIVIEREN</string>
<string name="enable_companion">BEGLEITER AKTIVIEREN</string>
<string name="title">Wichtige Information</string>
<string name="ok">Ok</string>
<string name="cancel">Abbrechen</string>
<string name="message">Bitte starten Sie nach dem ersten Mal neu!\nWiederholen Sie den Schritt nach jedem Neustart!</string>
<string name="message2">Der Geräte Besitzer wurde nicht festgelegt!</string>
<string name="message3">Wie möchten sie fortfahren?</string>
<string name="is_disabled">Oculus Begleit-Server ist deaktiviert!</string> <string name="is_disabled">Oculus Begleit-Server ist deaktiviert!</string>
<string name="is_enabled">Oculus Begleit-Server ist aktiviert!</string> <string name="is_enabled">Oculus Begleit-Server ist aktiviert!</string>
<string name="disable_companion">BEGLEITER DEAKTIVIEREN</string>
<string name="enable_companion">BEGLEITER AKTIVIEREN</string>
<string name="remove_accounts">ACCOUNTS ENTFERNEN</string>
<string name="disable_ota">UPDATES DEAKTIVIEREN</string>
<string name="enable_ota">UPDATES AKTIVIEREN</string>
<string name="telemetry">TELEMETRIE</string> <string name="telemetry">TELEMETRIE</string>
<string name="title">Wichtige Information</string>
<string name="message0">Bitte starten Sie nach dem ersten Mal neu!\nWiederholen Sie den Schritt nach jedem Neustart!</string>
<string name="message1">Bitte entfernen Sie *alle* Accounts auf ihrem Gerät!\nWiederholen Sie den Schritt nach jedem Neustart!</string>
<string name="message2">Der Geräte Besitzer wurde nicht festgelegt!</string>
<string name="message3">Wie möchten sie fortfahren?</string>
<string name="ok">Ok</string>
<string name="cancel">Abbrechen</string>
<string name="disable">Telemetrie Deaktivieren</string> <string name="disable">Telemetrie Deaktivieren</string>
<string name="enable">Telemetrie Aktivieren</string> <string name="enable">Telemetrie Aktivieren</string>
</resources> </resources>

View File

@ -1,16 +1,21 @@
<resources> <resources>
<string name="app_name">Oculess</string> <string name="app_name">Oculess</string>
<string name="is_enabled">Oculus Companion Server is enabled!</string>
<string name="disable_companion">DISABLE COMPANION</string>
<string name="is_disabled">Oculus Companion Server is disabled!</string> <string name="is_disabled">Oculus Companion Server is disabled!</string>
<string name="is_enabled">Oculus Companion Server is enabled!</string>
<string name="disable_companion">DISABLE COMPANION</string>
<string name="enable_companion">ENABLE COMPANION</string> <string name="enable_companion">ENABLE COMPANION</string>
<string name="remove_accounts">REMOVE ACCOUNTS</string>
<string name="disable_ota">DISABLE UPDATES</string>
<string name="enable_ota">ENABLE UPDATES</string>
<string name="telemetry">TELEMETRY</string>
<string name="title">Important Info</string> <string name="title">Important Info</string>
<string name="message">Please restart after the first time!\nRepeat this step after every restart!</string> <string name="message0">Please restart after the first time!\nRepeat this step after every restart!</string>
<string name="message1">Please remove *all* the accounts on your Device!\nRepeat this step after every restart!</string>
<string name="message2">Device Owner has not been set!</string> <string name="message2">Device Owner has not been set!</string>
<string name="message3">What would you like to do?</string> <string name="message3">What would you like to do?</string>
<string name="telemetry">TELEMETRY</string>
<string name="ok">Ok</string> <string name="ok">Ok</string>
<string name="cancel">Cancel</string> <string name="cancel">Cancel</string>
<string name="disable">Disable Telemetry</string> <string name="disable">Disable Telemetry</string>

View File

@ -1,12 +1,12 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript { buildscript {
ext.kotlin_version = "1.3.72" ext.kotlin_version = "1.5.31"
repositories { repositories {
google() google()
jcenter() jcenter()
} }
dependencies { dependencies {
classpath "com.android.tools.build:gradle:4.1.1" classpath 'com.android.tools.build:gradle:4.2.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong

View File

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip