Rename project

from 'Android Owner' to 'OwnDroid'
resolve #2
This commit is contained in:
BinTianqi
2024-04-21 09:11:16 +08:00
parent c0df796610
commit 26793f510b
38 changed files with 265 additions and 224 deletions

View File

@@ -1,11 +1,13 @@
# 使用指南
欢迎来到Android owner使用教程
欢迎来到OwnDroid使用教程
在这里了解各个功能所需的权限、兼容的安卓版本和注意事项
## 目录
0. [使用前须知](#使用前须知)
1. [权限](#权限)
@@ -25,6 +27,12 @@
9. [其他功能](#其他功能)
## 使用前须知
1. device admin, profile owner和device owner有极高的特权包括但不限于让你的设备丢失所有数据。所以请谨慎使用
2. 以下的所有命令都需要在`adb shell`中执行。请进入`adb shell`后执行,不要直接`adb shell xxx`,容易出问题
3. ColorOS用户请在release页面下载testKey版否则无法激活Device owner
## 权限
### Device admin
@@ -41,7 +49,7 @@
ADB激活命令
```shell
adb shell dpm set-active-admin com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
dpm set-active-admin com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver
```
一个设备可以同时存在多个Device admin。
@@ -72,7 +80,7 @@ adb shell dpm set-active-admin com.binbin.androidowner/com.binbin.androidowner.d
ADB激活命令
```shell
adb shell dpm set-profile-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
dpm set-profile-owner com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver
```
#### 停用
@@ -97,7 +105,7 @@ adb shell dpm set-profile-owner com.binbin.androidowner/com.binbin.androidowner.
ADB激活命令
```shell
adb shell dpm set-device-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
dpm set-device-owner com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver
```
ADB激活有一定局限性
@@ -105,20 +113,20 @@ ADB激活有一定局限性
激活前必须删除所有用户user否则会报错。你可以使用下面这条ADB命令查看已有的用户
```shell
adb shell pm list users
pm list users
```
激活前也要删除所有账号account否则会报错。你可以使用下面这条ADB命令查看已有的账号
```shell
adb shell dumpsys account
dumpsys account
```
上面两个是安卓系统的限制,此外,还有设备生产商的限制
MIUI需要在开发者选项中打开”USB调试安全设置
ColorOS请使用调试签名的apk
ColorOS请使用testKey的apk否则只能使用Device admin和工作资料中的Profile owner
小天才电话手表Android 8.1完全不支持Device owner
@@ -130,14 +138,14 @@ ColorOS请使用调试签名的apk
ADB命令停用十分麻烦你需要修改AndroidManifest.xml并自己编译项目。
你需要把AndroidManifest.xml中第39行`android:testOnly="false"`的值改为true
你需要把AndroidManifest.xml中的`android:testOnly="false"`的值改为true
由于签名校验如果你已经安装了release那这个方法没用
签名校验问题请自己解决
然后使用这条ADB命令停用
```shell
adb shell dpm remove-active-admin com.binbin.androidowner/com.binbin.androidowner.MyDeviceAdminReceiver
dpm remove-active-admin com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver
```
使用这条命令也可以停用Device admin和Profile owner
@@ -148,7 +156,7 @@ adb shell dpm remove-active-admin com.binbin.androidowner/com.binbin.androidowne
请自己学习如何启动[Shizuku](https://github.com/RikkaApps/Shizuku)
如果Shizuku正在运行但是Android owner无法申请权限请关闭Shizuku和Android owner的电池优化(这种情况在非原生系统中比较常见)
如果Shizuku正在运行但是OwnDroid无法申请权限请关闭Shizuku和OwnDroid的电池优化(这种情况在非原生系统中比较常见)
功能:
@@ -162,7 +170,7 @@ Shizuku的本质是ADB。在安卓10或以下你还是要连接电脑激活Sh
不能在非主用户中使用
因为作者懒得研究Shizuku-API所以Android owner没有添加任何Shizuku相关依赖。以上功能均是通过rish实现。因为是套壳的rish所以不支持Sui
因为作者懒得研究Shizuku-API所以OwnDroid没有添加任何Shizuku相关依赖。以上功能均是通过rish实现。因为是套壳的rish所以不支持Sui
### 设备唯一标识码
@@ -534,7 +542,7 @@ API34或以上将不能在系统用户中使用WipeData如果要恢复出厂
## 工作资料
工作资料是一种特殊的用户,使用`adb shell pm list user`命令可以看到工作资料工作资料的默认用户名是“工作资料”或“Work Profile”
工作资料是一种特殊的用户,使用`pm list user`命令可以看到工作资料工作资料的默认用户名是“工作资料”或“Work Profile”
工作资料创建后默认禁用[安装未知来源应用](#应用)
@@ -548,9 +556,9 @@ API34或以上将不能在系统用户中使用WipeData如果要恢复出厂
- 跳过加密需要API24或以上没有实际作用
创建后会跳转到工作资料中的Android owner,请立即按照指引激活工作资料
创建后会跳转到工作资料中的OwnDroid,请立即按照指引激活工作资料
创建后工作资料中的Android owner会成为Profile owner
创建后工作资料中的OwnDroid会成为Profile owner
在WearOS上可以创建工作资料但是会导致SystemUI停止运行一次。WearOS原生的启动器不会显示工作资料中的应用你需要使用支持工作资料的启动器。你可以通过[ADB命令移除工作资料](#删除工作资料)。此外不要尝试给工作资料重置密码因为WearOS不能输入工作资料的密码。测试环境WearOS4(AVD)
@@ -560,15 +568,14 @@ API34或以上将不能在系统用户中使用WipeData如果要恢复出厂
成为由组织拥有的工作资料后可以使用更多功能
前提条件:Android owner是工作资料中的Profile owner
前提条件:OwnDroid是工作资料中的Profile owner
首先,你需要在工作资料中的Android owner的“用户管理”页面中查看UserID
首先,你需要在工作资料中的OwnDroid的“用户管理”页面中查看UserID
然后执行下面这个ADB命令
```shell
adb shell
dpm mark-profile-owner-on-organization-owned-device --user USER_ID com.binbin.androidowner/com.binbin.androidowner.MyDeviceAdminReceiver
dpm mark-profile-owner-on-organization-owned-device --user USER_ID com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver
```
把命令中的USER_ID替换为你的UserID
@@ -579,7 +586,7 @@ dpm mark-profile-owner-on-organization-owned-device --user USER_ID com.binbin.an
需要的权限由组织拥有的工作资料的Profile owner
只会挂起个人的用户应用,系统应用和Android owner仍然可以打开
只会挂起个人的用户应用,系统应用和OwnDroid仍然可以打开
### 资料最长关闭时间
@@ -611,12 +618,12 @@ dpm mark-profile-owner-on-organization-owned-device --user USER_ID com.binbin.an
你可以在工作资料中使用 [恢复出厂设置](#恢复出厂设置) 来删除工作资料
如果你的工作资料不是由组织拥有的,你可以打开安卓设置->安全->更多安全设置->设备管理器->带工作资料图标的Android owner->移除工作资料(非原生用户自己找)
如果你的工作资料不是由组织拥有的,你可以打开安卓设置->安全->更多安全设置->设备管理器->带工作资料图标的OwnDroid->移除工作资料(非原生用户自己找)
你也可以使用ADB命令移除工作资料把USER_ID替换为工作资料的UserID
```shell
adb shell pm remove-user USER_ID
pm remove-user USER_ID
```
## 应用管理
@@ -628,7 +635,7 @@ adb shell pm remove-user USER_ID
除了安装应用所有的操作都需要应用的包名你可以通过ADB命令查看所有已安装应用的包名
```shell
adb shell pm list packages
pm list packages
```
### 应用详情
@@ -680,7 +687,7 @@ adb shell pm list packages
使用这个ADB命令查看系统支持的所有权限
```shell
adb shell pm list permissions
pm list permissions
```
权限有三种状态:
@@ -859,7 +866,7 @@ Profile owner无法禁用部分功能工作资料中部分功能无效wear
使用ADB查看所有用户
```shell
adb shell pm list users
pm list users
```
上面这条命令返回的结果中用户名前面的数字就是UserID
@@ -913,12 +920,12 @@ UserID不是UID。系统用户的UserID为0其他用户包括工作资
- 临时用户需API28
- 启用所有系统应用有些系统应用在新用户中是默认不启用的比如谷歌手机上的YouTube
创建后,Android owner会成为受管理用户中的Profile owner
创建后,OwnDroid会成为受管理用户中的Profile owner
这个功能在WearOS上使用会导致SystemUI停止运行一次过几秒恢复正常。创建用户实际上成功了回到Android owner后能看到新用户的序列号,`pm list users`也能看到新用户。如果切换到新用户SystemUI无法使用表现为黑屏可以用ADB命令启动别的应用。如果黑屏无法使用ADB执行下面这个命令把USER_ID替换成受管理用户的用户序列号
这个功能在WearOS上使用会导致SystemUI停止运行一次过几秒恢复正常。创建用户实际上成功了回到OwnDroid后能看到新用户的序列号,`pm list users`也能看到新用户。如果切换到新用户SystemUI无法使用表现为黑屏可以用ADB命令启动别的应用。如果黑屏无法使用ADB执行下面这个命令把USER_ID替换成受管理用户的用户序列号
```shell
adb shell pm remove-user --set-ephemeral-if-in-use USER_ID
pm remove-user --set-ephemeral-if-in-use USER_ID
```
新用户会被设为临时用户,重启后临时用户会被删除并切换到主用户
@@ -1009,7 +1016,7 @@ Device owner无论在何时都是附属于设备的用户
需要Device owner
输入密码错误次数达到限制后会恢复出厂设置(前提是Android owner有权限恢复出厂设置)
输入密码错误次数达到限制后会恢复出厂设置(前提是OwnDroid有权限恢复出厂设置)
### 密码失效超时时间
@@ -1060,7 +1067,7 @@ Device owner无论在何时都是附属于设备的用户
自定义的项目:
- 禁用小工具API21或以上弃用Android owner的最小兼容API版本21所以这个功能没用
- 禁用小工具API21或以上弃用OwnDroid的最小兼容API版本21所以这个功能没用
- 禁用相机
- 禁用通知(不知道是否包含音乐播放器)
- 禁用未经编辑的通知(作用未知)
@@ -1095,7 +1102,7 @@ API31及以上弃用请使用[密码复杂度要求](#密码复杂度要求)
正在修改预计在5.0版本重新加入。
Android owner的设置中打开
OwnDroid的设置中打开
适配手表的屏幕大小添加一些WearOS/AndroidWear相关的提示比如[密码与锁屏](#密码与锁屏)
@@ -1105,8 +1112,8 @@ API31及以上弃用请使用[密码复杂度要求](#密码复杂度要求)
在安卓12或以上此功能默认打开
打开后Android owner中的颜色方案将会跟随系统
打开后OwnDroid中的颜色方案将会跟随系统
建议打开,因为自带的颜色方案不好看
打开或关闭此功能都要重启Android owner
打开或关闭此功能都要重启OwnDroid

View File

@@ -4,13 +4,9 @@
### Description
Use Device admin and Device owner privilege to fully manage your Android device.
Use Device admin and Device owner privilege to take full control of your device.
I'm renaming this app, from "Android Owner" to "OwnDroid".
- [x] rename app
- [ ] update guide
- [ ] rename repo
This app is renamed to "OwnDroid" from "Android Owner".
### Advantage
@@ -40,7 +36,7 @@ This software may not have as many features as Google's official [TestDPC](https
### License
[License.md](License.md)
[License.md](LICENSE.md)
> Copyright (C) 2024 BinTianqi
>

View File

@@ -6,11 +6,7 @@
使用安卓的Device Admin和Device Owner特权完全掌控你的设备。
这个APP正在从"Android Owner"改名为"OwnDroid"
- [x] 重命名app
- [ ] 修改使用指南
- [ ] 修改仓库名
这个APP已经改名为"OwnDroid",原名"Android Owner"
### 优点

View File

@@ -4,11 +4,11 @@ plugins {
}
android {
namespace = "com.binbin.androidowner"
namespace = "com.bintianqi.owndroid"
compileSdk = 34
defaultConfig {
applicationId = "com.binbin.androidowner"
applicationId = "com.bintianqi.owndroid"
minSdk = 21
targetSdk = 34
versionCode = 24

View File

@@ -25,7 +25,7 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/Theme.AndroidOwner"
android:theme="@style/Theme.OwnDroid"
android:enableOnBackInvokedCallback="true"
android:testOnly="false"
tools:targetApi="34">
@@ -33,21 +33,20 @@
android:name=".MainActivity"
android:exported="true"
android:windowSoftInputMode="adjustResize|stateHidden"
android:theme="@style/Theme.AndroidOwner">
android:theme="@style/Theme.OwnDroid">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.app.action.PROVISIONING_SUCCESSFUL" />
<action android:name="android.app.action.PROVISION_MANAGED_PROFILE"/>
<action android:name="android.app.action.MANAGED_PROFILE_PROVISIONED"/>
<action android:name="android.app.action.PROFILE_PROVISIONING_COMPLETE"/>
<action android:name="com.binbin.androidowner.MAIN_ACTION"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".dpm.MyDeviceAdminReceiver"
android:name=".Receiver"
android:description="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN"
android:exported="true">
@@ -65,12 +64,12 @@
</intent-filter>
</receiver>
<receiver
android:name=".dpm.PackageInstallerReceiver"
android:name=".PackageInstallerReceiver"
android:description="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN"
android:exported="true">
<intent-filter>
<action android:name="com.binbin.androidowner.PKG_INSTALL_RESULT"/>
<action android:name="com.bintianqi.owndroid.PKG_INSTALL_RESULT"/>
</intent-filter>
</receiver>
</application>

View File

@@ -1,5 +1,5 @@
#!/system/bin/sh
BASEDIR=$(dirname "$0")
DEX="$BASEDIR"/rish_shizuku.dex
[ -z "$RISH_APPLICATION_ID" ] && export RISH_APPLICATION_ID="com.binbin.androidowner"
[ -z "$RISH_APPLICATION_ID" ] && export RISH_APPLICATION_ID="com.bintianqi.owndroid"
/system/bin/app_process -Djava.class.path="$DEX" /system/bin --nice-name=rish rikka.shizuku.shell.ShizukuShellLoader "$@"

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner
package com.bintianqi.owndroid
import android.app.Activity
import android.app.admin.DevicePolicyManager
@@ -40,11 +40,11 @@ import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.binbin.androidowner.dpm.*
import com.binbin.androidowner.ui.Animations
import com.binbin.androidowner.ui.theme.OwnDroidTheme
import com.binbin.androidowner.ui.theme.SetDarkTheme
import com.binbin.androidowner.ui.theme.bgColor
import com.bintianqi.owndroid.dpm.*
import com.bintianqi.owndroid.ui.Animations
import com.bintianqi.owndroid.ui.theme.OwnDroidTheme
import com.bintianqi.owndroid.ui.theme.SetDarkTheme
import com.bintianqi.owndroid.ui.theme.bgColor
lateinit var displayMetrics: DisplayMetrics
@ExperimentalMaterial3Api
@@ -82,7 +82,7 @@ fun MyScaffold(){
val navCtrl = rememberNavController()
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val sharedPref = LocalContext.current.getSharedPreferences("data", Context.MODE_PRIVATE)
val focusMgr = LocalFocusManager.current
SetDarkTheme()
@@ -127,7 +127,7 @@ fun MyScaffold(){
private fun HomePage(navCtrl:NavHostController){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val activateType =
if(isDeviceOwner(myDpm)){"Device Owner"}
else if(isProfileOwner(myDpm)){

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner
package com.bintianqi.owndroid
import android.Manifest
import android.os.Build.VERSION
@@ -14,10 +14,10 @@ import androidx.compose.ui.draw.alpha
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
import com.binbin.androidowner.dpm.applySelectedPermission
import com.binbin.androidowner.dpm.selectedPermission
import com.binbin.androidowner.ui.NavIcon
import com.binbin.androidowner.ui.theme.bgColor
import com.bintianqi.owndroid.dpm.applySelectedPermission
import com.bintianqi.owndroid.dpm.selectedPermission
import com.bintianqi.owndroid.ui.NavIcon
import com.bintianqi.owndroid.ui.theme.bgColor
@OptIn(ExperimentalMaterial3Api::class)
@Composable

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner
package com.bintianqi.owndroid
import android.graphics.drawable.Drawable
import android.widget.Toast
@@ -21,10 +21,10 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
import com.binbin.androidowner.dpm.applySelectedPackage
import com.binbin.androidowner.dpm.selectedPackage
import com.binbin.androidowner.ui.NavIcon
import com.binbin.androidowner.ui.theme.bgColor
import com.bintianqi.owndroid.dpm.applySelectedPackage
import com.bintianqi.owndroid.dpm.selectedPackage
import com.bintianqi.owndroid.ui.NavIcon
import com.bintianqi.owndroid.ui.theme.bgColor
import com.google.accompanist.drawablepainter.rememberDrawablePainter
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.dpm
package com.bintianqi.owndroid
import android.annotation.SuppressLint
import android.app.admin.DeviceAdminReceiver
@@ -11,7 +11,7 @@ import android.os.PersistableBundle
import android.util.Log
import android.widget.Toast
class MyDeviceAdminReceiver : DeviceAdminReceiver() {
class Receiver : DeviceAdminReceiver() {
override fun onEnabled(context: Context, intent: Intent) {
super.onEnabled(context, intent)
Toast.makeText(context, "已启用", Toast.LENGTH_SHORT).show()

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner
package com.bintianqi.owndroid
import android.content.Context
import android.content.Intent
@@ -24,9 +24,9 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.binbin.androidowner.ui.*
import com.binbin.androidowner.ui.theme.SetDarkTheme
import com.binbin.androidowner.ui.theme.bgColor
import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.SetDarkTheme
import com.bintianqi.owndroid.ui.theme.bgColor
@Composable
fun AppSetting(navCtrl:NavHostController){

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner
package com.bintianqi.owndroid
import android.content.ClipData
import android.content.ClipboardManager

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.dpm
package com.bintianqi.owndroid.dpm
import android.annotation.SuppressLint
import android.app.PendingIntent
@@ -49,11 +49,10 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.binbin.androidowner.R
import com.binbin.androidowner.toText
import com.binbin.androidowner.ui.*
import com.binbin.androidowner.ui.theme.bgColor
import com.binbin.androidowner.uriToStream
import com.bintianqi.owndroid.*
import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.bgColor
import kotlinx.coroutines.delay
import java.io.IOException
import java.io.InputStream
@@ -153,7 +152,7 @@ private fun Home(navCtrl:NavHostController, pkgName: String){
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext, Receiver::class.java)
Spacer(Modifier.padding(vertical = 5.dp))
if(VERSION.SDK_INT>=24&&isProfileOwner(myDpm)&&myDpm.isManagedProfile(myComponent)){
Text(text = stringResource(R.string.scope_is_work_profile), textAlign = TextAlign.Center,modifier = Modifier.fillMaxWidth())
@@ -186,7 +185,7 @@ private fun Home(navCtrl:NavHostController, pkgName: String){
{
try {
myDpm.setAlwaysOnVpnPackage(myComponent, pkgName, it)
} catch(e: java.lang.UnsupportedOperationException) {
} catch(e: UnsupportedOperationException) {
Toast.makeText(myContext, myContext.getString(R.string.unsupported), Toast.LENGTH_SHORT).show()
} catch(e: NameNotFoundException) {
Toast.makeText(myContext, myContext.getString(R.string.not_installed), Toast.LENGTH_SHORT).show()
@@ -238,7 +237,7 @@ private fun Home(navCtrl:NavHostController, pkgName: String){
private fun UserCtrlDisabledPkg(pkgName:String){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
var pkgList = myDpm.getUserControlDisabledPackages(myComponent)
var listText by remember{mutableStateOf("")}
@@ -302,7 +301,7 @@ private fun UserCtrlDisabledPkg(pkgName:String){
private fun BlockUninstall(pkgName: String){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
var state by remember{mutableStateOf(myDpm.isUninstallBlocked(myComponent,pkgName))}
@@ -346,7 +345,7 @@ private fun BlockUninstall(pkgName: String){
private fun PermissionManage(pkgName: String, navCtrl: NavHostController){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
var inputPermission by remember{mutableStateOf(selectedPermission)}
var currentState by remember{mutableStateOf(myContext.getString(R.string.unknown))}
@@ -427,7 +426,7 @@ private fun PermissionManage(pkgName: String, navCtrl: NavHostController){
private fun CrossProfilePkg(pkgName: String){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.cross_profile_package), style = typography.headlineLarge)
@@ -444,7 +443,8 @@ private fun CrossProfilePkg(pkgName: String){
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween){
Button(
onClick = {
if(pkgName!=""){crossProfilePkg.add(pkgName)}
if(pkgName!=""){
crossProfilePkg.add(pkgName)}
myDpm.setCrossProfilePackages(myComponent, crossProfilePkg)
refresh()
},
@@ -454,7 +454,8 @@ private fun CrossProfilePkg(pkgName: String){
}
Button(
onClick = {
if(pkgName!=""){crossProfilePkg.remove(pkgName)}
if(pkgName!=""){
crossProfilePkg.remove(pkgName)}
myDpm.setCrossProfilePackages(myComponent, crossProfilePkg)
refresh()
},
@@ -471,7 +472,7 @@ private fun CrossProfilePkg(pkgName: String){
private fun CrossProfileWidget(pkgName: String){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
var pkgList: MutableList<String>
var list by remember{mutableStateOf("")}
@@ -547,7 +548,8 @@ private fun CredentialManagePolicy(pkgName: String){
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween){
Button(
onClick = {
if(pkgName!=""){credentialList.add(pkgName)}
if(pkgName!=""){
credentialList.add(pkgName)}
credentialListText = credentialList.toText()
},
modifier = Modifier.fillMaxWidth(0.49F)
@@ -556,7 +558,8 @@ private fun CredentialManagePolicy(pkgName: String){
}
Button(
onClick = {
if(pkgName!=""){credentialList.remove(pkgName)}
if(pkgName!=""){
credentialList.remove(pkgName)}
credentialListText = credentialList.toText()
},
modifier = Modifier.fillMaxWidth(0.96F)
@@ -595,7 +598,7 @@ private fun CredentialManagePolicy(pkgName: String){
private fun PermittedAccessibility(pkgName: String){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
@@ -646,7 +649,7 @@ private fun PermittedAccessibility(pkgName: String){
private fun PermittedIME(pkgName: String){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
@@ -698,7 +701,7 @@ private fun PermittedIME(pkgName: String){
private fun KeepUninstalledApp(pkgName: String){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
@@ -837,7 +840,7 @@ private fun InstallApp(){
private fun ClearAppData(pkgName: String){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.dpm
package com.bintianqi.owndroid.dpm
import android.app.admin.DevicePolicyManager
import android.content.Intent
@@ -19,10 +19,10 @@ var apkUri: Uri? = null
var caCert = byteArrayOf()
fun isDeviceOwner(dpm: DevicePolicyManager): Boolean {
return dpm.isDeviceOwnerApp("com.binbin.androidowner")
return dpm.isDeviceOwnerApp("com.bintianqi.owndroid")
}
fun isProfileOwner(dpm: DevicePolicyManager): Boolean {
return dpm.isProfileOwnerApp("com.binbin.androidowner")
return dpm.isProfileOwnerApp("com.bintianqi.owndroid")
}

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.dpm
package com.bintianqi.owndroid.dpm
import android.annotation.SuppressLint
import android.app.admin.DevicePolicyManager
@@ -33,9 +33,10 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.binbin.androidowner.R
import com.binbin.androidowner.ui.*
import com.binbin.androidowner.ui.theme.bgColor
import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.bgColor
@Composable
fun ManagedProfile(navCtrl: NavHostController) {
@@ -80,7 +81,7 @@ fun ManagedProfile(navCtrl: NavHostController) {
private fun Home(navCtrl: NavHostController){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext, Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())){
Text(text = stringResource(R.string.work_profile), style = typography.headlineLarge, modifier = Modifier.padding(top = 8.dp, bottom = 5.dp, start = 15.dp))
if(VERSION.SDK_INT>=30&&isProfileOwner(myDpm)&&myDpm.isManagedProfile(myComponent)){
@@ -105,13 +106,15 @@ private fun Home(navCtrl: NavHostController){
@Composable
private fun CreateWorkProfile(){
val myContext = LocalContext.current
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.create_work_profile), style = typography.headlineLarge)
Spacer(Modifier.padding(vertical = 5.dp))
var skipEncrypt by remember{mutableStateOf(false)}
if(VERSION.SDK_INT>=24){CheckBoxItem(stringResource(R.string.skip_encryption),{skipEncrypt},{skipEncrypt=!skipEncrypt})}
if(VERSION.SDK_INT>=24){
CheckBoxItem(stringResource(R.string.skip_encryption),{skipEncrypt},{skipEncrypt=!skipEncrypt})
}
Spacer(Modifier.padding(vertical = 5.dp))
Button(
onClick = {
@@ -202,7 +205,7 @@ private fun OrgID(){
private fun SuspendPersonalApp(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
@@ -239,7 +242,7 @@ private fun SuspendPersonalApp(){
private fun IntentFilter(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
var action by remember{mutableStateOf("")}

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.dpm
package com.bintianqi.owndroid.dpm
import android.annotation.SuppressLint
import android.app.admin.DevicePolicyManager
@@ -41,10 +41,12 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.binbin.androidowner.R
import com.binbin.androidowner.toText
import com.binbin.androidowner.ui.*
import com.binbin.androidowner.ui.theme.bgColor
import com.bintianqi.owndroid.dpm.scrollAnim
import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.toText
import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.bgColor
var ssidSet = mutableSetOf<WifiSsid>()
@Composable
@@ -102,7 +104,7 @@ fun Network(navCtrl: NavHostController){
private fun Home(navCtrl:NavHostController,scrollState: ScrollState){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext, Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().verticalScroll(scrollState)){
Text(text = stringResource(R.string.network), style = typography.headlineLarge, modifier = Modifier.padding(top = 8.dp, bottom = 5.dp, start = 15.dp))
if(VERSION.SDK_INT>=24&&isDeviceOwner(myDpm)){
@@ -139,7 +141,7 @@ private fun Home(navCtrl:NavHostController,scrollState: ScrollState){
private fun Switches(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
Column(modifier = Modifier.fillMaxSize()){
Spacer(Modifier.padding(vertical = 5.dp))
if(VERSION.SDK_INT>=33&&isDeviceOwner(myDpm)){
@@ -290,7 +292,7 @@ private fun WifiSsidPolicy(){
private fun PrivateDNS(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
@@ -360,7 +362,7 @@ private fun PrivateDNS(){
private fun NetLog(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.retrieve_net_logs), style = typography.headlineLarge)
@@ -438,7 +440,7 @@ private fun WifiKeypair(){
private fun APN(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
val setting = myDpm.getOverrideApns(myComponent)

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.dpm
package com.bintianqi.owndroid.dpm
import android.annotation.SuppressLint
import android.app.KeyguardManager
@@ -33,9 +33,10 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.binbin.androidowner.R
import com.binbin.androidowner.ui.*
import com.binbin.androidowner.ui.theme.bgColor
import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.bgColor
@Composable
fun Password(navCtrl: NavHostController){
@@ -120,7 +121,7 @@ private fun Home(navCtrl:NavHostController,scrollState: ScrollState){
private fun PasswordInfo(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext, Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.password_info), style = typography.headlineLarge)
@@ -152,7 +153,7 @@ private fun PasswordInfo(){
private fun ResetPasswordToken(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val myByteArray by remember{ mutableStateOf(byteArrayOf(1,1,4,5,1,4,1,9,1,9,8,1,0,1,1,4,5,1,4,1,9,1,9,8,1,0,1,1,4,5,1,4,1,9,1,9,8,1,0)) }
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
@@ -206,7 +207,7 @@ private fun ResetPasswordToken(){
private fun ResetPassword(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
var newPwd by remember{ mutableStateOf("") }
val myByteArray by remember{ mutableStateOf(byteArrayOf(1,1,4,5,1,4,1,9,1,9,8,1,0,1,1,4,5,1,4,1,9,1,9,8,1,0,1,1,4,5,1,4,1,9,1,9,8,1,0)) }
@@ -334,7 +335,7 @@ private fun PasswordComplexity(){
private fun ScreenTimeout(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
var inputContent by remember{ mutableStateOf(if(isDeviceOwner(myDpm)){myDpm.getMaximumTimeToLock(myComponent).toString()}else{""}) }
var ableToApply by remember{ mutableStateOf(inputContent!="") }
@@ -370,7 +371,7 @@ private fun ScreenTimeout(){
private fun MaxFailedPasswordForWipe(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
var inputContent by remember{ mutableStateOf(if(isDeviceOwner(myDpm)){myDpm.getMaximumFailedPasswordsForWipe(myComponent).toString()}else{""}) }
var ableToApply by remember{ mutableStateOf(inputContent!=""&&inputContent!="0") }
@@ -406,7 +407,7 @@ private fun MaxFailedPasswordForWipe(){
private fun PasswordExpiration(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
var inputContent by remember{ mutableStateOf(if(isDeviceOwner(myDpm)){myDpm.getPasswordExpirationTimeout(myComponent).toString()}else{""}) }
var ableToApply by remember{ mutableStateOf(inputContent!="") }
@@ -442,7 +443,7 @@ private fun PasswordExpiration(){
private fun PasswordHistoryLength(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
var inputContent by remember{ mutableStateOf(if(isDeviceOwner(myDpm)){myDpm.getPasswordHistoryLength(myComponent).toString()}else{""}) }
var ableToApply by remember{ mutableStateOf(inputContent!="") }
@@ -478,7 +479,7 @@ private fun PasswordHistoryLength(){
private fun KeyguardDisabledFeatures(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
var state by remember{mutableIntStateOf(-1)}
var shortcuts by remember{mutableStateOf(false)}
var biometrics by remember{mutableStateOf(false)}
@@ -576,7 +577,7 @@ private fun KeyguardDisabledFeatures(){
private fun PasswordQuality(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val passwordQuality = mapOf(
PASSWORD_QUALITY_UNSPECIFIED to stringResource(R.string.password_quality_unspecified),
PASSWORD_QUALITY_SOMETHING to stringResource(R.string.password_quality_something),

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.dpm
package com.bintianqi.owndroid.dpm
import android.annotation.SuppressLint
import android.app.admin.DevicePolicyManager
@@ -33,9 +33,10 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.binbin.androidowner.R
import com.binbin.androidowner.ui.*
import com.binbin.androidowner.ui.theme.bgColor
import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.bgColor
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
@@ -103,7 +104,7 @@ fun DpmPermissions(navCtrl:NavHostController){
private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext, Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().verticalScroll(listScrollState)) {
Text(text = stringResource(R.string.permission), style = typography.headlineLarge, modifier = Modifier.padding(top = 8.dp, bottom = 5.dp, start = 15.dp))
SubPageItem(
@@ -147,7 +148,7 @@ private fun Home(localNavCtrl:NavHostController,listScrollState:ScrollState){
private fun LockScreenInfo(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
var infoText by remember{mutableStateOf(myDpm.deviceOwnerLockScreenInfo?.toString() ?: "")}
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
@@ -185,7 +186,7 @@ private fun LockScreenInfo(){
private fun DeviceAdmin(navCtrl: NavHostController){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val co = rememberCoroutineScope()
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
Spacer(Modifier.padding(vertical = 10.dp))
@@ -223,7 +224,7 @@ private fun DeviceAdmin(navCtrl: NavHostController){
private fun ProfileOwner(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.profile_owner), style = typography.headlineLarge)
@@ -349,7 +350,7 @@ private fun SpecificID(){
private fun OrgName(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
var orgName by remember{mutableStateOf(try{myDpm.getOrganizationName(myComponent).toString()}catch(e:SecurityException){""})}
@@ -381,7 +382,7 @@ private fun OrgName(){
private fun SupportMsg(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
var shortMsg by remember{mutableStateOf(myDpm.getShortSupportMessage(myComponent)?.toString() ?: "")}
var longMsg by remember{mutableStateOf(myDpm.getLongSupportMessage(myComponent)?.toString() ?: "")}
@@ -436,7 +437,7 @@ private fun SupportMsg(){
private fun NoManageAccount(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){
Spacer(Modifier.padding(vertical = 10.dp))
@@ -490,7 +491,7 @@ private fun NoManageAccount(){
private fun TransformOwnership(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
val focusRequester = FocusRequester()
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(horizontal = 8.dp)){

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.dpm
package com.bintianqi.owndroid.dpm
import android.app.admin.DevicePolicyManager
import android.content.ComponentName
@@ -35,7 +35,8 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.dp
import com.binbin.androidowner.R
import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.Receiver
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -46,7 +47,7 @@ import java.io.*
fun ShizukuActivate(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext, Receiver::class.java)
val focusMgr = LocalFocusManager.current
val filesDir = myContext.filesDir
LaunchedEffect(Unit){ extractRish(myContext) }

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.dpm
package com.bintianqi.owndroid.dpm
import android.annotation.SuppressLint
import android.app.admin.DevicePolicyManager
@@ -41,10 +41,11 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.binbin.androidowner.R
import com.binbin.androidowner.toText
import com.binbin.androidowner.ui.*
import com.binbin.androidowner.ui.theme.bgColor
import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.toText
import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.bgColor
import kotlinx.coroutines.delay
import java.util.Date
@@ -159,7 +160,7 @@ private fun Home(navCtrl: NavHostController,scrollState: ScrollState){
private fun Switches(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext, Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
if(isDeviceOwner(myDpm)||isProfileOwner(myDpm)){
@@ -229,7 +230,7 @@ private fun Switches(){
private fun Keyguard(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.keyguard), style = typography.headlineLarge)
@@ -277,7 +278,7 @@ private fun Keyguard(){
private fun BugReport(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp)){
Spacer(Modifier.padding(vertical = 10.dp))
Button(
@@ -298,7 +299,7 @@ private fun BugReport(){
private fun Reboot(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp)){
Spacer(Modifier.padding(vertical = 10.dp))
Button(
@@ -316,7 +317,7 @@ private fun Reboot(){
private fun EditTime(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
@@ -356,7 +357,7 @@ private fun EditTime(){
private fun PermissionPolicy(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
var selectedPolicy by remember{mutableIntStateOf(myDpm.getPermissionPolicy(myComponent))}
Spacer(Modifier.padding(vertical = 10.dp))
@@ -462,7 +463,7 @@ private fun NearbyStreamingPolicy(){
private fun LockTaskFeatures(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
val lockTaskPolicyList = mutableListOf(
@@ -595,7 +596,7 @@ private fun LockTaskFeatures(){
private fun CaCert(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
var exist by remember{mutableStateOf(false)}
var isEmpty by remember{mutableStateOf(true)}
val refresh = {
@@ -663,7 +664,7 @@ private fun CaCert(){
private fun SecurityLogs(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
Text(text = stringResource(R.string.security_logs), style = typography.headlineLarge)
@@ -708,7 +709,7 @@ private fun WipeData(){
val myContext = LocalContext.current
val userManager = myContext.getSystemService(Context.USER_SERVICE) as UserManager
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
var flag by remember{ mutableIntStateOf(0) }
@@ -794,7 +795,7 @@ private fun WipeData(){
private fun SysUpdatePolicy(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
val sharedPref = myContext.getSharedPreferences("data", Context.MODE_PRIVATE)
val isWear = sharedPref.getBoolean("isWear",false)

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.dpm
package com.bintianqi.owndroid.dpm
import android.annotation.SuppressLint
import android.app.admin.DevicePolicyManager
@@ -20,8 +20,11 @@ import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.material3.*
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme.typography
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
@@ -37,11 +40,12 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.binbin.androidowner.R
import com.binbin.androidowner.toText
import com.binbin.androidowner.ui.*
import com.binbin.androidowner.ui.theme.bgColor
import com.binbin.androidowner.uriToStream
import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.toText
import com.bintianqi.owndroid.ui.*
import com.bintianqi.owndroid.ui.theme.bgColor
import com.bintianqi.owndroid.uriToStream
import kotlinx.coroutines.delay
var affiliationID = mutableSetOf<String>()
@@ -125,7 +129,7 @@ private fun Home(navCtrl: NavHostController,scrollState: ScrollState){
private fun CurrentUserInfo(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext, Receiver::class.java)
val userManager = myContext.getSystemService(Context.USER_SERVICE) as UserManager
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
@@ -157,7 +161,7 @@ private fun UserOperation(){
val myContext = LocalContext.current
val userManager = myContext.getSystemService(Context.USER_SERVICE) as UserManager
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
Spacer(Modifier.padding(vertical = 10.dp))
@@ -272,7 +276,7 @@ private fun CreateUser(){
val myContext = LocalContext.current
val userManager = myContext.getSystemService(Context.USER_SERVICE) as UserManager
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
var userName by remember{ mutableStateOf("") }
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
@@ -319,7 +323,7 @@ private fun CreateUser(){
private fun AffiliationID(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
var input by remember{mutableStateOf("")}
var list by remember{mutableStateOf("")}
@@ -387,7 +391,7 @@ private fun AffiliationID(){
private fun Username(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
var inputUsername by remember{mutableStateOf("")}
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){
@@ -431,7 +435,7 @@ private fun Username(){
private fun UserSessionMessage(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
val focusMgr = LocalFocusManager.current
val getStart = myDpm.getStartUserSessionMessage(myComponent)?:""
val getEnd = myDpm.getEndUserSessionMessage(myComponent)?:""
@@ -492,7 +496,7 @@ private fun UserSessionMessage(){
private fun UserIcon(){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
var getContent by remember{mutableStateOf(false)}
var canApply by remember{mutableStateOf(false)}
Column(modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp).verticalScroll(rememberScrollState())){

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.dpm
package com.bintianqi.owndroid.dpm
import android.annotation.SuppressLint
import android.app.admin.DevicePolicyManager
@@ -33,12 +33,13 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import com.binbin.androidowner.R
import com.binbin.androidowner.ui.Animations
import com.binbin.androidowner.ui.SubPageItem
import com.binbin.androidowner.ui.SwitchItem
import com.binbin.androidowner.ui.TopBar
import com.binbin.androidowner.ui.theme.bgColor
import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.Receiver
import com.bintianqi.owndroid.ui.Animations
import com.bintianqi.owndroid.ui.SubPageItem
import com.bintianqi.owndroid.ui.SwitchItem
import com.bintianqi.owndroid.ui.TopBar
import com.bintianqi.owndroid.ui.theme.bgColor
private data class Restriction(
val restriction:String,
@@ -100,7 +101,7 @@ fun UserRestriction(navCtrl: NavHostController){
private fun Home(navCtrl:NavHostController,scrollState: ScrollState){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext, Receiver::class.java)
Column(modifier = Modifier.fillMaxSize().verticalScroll(scrollState)){
Text(text = stringResource(R.string.user_restrict), style = typography.headlineLarge, modifier = Modifier.padding(top = 8.dp, bottom = 7.dp, start = 15.dp))
Text(text = stringResource(R.string.switch_to_disable_feature), modifier = Modifier.padding(start = 15.dp))
@@ -192,7 +193,7 @@ private fun UserRestrictionItem(
){
val myContext = LocalContext.current
val myDpm = myContext.getSystemService(ComponentActivity.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val myComponent = ComponentName(myContext,MyDeviceAdminReceiver::class.java)
val myComponent = ComponentName(myContext,Receiver::class.java)
SwitchItem(
itemName,restrictionDescription,leadIcon,
{ if(isDeviceOwner(myDpm)||isProfileOwner(myDpm)){ myDpm.getUserRestrictions(myComponent).getBoolean(restriction) }else{ false } },

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.ui
package com.bintianqi.owndroid.ui
import androidx.compose.animation.*
import androidx.compose.animation.core.FiniteAnimationSpec
@@ -8,7 +8,7 @@ import androidx.compose.animation.core.spring
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
import androidx.navigation.NavBackStackEntry
import com.binbin.androidowner.displayMetrics
import com.bintianqi.owndroid.displayMetrics
class Animations{
private val fade: FiniteAnimationSpec<Float> = spring(stiffness = Spring.StiffnessMediumLow)

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.ui
package com.bintianqi.owndroid.ui
import android.content.Context
import android.widget.Toast
@@ -22,9 +22,9 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavHostController
import com.binbin.androidowner.R
import com.binbin.androidowner.ui.theme.bgColor
import com.binbin.androidowner.writeClipBoard
import com.bintianqi.owndroid.R
import com.bintianqi.owndroid.ui.theme.bgColor
import com.bintianqi.owndroid.writeClipBoard
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.ui.theme
package com.bintianqi.owndroid.ui.theme
import androidx.compose.ui.graphics.Color

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.ui.theme
package com.bintianqi.owndroid.ui.theme
import android.app.Activity
import android.content.Context

View File

@@ -1,4 +1,4 @@
package com.binbin.androidowner.ui.theme
package com.bintianqi.owndroid.ui.theme
import androidx.compose.material3.Typography
import androidx.compose.ui.text.TextStyle

View File

@@ -1 +1 @@
unqualifiedResLocale=en
unqualifiedResLocale=en-US

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.AndroidOwner" parent="android:Theme.Material.Light.NoActionBar">
<style name="Theme.OwnDroid" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:windowSplashScreenBackground">#000000</item>
</style>
</resources>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.AndroidOwner" parent="android:Theme.Material.Light.NoActionBar">
<style name="Theme.OwnDroid" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:windowSplashScreenBackground">#F1F5F4</item>
</style>
</resources>

View File

@@ -47,9 +47,6 @@
<string name="profile_owner">Profile owner</string>
<string name="device_owner">Device owner</string>
<string name="activate_device_admin">激活Device admin</string>
<string name="activate_device_admin_command">adb shell dpm set-active-admin com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver</string>
<string name="activate_profile_owner_command">adb shell dpm set-profile-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver</string>
<string name="activate_device_owner_command">adb shell dpm set-device-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver</string>
<string name="device_info">设备信息</string>
<string name="is_device_financed">Financed device: %1$s</string>
<string name="dpmrh">设备策略管理器角色(DPMRH)%1$s</string>

View File

@@ -50,9 +50,9 @@
<string name="profile_owner">Profile owner</string>
<string name="device_owner">Device owner</string>
<string name="activate_device_admin">Activate Device admin</string>
<string name="activate_device_admin_command">adb shell dpm set-active-admin com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver</string>
<string name="activate_profile_owner_command">adb shell dpm set-profile-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver</string>
<string name="activate_device_owner_command">adb shell dpm set-device-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver</string>
<string name="activate_device_admin_command" translatable="false">adb shell dpm set-active-admin com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver</string>
<string name="activate_profile_owner_command" translatable="false">adb shell dpm set-profile-owner com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver</string>
<string name="activate_device_owner_command" translatable="false">adb shell dpm set-device-owner com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver</string>
<string name="device_info">Device info</string>
<string name="is_device_financed">Financed device: %1$s</string>
<string name="dpmrh">Device policy manager role holder%1$s</string>
@@ -88,11 +88,11 @@
<string name="list_owners">List owners</string>
<string name="shizuku_not_started">Shizuku not started. </string>
<string name="activate_org_profile_command_with_user_id" tools:ignore="TypographyDashes" translatable="false">
dpm mark-profile-owner-on-organization-owned-device --user %1$s com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver
dpm mark-profile-owner-on-organization-owned-device --user %1$s com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver
</string>
<string name="dpm_activate_do_command" translatable="false">dpm set-device-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver</string>
<string name="dpm_activate_po_command" translatable="false">dpm set-profile-owner com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver</string>
<string name="dpm_activate_da_command" translatable="false">dpm set-active-admin com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver</string>
<string name="dpm_activate_do_command" translatable="false">dpm set-device-owner com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver</string>
<string name="dpm_activate_po_command" translatable="false">dpm set-profile-owner com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver</string>
<string name="dpm_activate_da_command" translatable="false">dpm set-active-admin com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver</string>
<string name="shizuku_activated_shell">Permission granted (Shell)</string>
<string name="shizuku_activated_root">Permission granted (Root)</string>
<string name="activate_profile_owner">Activate profile owner</string>
@@ -222,7 +222,7 @@
<string name="is_org_owned_profile">Organization owned work profile: %1$s</string>
<string name="org_owned_work_profile">Organization work profile</string>
<string name="activate_org_profile_command" tools:ignore="TypographyDashes" translatable="false">
adb shell \"dpm mark-profile-owner-on-organization-owned-device --user %1$s com.binbin.androidowner/com.binbin.androidowner.dpm.MyDeviceAdminReceiver\"
adb shell \"dpm mark-profile-owner-on-organization-owned-device --user %1$s com.bintianqi.owndroid/com.bintianqi.owndroid.Receiver\"
</string>
<string name="skip_encryption">Skip encryption</string>
<string name="create">Create</string>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.AndroidOwner" parent="android:Theme.Material.Light.NoActionBar">
<style name="Theme.OwnDroid" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:navigationBarColor">#FFFFFF</item>
<item name="android:statusBarColor">#FFFFFF</item>
<item name="android:windowSwipeToDismiss">true</item>

View File

@@ -1,5 +1,5 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.android.application") version "8.2.1" apply false
id("com.android.application") version "8.3.2" apply false
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}

View File

@@ -1,6 +1,6 @@
#Fri Jan 12 20:22:20 CST 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -0,0 +1,2 @@
apksigner sign --key testkey.pk8 --cert testkey.x509.pem ..\app\build\outputs\apk\release\app-release-unsigned.apk
ren ..\app\build\outputs\apk\release\app-release-unsigned.apk ..\app\build\outputs\apk\release\app-testkey.apk

BIN
signature/testkey.pk8 Normal file

Binary file not shown.

View File

@@ -0,0 +1,27 @@
-----BEGIN CERTIFICATE-----
MIIEqDCCA5CgAwIBAgIJAJNurL4H8gHfMA0GCSqGSIb3DQEBBQUAMIGUMQswCQYD
VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4g
VmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UE
AxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAe
Fw0wODAyMjkwMTMzNDZaFw0zNTA3MTcwMTMzNDZaMIGUMQswCQYDVQQGEwJVUzET
MBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4G
A1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9p
ZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZI
hvcNAQEBBQADggENADCCAQgCggEBANaTGQTexgskse3HYuDZ2CU+Ps1s6x3i/waM
qOi8qM1r03hupwqnbOYOuw+ZNVn/2T53qUPn6D1LZLjk/qLT5lbx4meoG7+yMLV4
wgRDvkxyGLhG9SEVhvA4oU6Jwr44f46+z4/Kw9oe4zDJ6pPQp8PcSvNQIg1QCAcy
4ICXF+5qBTNZ5qaU7Cyz8oSgpGbIepTYOzEJOmc3Li9kEsBubULxWBjf/gOBzAzU
RNps3cO4JFgZSAGzJWQTT7/emMkod0jb9WdqVA2BVMi7yge54kdVMxHEa5r3b97s
zI5p58ii0I54JiCUP5lyfTwE/nKZHZnfm644oLIXf6MdW2r+6R8CAQOjgfwwgfkw
HQYDVR0OBBYEFEhZAFY9JyxGrhGGBaR0GawJyowRMIHJBgNVHSMEgcEwgb6AFEhZ
AFY9JyxGrhGGBaR0GawJyowRoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UE
CBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMH
QW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAG
CSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJAJNurL4H8gHfMAwGA1Ud
EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHqvlozrUMRBBVEY0NqrrwFbinZa
J6cVosK0TyIUFf/azgMJWr+kLfcHCHJsIGnlw27drgQAvilFLAhLwn62oX6snb4Y
LCBOsVMR9FXYJLZW2+TcIkCRLXWG/oiVHQGo/rWuWkJgU134NDEFJCJGjDbiLCpe
+ZTWHdcwauTJ9pUbo8EvHRkU3cYfGmLaLfgn9gP+pWA7LFQNvXwBnDa6sppCccEX
31I828XzgXpJ4O+mDL1/dBd+ek8ZPUP0IgdyZm5MTYPhvVqGCHzzTy3sIeJFymwr
sBbmg2OAUNLEMO6nwmocSdN2ClirfxqCzJOLSDE4QyS9BAH6EhY6UFcOaE0=
-----END CERTIFICATE-----