Skip to content
This repository was archived by the owner on Jun 28, 2022. It is now read-only.

Commit

Permalink
migrate to new shizuku lib with sui support
Browse files Browse the repository at this point in the history
  • Loading branch information
Aefyr committed Feb 1, 2021
1 parent eaffaac commit a98f671
Show file tree
Hide file tree
Showing 6 changed files with 119 additions and 11 deletions.
6 changes: 5 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ dependencies {
implementation 'com.google.android.material:material:1.3.0-rc01'

implementation 'com.github.bumptech.glide:glide:4.11.0'
implementation 'moe.shizuku.privilege:api:3.1.0'
implementation 'com.google.android:flexbox:2.0.1'
implementation 'com.tomergoldst.android:tooltips:1.0.11'
implementation 'com.google.code.gson:gson:2.8.6'
Expand All @@ -70,6 +69,11 @@ dependencies {
normalImplementation 'com.google.firebase:firebase-crashlytics:17.3.1'
normalImplementation 'com.android.billingclient:billing:3.0.2'

//Shizuku/Sui
def shizuku_version = '11.0.1'
implementation "rikka.shizuku:api:$shizuku_version"
implementation "rikka.shizuku:provider:$shizuku_version"

debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.3'
}

Expand Down
13 changes: 11 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.aefyr.sai">

<uses-sdk tools:overrideLibrary="rikka.shizuku.provider, rikka.shizuku.api, rikka.shizuku.shared, rikka.shizuku.aidl" />

<uses-feature
android:name="android.software.leanback"
android:required="false" />
Expand Down Expand Up @@ -303,12 +305,19 @@
<service android:name=".backup2.impl.BackupService2" />

<provider
android:name="moe.shizuku.api.ShizukuBinderReceiveProvider"
android:name="rikka.shizuku.ShizukuProvider"
android:authorities="${applicationId}.shizuku"
android:multiprocess="false"
android:enabled="true"
android:exported="true"
android:multiprocess="false"
android:permission="android.permission.INTERACT_ACROSS_USERS_FULL" />

<provider
android:name=".shizuku.SuiInitProvider"
android:authorities="${applicationId}.shizuku.sui.init"
android:enabled="true"
android:exported="false" />

<provider
android:name=".flavor.FlavorInitProvider"
android:authorities="${applicationId}.flavor.init"
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/java/com/aefyr/sai/shell/ShizukuShell.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
import java.io.InputStream;
import java.io.OutputStream;

import moe.shizuku.api.RemoteProcess;
import moe.shizuku.api.ShizukuService;
import rikka.shizuku.Shizuku;
import rikka.shizuku.ShizukuRemoteProcess;

public class ShizukuShell implements Shell {
private static final String TAG = "ShizukuShell";
Expand All @@ -31,7 +31,7 @@ private ShizukuShell() {

@Override
public boolean isAvailable() {
if (!ShizukuService.pingBinder())
if (!Shizuku.pingBinder())
return false;

try {
Expand Down Expand Up @@ -65,7 +65,7 @@ private Result execInternal(Command command, @Nullable InputStream inputPipe) {
try {
Command.Builder shCommand = new Command.Builder("sh", "-c", command.toString());

RemoteProcess process = ShizukuService.newProcess(shCommand.build().toStringArray(), null, null);
ShizukuRemoteProcess process = Shizuku.newProcess(shCommand.build().toStringArray(), null, null);

Thread stdOutD = IOUtils.writeStreamToStringBuilder(stdOutSb, process.getInputStream());
Thread stdErrD = IOUtils.writeStreamToStringBuilder(stdErrSb, process.getErrorStream());
Expand Down
57 changes: 57 additions & 0 deletions app/src/main/java/com/aefyr/sai/shizuku/SuiInitProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.aefyr.sai.shizuku;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.aefyr.sai.BuildConfig;
import com.aefyr.sai.utils.Utils;

import rikka.sui.Sui;

public class SuiInitProvider extends ContentProvider {
public static final String TAG = "SuiInitProvider";

@Override
public boolean onCreate() {
if (Utils.apiIsAtLeast(Build.VERSION_CODES.M)) {
Log.d(TAG, String.format("Sui.init = %s", Sui.init(BuildConfig.APPLICATION_ID)));
}

return true;
}

@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
return null;
}

@Nullable
@Override
public String getType(@NonNull Uri uri) {
return null;
}

@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
return null;
}

@Override
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
return 0;
}

@Override
public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@
import java.util.List;
import java.util.Objects;

import moe.shizuku.api.ShizukuClientHelper;
import rikka.shizuku.Shizuku;

public class PreferencesFragment extends PreferenceFragmentCompat implements FilePickerDialogFragment.OnFilesSelectedListener, SingleChoiceListDialogFragment.OnItemSelectedListener, BaseBottomSheetDialogFragment.OnDismissListener, SharedPreferences.OnSharedPreferenceChangeListener, DarkLightThemeSelectionDialogFragment.OnDarkLightThemesChosenListener {
public class PreferencesFragment extends PreferenceFragmentCompat implements FilePickerDialogFragment.OnFilesSelectedListener, SingleChoiceListDialogFragment.OnItemSelectedListener, BaseBottomSheetDialogFragment.OnDismissListener, SharedPreferences.OnSharedPreferenceChangeListener, DarkLightThemeSelectionDialogFragment.OnDarkLightThemesChosenListener, Shizuku.OnRequestPermissionResultListener {

private PreferencesHelper mHelper;
private AnalyticsProvider mAnalyticsProvider;
Expand All @@ -69,6 +69,10 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(requireContext());
prefs.edit().putBoolean(PreferencesKeys.AUTO_THEME, Theme.getInstance(requireContext()).getThemeMode() == Theme.Mode.AUTO_LIGHT_DARK).apply();

if (Utils.apiIsAtLeast(Build.VERSION_CODES.M)) {
Shizuku.addRequestPermissionResultListener(this);
}

super.onCreate(savedInstanceState);
}

Expand Down Expand Up @@ -297,12 +301,22 @@ public void onItemSelected(String dialogTag, int selectedItemIndex) {
AlertsUtils.showAlert(this, R.string.error, R.string.settings_main_installer_error_shizuku_pre_m);
return;
}
if (!ShizukuClientHelper.isManagerV3Installed(requireContext())) {

if (!Shizuku.pingBinder()) {
AlertsUtils.showAlert(this, R.string.error, R.string.settings_main_installer_error_no_shizuku);
return;
}

installerSet = PermissionsUtils.checkAndRequestShizukuPermissions(this);
if (!Shizuku.isPreV11() && Shizuku.getVersion() >= 11) {
if (Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) {
installerSet = true;
} else {
Shizuku.requestPermission(PermissionsUtils.REQUEST_CODE_SHIZUKU);
}
} else {
installerSet = PermissionsUtils.checkAndRequestShizukuPermissions(this);
}

break;
}
if (installerSet) {
Expand All @@ -326,6 +340,10 @@ public void onDialogDismissed(@NonNull String dialogTag) {
public void onDestroy() {
super.onDestroy();
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);

if (Utils.apiIsAtLeast(Build.VERSION_CODES.M)) {
Shizuku.removeRequestPermissionResultListener(this);
}
}

@SuppressLint("ApplySharedPref")
Expand All @@ -343,4 +361,18 @@ public void onThemesChosen(@Nullable String tag, Theme.ThemeDescriptor lightThem
theme.setLightTheme(lightTheme);
theme.setDarkTheme(darkTheme);
}

@Override
public void onRequestPermissionResult(int requestCode, int grantResult) {
switch (requestCode) {
case PermissionsUtils.REQUEST_CODE_SHIZUKU:
if (grantResult == PackageManager.PERMISSION_DENIED)
AlertsUtils.showAlert(this, R.string.error, R.string.permissions_required_shizuku);
else {
mHelper.setInstaller(PreferencesValues.INSTALLER_SHIZUKU);
updateInstallerSummary();
}
break;
}
}
}
6 changes: 6 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ allprojects {
google()
jcenter()
maven { url "https://jitpack.io" }
maven {
url 'https://dl.bintray.com/rikkaw/Libraries'
content {
includeGroup "rikka.shizuku"
}
}
}
}

Expand Down

0 comments on commit a98f671

Please sign in to comment.