From 15406126360d43a514a8a4158d52da5f1a2337ac Mon Sep 17 00:00:00 2001
From: Li
Date: Thu, 25 Apr 2024 15:04:24 +1200
Subject: [PATCH] Update code
---
.gitignore | 3 +-
app/build.gradle | 5 +-
app/src/main/AndroidManifest.xml | 2 +-
.../java/com/psmreborn/nopsmdrm/Helper.java | 13 ++++++
.../psmreborn/nopsmdrm/NoPsmDrmInstaller.java | 43 ++++++++++++++++--
.../java/com/psmreborn/nopsmdrm/Root.java | 4 +-
.../java/com/psmreborn/nopsmdrm/Startup.java | 20 ++++++--
app/src/main/res/layout/activity_main.xml | 32 ++++++-------
app/src/main/res/raw/libdefault.so | Bin 21984 -> 26080 bytes
app/src/main/res/raw/library.db | Bin 23552 -> 23552 bytes
10 files changed, 92 insertions(+), 30 deletions(-)
diff --git a/.gitignore b/.gitignore
index e496144..0e6ce86 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,4 +15,5 @@
.cxx
local.properties
libsuperuser/build/*
-app/build/*
\ No newline at end of file
+app/build/*
+app/release/*
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index daa547a..a4b65e4 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -4,6 +4,7 @@ plugins {
android {
namespace 'com.psmreborn.nopsmdrm'
+ //noinspection GradleDependency were targeting the xperia play
compileSdk 10
defaultConfig {
@@ -11,8 +12,8 @@ android {
minSdk 10
//noinspection ExpiredTargetSdkVersion dont care about google play
targetSdk 10
- versionCode 1
- versionName "1.0"
+ versionCode 4
+ versionName "1.4"
}
buildTypes {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a25367f..8ce49ba 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -9,7 +9,7 @@
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
- tools:targetApi="13">
+ tools:targetApi="10">
diff --git a/app/src/main/java/com/psmreborn/nopsmdrm/Helper.java b/app/src/main/java/com/psmreborn/nopsmdrm/Helper.java
index d2ab818..0a2e177 100644
--- a/app/src/main/java/com/psmreborn/nopsmdrm/Helper.java
+++ b/app/src/main/java/com/psmreborn/nopsmdrm/Helper.java
@@ -4,15 +4,28 @@ import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
+import eu.chainfire.libsuperuser.Shell;
+
public class Helper {
private static Context ctx;
public static void setContext(Context context){
ctx = context;
}
+ public static boolean isNoPsmDrmAlreadyInstalled() {
+ try {
+ if(new File(getPsmApp().nativeLibraryDir, "libdefault_real.so").exists()){
+ return true;
+ }
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
+ }
+ return false;
+ }
public static boolean isPsmInstalled(){
try {
ctx.getPackageManager().getApplicationInfo("com.playstation.psstore", 0);
diff --git a/app/src/main/java/com/psmreborn/nopsmdrm/NoPsmDrmInstaller.java b/app/src/main/java/com/psmreborn/nopsmdrm/NoPsmDrmInstaller.java
index e3e3cef..28a79d2 100644
--- a/app/src/main/java/com/psmreborn/nopsmdrm/NoPsmDrmInstaller.java
+++ b/app/src/main/java/com/psmreborn/nopsmdrm/NoPsmDrmInstaller.java
@@ -20,6 +20,7 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
+import java.util.Locale;
import eu.chainfire.libsuperuser.Shell;
@@ -156,10 +157,44 @@ public class NoPsmDrmInstaller extends AsyncTask {
String r_localLibrary = new File(sharedPrefsPath, "LocalLibrary.xml").getAbsolutePath();
// generate shared_prefs
- writeTxtFile(c_signinInfo, "\n\n");
- writeTxtFile(c_psstorePrefs, "\n\n");
- writeTxtFile(c_runningContentInfo, "\n\n");
- writeTxtFile(c_localLibrary, "\n\n");
+ writeTxtFile(c_signinInfo, "\n" +
+ "\n");
+
+ writeTxtFile(c_psstorePrefs, "\n" +
+ "\n");
+
+ writeTxtFile(c_runningContentInfo, "\n" +
+ "\n");
+
+ writeTxtFile(c_localLibrary, "\n" +
+ "\n");
// copy to the correct place and set permissions properly.
copyChmodAndChown(c_signinInfo, r_signinInfo, 660, String.valueOf(stringEncryptor.getPsmUid()));
diff --git a/app/src/main/java/com/psmreborn/nopsmdrm/Root.java b/app/src/main/java/com/psmreborn/nopsmdrm/Root.java
index e6c815b..e578be0 100644
--- a/app/src/main/java/com/psmreborn/nopsmdrm/Root.java
+++ b/app/src/main/java/com/psmreborn/nopsmdrm/Root.java
@@ -18,7 +18,7 @@ public class Root {
public static void killApplication(String processName) throws Shell.ShellDiedException {
Log.i("ROOT", "Killing process: " + processName);
- Shell.Pool.SU.run(new String[] { busyboxBinary + " pkill '" + processName +"'" });
+ Shell.Pool.SU.run(new String[] { busyboxBinary + " pkill -9 '" + processName +"'" });
}
public static boolean fileExistRoot(String filename) throws Shell.ShellDiedException {
Log.i("ROOT", "FileExistRoot: " + filename);
@@ -117,7 +117,7 @@ public class Root {
private static void setupBusyBox() throws IOException {
Log.i("ROOT","Creating busybox binary");
File tmpFile = new File(ctx.getCacheDir(), "busybox");
- if(!tmpFile.exists()){
+ if(!tmpFile.exists()) {
tmpFile.createNewFile();
if(tmpFile.setExecutable(true,false)) {
diff --git a/app/src/main/java/com/psmreborn/nopsmdrm/Startup.java b/app/src/main/java/com/psmreborn/nopsmdrm/Startup.java
index 7060c9d..b4b803c 100644
--- a/app/src/main/java/com/psmreborn/nopsmdrm/Startup.java
+++ b/app/src/main/java/com/psmreborn/nopsmdrm/Startup.java
@@ -2,6 +2,7 @@ package com.psmreborn.nopsmdrm;
import android.app.Activity;
import android.content.Context;
+import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Environment;
import android.widget.Button;
@@ -10,6 +11,8 @@ import android.widget.TextView;
import eu.chainfire.libsuperuser.Shell;
import static com.psmreborn.nopsmdrm.Helper.*;
+import java.io.File;
+
public class Startup extends AsyncTask {
private Context ctx;
@@ -19,7 +22,6 @@ public class Startup extends AsyncTask {
public Startup(Context context) {
this.ctx = context;
}
-
@Override
protected Void doInBackground(Void... params) {
try {
@@ -40,6 +42,8 @@ public class Startup extends AsyncTask {
wasError = true;
errorMsg = "No SD Card inserted.";
}
+ Root.setContext(ctx);
+
} catch (Exception e) {
wasError = true;
errorMsg = e.getMessage();
@@ -49,13 +53,21 @@ public class Startup extends AsyncTask {
@Override
protected void onPostExecute(Void result) {
+ TextView statusTV = (TextView) ((Activity)ctx).findViewById(R.id.errorMsg);
+ Button installButton = (Button) ((Activity)ctx).findViewById(R.id.installPsm);
+
if(!wasError) {
- Button installButton = (Button) ((Activity)ctx).findViewById(R.id.installPsm);
+ statusTV.setText("");
+
+ if(isNoPsmDrmAlreadyInstalled()){
+ installButton.setText("Update NoPsmDrm");
+ };
+
installButton.setEnabled(true);
+
}
else{
- TextView rootDetectedTV = (TextView) ((Activity)ctx).findViewById(R.id.errorMsg);
- rootDetectedTV.setText("Error: "+errorMsg);
+ statusTV.setText("Error: "+errorMsg);
}
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index a67d681..c11a77d 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -2,30 +2,30 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingTop="10dp"
- android:paddingLeft="10dp"
- android:paddingRight="10dp"
- android:paddingBottom="10dp"
+ android:paddingTop="15dp"
+ android:paddingLeft="15dp"
+ android:paddingRight="15dp"
+ android:paddingBottom="15dp"
android:keepScreenOn="true"
android:noHistory="true"
android:orientation="vertical">
-
-
+ android:text="Checking, Please wait ..."/>
+
+
\ No newline at end of file
diff --git a/app/src/main/res/raw/libdefault.so b/app/src/main/res/raw/libdefault.so
index 5a4bc434e334fc10713d347e9090b4be6ac95388..32b30ed4324ecead5d173b17e5ff7a11b15b4279 100644
GIT binary patch
delta 8709
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
T_TT1;X(2@jObQ%l8m0dW=69Cy
diff --git a/app/src/main/res/raw/library.db b/app/src/main/res/raw/library.db
index 2d1a9abb738a0e9bf39021105332486dc10434b6..fa90b621983705bb85636f931c772fb8683f0dbb 100644
GIT binary patch
delta 79
zcmZqJ!Pu~aae}m9C<6n7I1s}C_e33I#?Xxk%e1-58JH57W-}jUEZ_W)HGpw)g047M
cV;U#Bw5}>+GxOvY-DS-21_qn8^seaw0J;_vUH||9
delta 78
zcmZqJ!Pu~aae}m9FaraFI1s}C=R_T2#^8+!%e1+w7?={6W-}jUtlIpLHGpw)g047k
bNW5obGAFyVt}0_w?c_$?Wt+A1uIT~*v3e8^