1
0
mirror of https://github.com/areteruhiro/LIME-beta-hiro.git synced 2025-02-05 21:11:39 +09:00

コードの変更

This commit is contained in:
areteruhiro 2025-02-02 15:41:44 +09:00
parent b8c1ecec15
commit 841fe49287
2 changed files with 41 additions and 53 deletions

View File

@ -9,8 +9,8 @@ android {
defaultConfig { defaultConfig {
minSdk 28 minSdk 28
targetSdk 35 targetSdk 35
versionCode 116155 versionCode 116156
versionName "1.16.15d" versionName "1.16.15e"
multiDexEnabled false multiDexEnabled false
proguardFiles += 'proguard-rules.pro' proguardFiles += 'proguard-rules.pro'
buildConfigField 'String', 'HOOK_TARGET_VERSION', '"141910383"' buildConfigField 'String', 'HOOK_TARGET_VERSION', '"141910383"'

View File

@ -43,6 +43,7 @@ public class RingTone implements IHook {
Constants.RESPONSE_HOOK.methodName, Constants.RESPONSE_HOOK.methodName,
new XC_MethodHook() { new XC_MethodHook() {
@Override @Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable { protected void afterHookedMethod(MethodHookParam param) throws Throwable {
String paramValue = param.args[1].toString(); String paramValue = param.args[1].toString();
@ -74,53 +75,36 @@ public class RingTone implements IHook {
if (paramValue.contains("type:NOTIFIED_RECEIVED_CALL,") && !isPlaying) { if (paramValue.contains("type:NOTIFIED_RECEIVED_CALL,") && !isPlaying) {
if (context != null) { if (context != null) {
// MediaPlayerが初期化されているか確認
if (mediaPlayer != null) { if (mediaPlayer != null) {
// MediaPlayerが再生中か確認
if (mediaPlayer.isPlaying()) { if (mediaPlayer.isPlaying()) {
return; // 再生中の場合は何もしない return;
} else { } else {
mediaPlayer.release(); // 再生中でない場合は解放 mediaPlayer.release();
mediaPlayer = null; // MediaPlayerのインスタンスをnullに設定 mediaPlayer = null;
} }
} }
Uri ringtoneUri = Uri.fromFile(destFile); // コピーしたファイルのURIを取得 Uri ringtoneUri = Uri.fromFile(destFile);
mediaPlayer = MediaPlayer.create(context, ringtoneUri); mediaPlayer = MediaPlayer.create(context, ringtoneUri);
mediaPlayer.setLooping(true); // 繰り返し再生を設定 mediaPlayer.setLooping(true);
if (mediaPlayer != null) { if (mediaPlayer != null) {
mediaPlayer.start(); mediaPlayer.start();
isPlaying = true; isPlaying = true;
mediaPlayer.setOnCompletionListener(mp -> { mediaPlayer.setOnCompletionListener(mp -> {
isPlaying = false;
mp.seekTo(0); mp.seekTo(0);
mp.start(); mp.start();
isPlaying = true;
}); });
} }
} }
} }
if (paramValue.contains("RESULT=REJECTED,")) {
if (mediaPlayer != null) {
try {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
} catch (IllegalStateException ignored) {
}
try {
mediaPlayer.release();
} catch (IllegalStateException ignored) {
} finally {
mediaPlayer = null;
isPlaying = false;
}
}
}
} }
}); }
);
Class<?> targetClass = loadPackageParam.classLoader.loadClass("com.linecorp.andromeda.audio.AudioManager"); Class<?> targetClass = loadPackageParam.classLoader.loadClass("com.linecorp.andromeda.audio.AudioManager");
@ -133,36 +117,38 @@ public class RingTone implements IHook {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable { protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
if (method.getName().equals("setServerConfig")) { if (method.getName().equals("setServerConfig")) {
if (mediaPlayer != null && mediaPlayer.isPlaying()) { if (mediaPlayer != null) {
mediaPlayer.stop(); if (mediaPlayer.isPlaying()) {
mediaPlayer.release(); // MediaPlayerを解放 mediaPlayer.stop();
mediaPlayer = null; // MediaPlayerのインスタンスをnullに設定 }
mediaPlayer.release();
mediaPlayer = null;
} }
} }
if (method.getName().equals("stop")) { if (method.getName().equals("stop")) {
if (mediaPlayer != null && mediaPlayer.isPlaying()) { if (mediaPlayer != null) {
mediaPlayer.stop(); if (mediaPlayer.isPlaying()) {
mediaPlayer.release(); // MediaPlayerを解放 mediaPlayer.stop();
mediaPlayer = null; // MediaPlayerのインスタンスをnullに設定 }
mediaPlayer.release();
mediaPlayer = null;
} }
} }
if (method.getName().equals("processToneEvent")) { if (method.getName().equals("processToneEvent")) {
Object arg0 = param.args[0]; Object arg0 = param.args[0];
if (limeOptions.DialTone.checked) { if (limeOptions.DialTone.checked) {
//Log.d("Xposed", "MuteTone is enabled. Suppressing tone event.");
param.setResult(null); param.setResult(null);
return; return;
} }
if (arg0.toString().contains("START")) { if (arg0.toString().contains("START")) {
if (appContext != null) { if (appContext != null) {
// MediaPlayerが初期化されており再生中の場合はスキップ
if (mediaPlayer != null && mediaPlayer.isPlaying()) { if (mediaPlayer != null && mediaPlayer.isPlaying()) {
//Log.d("Xposed", "MediaPlayer is already playing. Skipping playback."); return;
return; // 再生中の場合は何もしない
} }
Context moduleContext = AndroidAppHelper.currentApplication().createPackageContext( Context moduleContext = AndroidAppHelper.currentApplication().createPackageContext(
"io.github.hiro.lime", Context.CONTEXT_IGNORE_SECURITY); "io.github.hiro.lime", Context.CONTEXT_IGNORE_SECURITY);
@ -171,11 +157,10 @@ public class RingTone implements IHook {
File ringtoneDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "LimeBackup"); File ringtoneDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "LimeBackup");
if (!ringtoneDir.exists()) { if (!ringtoneDir.exists()) {
ringtoneDir.mkdirs(); // ディレクトリが存在しない場合は作成 ringtoneDir.mkdirs();
} }
File destFile = new File(ringtoneDir, resourceNameA + ".wav"); File destFile = new File(ringtoneDir, resourceNameA + ".wav");
// リソースをストリームとして読み込みファイルに書き込む
if (!destFile.exists()) { if (!destFile.exists()) {
try (InputStream in = moduleContext.getResources().openRawResource(resourceIdA); try (InputStream in = moduleContext.getResources().openRawResource(resourceIdA);
OutputStream out = new FileOutputStream(destFile)) { OutputStream out = new FileOutputStream(destFile)) {
@ -189,17 +174,18 @@ public class RingTone implements IHook {
} }
} }
Uri ringtoneUri = Uri.fromFile(destFile); // コピーしたファイルのURIを取得 Uri ringtoneUri = Uri.fromFile(destFile);
mediaPlayer = MediaPlayer.create(appContext, ringtoneUri); mediaPlayer = MediaPlayer.create(appContext, ringtoneUri);
mediaPlayer.setLooping(true); // 繰り返し再生を設定 mediaPlayer.setLooping(true);
if (mediaPlayer != null) { if (mediaPlayer != null) {
mediaPlayer.start(); mediaPlayer.start();
} else {
return; mediaPlayer.setOnCompletionListener(mp -> {
mp.seekTo(0);
mp.start();
});
} }
} else {
return;
} }
} }
} }
@ -213,10 +199,12 @@ public class RingTone implements IHook {
if (method.getName().equals("ACTIVATED") && param.args != null && param.args.length > 0) { if (method.getName().equals("ACTIVATED") && param.args != null && param.args.length > 0) {
Object arg0 = param.args[0]; Object arg0 = param.args[0];
if ("ACTIVATED".equals(arg0)) { if ("ACTIVATED".equals(arg0)) {
if (mediaPlayer != null && mediaPlayer.isPlaying()) { if (mediaPlayer != null) {
mediaPlayer.stop(); if (mediaPlayer.isPlaying()) {
mediaPlayer.release(); // MediaPlayerを解放 mediaPlayer.stop();
mediaPlayer = null; // MediaPlayerのインスタンスをnullに設定 }
mediaPlayer.release();
mediaPlayer = null;
} }
} }
} }