@@ -9,6 +9,12 @@ import * as excludeModule from './page/exclude.js';
99export const modDir = '/data/adb/modules/KPatch-Next' ;
1010export const persistDir = '/data/adb/kp-next' ;
1111
12+ const rehookMode = [
13+ "disable" , // 0
14+ "target" , // 1
15+ "minimal" // 2
16+ ]
17+
1218export let superkey = localStorage . getItem ( 'kp-next_superkey' ) || '' ;
1319export let MAX_CHUNK_SIZE = 96 * 1024 ;
1420
@@ -90,6 +96,36 @@ async function reboot(reason = "") {
9096 exec ( `/system/bin/svc power reboot ${ reason } || /system/bin/reboot ${ reason } ` ) ;
9197}
9298
99+ async function updateRehookStatus ( ) {
100+ const rehook = document . getElementById ( 'rehook' ) ;
101+ const rehookText = rehook . querySelector ( '.menu-text' ) ;
102+ const rehookRipple = rehook . querySelector ( 'md-ripple' ) ;
103+
104+ let modeName = 'target' , modeId = null ;
105+
106+ const result = await exec ( `kpatch ${ escapeShell ( superkey ) } rehook_status` , { env : { PATH : `${ modDir } /bin` } } ) ;
107+ const mode = result . stdout . split ( '\n' ) . find ( line => line . includes ( 'mode: ' ) ) ;
108+ if ( mode ) {
109+ modeId = parseInt ( mode . split ( ':' ) [ 1 ] . trim ( ) ) ;
110+ modeName = rehookMode [ modeId ] ;
111+ }
112+ rehookText . textContent = getString ( 'label_rehook_mode_' + modeName ) ;
113+ rehookText . classList . toggle ( 'disabled' , ! mode ) ;
114+ rehookRipple . disabled = ! mode ;
115+
116+ return modeId !== null ;
117+ }
118+
119+ function setRehookMode ( mode ) {
120+ exec ( `kpatch ${ escapeShell ( superkey ) } rehook ${ mode } ` , { env : { PATH : `${ modDir } /bin` } } ) . then ( ( result ) => {
121+ if ( result . errno !== 0 ) {
122+ toast ( getString ( 'msg_error' , result . stderr ) ) ;
123+ return ;
124+ }
125+ updateRehookStatus ( ) ;
126+ } )
127+ }
128+
93129function getMaxChunkSize ( ) {
94130 exec ( 'getconf ARG_MAX' ) . then ( ( result ) => {
95131 try {
@@ -201,6 +237,18 @@ document.addEventListener('DOMContentLoaded', async () => {
201237 await loadTranslations ( ) ;
202238 await Promise . all ( [ updateStatus ( ) , initInfo ( ) ] ) ;
203239
240+ // rehook
241+ const rehook = document . getElementById ( 'rehook' ) ;
242+ const rehookMenu = rehook . querySelector ( 'md-menu' ) ;
243+ const mode = await updateRehookStatus ( ) ;
244+ if ( mode ) rehook . onclick = ( ) => rehookMenu . open = ! rehookMenu . open ;
245+ rehookMenu . querySelectorAll ( 'md-menu-item' ) . forEach ( ( item , index ) => {
246+ item . onclick = ( ) => {
247+ setRehookMode ( index ) ;
248+ rehook . click ( ) ;
249+ }
250+ } ) ;
251+
204252 excludeModule . initExcludePage ( ) ;
205253 kpmModule . initKPMPage ( ) ;
206254
0 commit comments