Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
fbdd7227
Commit
fbdd7227
authored
Apr 10, 2019
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Restructure SuRequestActivity
parent
01656025
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
132 additions
and
98 deletions
+132
-98
SuRequestActivity.java
...src/main/java/com/topjohnwu/magisk/SuRequestActivity.java
+132
-98
No files found.
app/src/main/java/com/topjohnwu/magisk/SuRequestActivity.java
View file @
fbdd7227
package
com
.
topjohnwu
.
magisk
;
import
android.annotation.SuppressLint
;
import
android.content.Intent
;
import
android.content.SharedPreferences
;
import
android.content.pm.PackageManager
;
...
...
@@ -25,8 +26,11 @@ import com.topjohnwu.magisk.utils.FingerprintHelper;
import
com.topjohnwu.magisk.utils.SuConnector
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
import
butterknife.BindView
;
import
java9.lang.Iterables
;
public
class
SuRequestActivity
extends
BaseActivity
{
@BindView
(
R
.
id
.
su_popup
)
LinearLayout
suPopup
;
...
...
@@ -39,10 +43,8 @@ public class SuRequestActivity extends BaseActivity {
@BindView
(
R
.
id
.
fingerprint
)
ImageView
fingerprintImg
;
@BindView
(
R
.
id
.
warning
)
TextView
warning
;
private
SuConnector
connecto
r
;
private
ActionHandler
handle
r
;
private
Policy
policy
;
private
CountDownTimer
timer
;
private
FingerprintHelper
fingerprintHelper
;
private
SharedPreferences
timeoutPrefs
;
@Override
...
...
@@ -50,22 +52,9 @@ public class SuRequestActivity extends BaseActivity {
return
R
.
style
.
SuRequest_Dark
;
}
@Override
public
void
finish
()
{
if
(
timer
!=
null
)
timer
.
cancel
();
if
(
fingerprintHelper
!=
null
)
fingerprintHelper
.
cancel
();
super
.
finish
();
}
@Override
public
void
onBackPressed
()
{
if
(
policy
!=
null
)
{
handleAction
(
Policy
.
DENY
);
}
else
{
finish
();
}
handler
.
handleAction
(
Policy
.
DENY
,
-
1
);
}
@Override
...
...
@@ -74,28 +63,58 @@ public class SuRequestActivity extends BaseActivity {
lockOrientation
();
supportRequestWindowFeature
(
Window
.
FEATURE_NO_TITLE
);
PackageManager
pm
=
getPackageManager
();
app
.
mDB
.
clearOutdated
();
timeoutPrefs
=
App
.
deContext
.
getSharedPreferences
(
"su_timeout"
,
0
);
// Get policy
Intent
intent
=
getIntent
();
try
{
String
socketName
=
intent
.
getStringExtra
(
"socket"
);
connector
=
new
SuConnector
(
socketName
)
{
String
socketName
=
intent
.
getStringExtra
(
"socket"
);
if
(
socketName
!=
null
)
{
SuConnector
connector
;
try
{
connector
=
new
SuConnector
(
socketName
)
{
@Override
protected
void
onResponse
()
throws
IOException
{
out
.
writeInt
(
policy
.
policy
);
}
};
Bundle
bundle
=
connector
.
readSocketInput
();
int
uid
=
Integer
.
parseInt
(
bundle
.
getString
(
"uid"
));
policy
=
app
.
mDB
.
getPolicy
(
uid
);
if
(
policy
==
null
)
{
policy
=
new
Policy
(
uid
,
getPackageManager
());
}
}
catch
(
IOException
|
PackageManager
.
NameNotFoundException
e
)
{
e
.
printStackTrace
();
finish
();
return
;
}
handler
=
new
ActionHandler
()
{
@Override
void
handleAction
()
{
connector
.
response
();
done
();
}
@Override
void
handleAction
(
int
action
)
{
int
pos
=
timeout
.
getSelectedItemPosition
();
timeoutPrefs
.
edit
().
putInt
(
policy
.
packageName
,
pos
).
apply
();
handleAction
(
action
,
Config
.
Value
.
TIMEOUT_LIST
[
pos
]);
}
@Override
protected
void
onResponse
()
throws
IOException
{
out
.
writeInt
(
policy
.
policy
);
void
handleAction
(
int
action
,
int
time
)
{
policy
.
policy
=
action
;
if
(
time
>=
0
)
{
policy
.
until
=
(
time
==
0
)
?
0
:
(
System
.
currentTimeMillis
()
/
1000
+
time
*
60
);
app
.
mDB
.
updatePolicy
(
policy
);
}
handleAction
();
}
};
Bundle
bundle
=
connector
.
readSocketInput
();
int
uid
=
Integer
.
parseInt
(
bundle
.
getString
(
"uid"
));
policy
=
app
.
mDB
.
getPolicy
(
uid
);
if
(
policy
==
null
)
{
policy
=
new
Policy
(
uid
,
pm
);
}
}
catch
(
IOException
|
PackageManager
.
NameNotFoundException
e
)
{
e
.
printStackTrace
();
}
else
{
finish
();
return
;
}
...
...
@@ -106,27 +125,30 @@ public class SuRequestActivity extends BaseActivity {
return
;
}
// If not interactive, response directly
if
(
policy
.
policy
!=
Policy
.
INTERACTIVE
)
{
handler
.
handleAction
();
return
;
}
switch
((
int
)
Config
.
get
(
Config
.
Key
.
SU_AUTO_RESPONSE
))
{
case
Config
.
Value
.
SU_AUTO_DENY
:
handleAction
(
Policy
.
DENY
,
0
);
handle
r
.
handle
Action
(
Policy
.
DENY
,
0
);
return
;
case
Config
.
Value
.
SU_AUTO_ALLOW
:
handleAction
(
Policy
.
ALLOW
,
0
);
handle
r
.
handle
Action
(
Policy
.
ALLOW
,
0
);
return
;
case
Config
.
Value
.
SU_PROMPT
:
default
:
}
// If not interactive, response directly
if
(
policy
.
policy
!=
Policy
.
INTERACTIVE
)
{
handleAction
();
return
;
}
showUI
();
}
@SuppressLint
(
"ClickableViewAccessibility"
)
private
void
showUI
()
{
setContentView
(
R
.
layout
.
activity_request
);
new
SuRequestActivity_ViewBinding
(
this
);
appIcon
.
setImageDrawable
(
policy
.
info
.
loadIcon
(
pm
));
appIcon
.
setImageDrawable
(
policy
.
info
.
loadIcon
(
getPackageManager
()
));
appNameView
.
setText
(
policy
.
appName
);
packageNameView
.
setText
(
policy
.
packageName
);
warning
.
setCompoundDrawablesRelativeWithIntrinsicBounds
(
...
...
@@ -138,53 +160,39 @@ public class SuRequestActivity extends BaseActivity {
timeout
.
setAdapter
(
adapter
);
timeout
.
setSelection
(
timeoutPrefs
.
getInt
(
policy
.
packageName
,
0
));
timer
=
new
CountDownTimer
((
int
)
Config
.
get
(
Config
.
Key
.
SU_REQUEST_TIMEOUT
)
*
1000
,
1000
)
{
CountDownTimer
timer
=
new
CountDownTimer
(
(
int
)
Config
.
get
(
Config
.
Key
.
SU_REQUEST_TIMEOUT
)
*
1000
,
1000
)
{
@Override
public
void
onTick
(
long
millisUntilFinished
)
{
deny_btn
.
setText
(
getString
(
R
.
string
.
deny
_with_str
,
"("
+
millisUntilFinished
/
1000
+
")"
)
);
public
void
onTick
(
long
remains
)
{
deny_btn
.
setText
(
getString
(
R
.
string
.
deny
)
+
"("
+
remains
/
1000
+
")"
);
}
@Override
public
void
onFinish
()
{
deny_btn
.
setText
(
getString
(
R
.
string
.
deny
_with_str
,
"(0)"
));
handleAction
(
Policy
.
DENY
);
deny_btn
.
setText
(
getString
(
R
.
string
.
deny
));
handle
r
.
handle
Action
(
Policy
.
DENY
);
}
};
timer
.
start
();
Runnable
cancelTimer
=
()
->
{
timer
.
cancel
();
deny_btn
.
setText
(
getString
(
R
.
string
.
deny
));
};
handler
.
addCancel
(
cancelTimer
);
boolean
useFP
=
FingerprintHelper
.
useFingerprint
();
if
(
useFP
)
{
try
{
fingerprintHelper
=
new
FingerprintHelper
()
{
@Override
public
void
onAuthenticationError
(
int
errorCode
,
CharSequence
errString
)
{
warning
.
setText
(
errString
);
}
@Override
public
void
onAuthenticationHelp
(
int
helpCode
,
CharSequence
helpString
)
{
warning
.
setText
(
helpString
);
}
@Override
public
void
onAuthenticationSucceeded
(
FingerprintManager
.
AuthenticationResult
result
)
{
handleAction
(
Policy
.
ALLOW
);
}
@Override
public
void
onAuthenticationFailed
()
{
warning
.
setText
(
R
.
string
.
auth_fail
);
}
};
fingerprintHelper
.
authenticate
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
useFP
=
false
;
}
if
(
useFP
)
try
{
FingerprintHelper
helper
=
new
SuFingerprint
();
helper
.
authenticate
();
handler
.
addCancel
(
helper:
:
cancel
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
useFP
=
false
;
}
if
(!
useFP
)
{
grant_btn
.
setOnClickListener
(
v
->
{
handleAction
(
Policy
.
ALLOW
);
handle
r
.
handle
Action
(
Policy
.
ALLOW
);
timer
.
cancel
();
});
grant_btn
.
requestFocus
();
...
...
@@ -194,37 +202,63 @@ public class SuRequestActivity extends BaseActivity {
fingerprintImg
.
setVisibility
(
useFP
?
View
.
VISIBLE
:
View
.
GONE
);
deny_btn
.
setOnClickListener
(
v
->
{
handleAction
(
Policy
.
DENY
);
handle
r
.
handle
Action
(
Policy
.
DENY
);
timer
.
cancel
();
});
suPopup
.
setOnClickListener
(
v
->
cancelTimeout
());
timeout
.
setOnTouchListener
((
v
,
event
)
->
cancelTimeout
());
timer
.
start
();
suPopup
.
setOnClickListener
(
v
->
cancelTimer
.
run
());
timeout
.
setOnTouchListener
((
v
,
event
)
->
{
cancelTimer
.
run
();
return
false
;
});
}
private
boolean
cancelTimeout
()
{
timer
.
cancel
();
deny_btn
.
setText
(
getString
(
R
.
string
.
deny
));
return
false
;
}
private
class
SuFingerprint
extends
FingerprintHelper
{
private
void
handleAction
()
{
connector
.
response
();
finish
();
}
SuFingerprint
()
throws
Exception
{}
@Override
public
void
onAuthenticationError
(
int
errorCode
,
CharSequence
errString
)
{
warning
.
setText
(
errString
);
}
@Override
public
void
onAuthenticationHelp
(
int
helpCode
,
CharSequence
helpString
)
{
warning
.
setText
(
helpString
);
}
private
void
handleAction
(
int
action
)
{
int
pos
=
timeout
.
getSelectedItemPosition
();
timeoutPrefs
.
edit
().
putInt
(
policy
.
packageName
,
pos
).
apply
();
handleAction
(
action
,
Config
.
Value
.
TIMEOUT_LIST
[
pos
]);
@Override
public
void
onAuthenticationSucceeded
(
FingerprintManager
.
AuthenticationResult
result
)
{
handler
.
handleAction
(
Policy
.
ALLOW
);
}
@Override
public
void
onAuthenticationFailed
()
{
warning
.
setText
(
R
.
string
.
auth_fail
);
}
}
private
void
handleAction
(
int
action
,
int
time
)
{
policy
.
policy
=
action
;
if
(
time
>=
0
)
{
policy
.
until
=
(
time
==
0
)
?
0
:
(
System
.
currentTimeMillis
()
/
1000
+
time
*
60
);
app
.
mDB
.
updatePolicy
(
policy
);
private
class
ActionHandler
{
private
List
<
Runnable
>
cancelTasks
=
new
ArrayList
<>();
void
handleAction
()
{
done
();
}
void
handleAction
(
int
action
)
{
done
();
}
void
handleAction
(
int
action
,
int
time
)
{
done
();
}
void
addCancel
(
Runnable
r
)
{
cancelTasks
.
add
(
r
);
}
void
done
()
{
Iterables
.
forEach
(
cancelTasks
,
Runnable:
:
run
);
finish
();
}
handleAction
();
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment