2626import androidx .annotation .NonNull ;
2727import androidx .preference .Preference ;
2828
29+ import com .sevtinge .hyperceiler .common .utils .PermissionUtils ;
2930import com .sevtinge .hyperceiler .common .utils .shell .ShellExec ;
3031import com .sevtinge .hyperceiler .common .utils .shell .ShellInit ;
3132import com .sevtinge .hyperceiler .core .R ;
4445import fan .appcompat .app .AlertDialog ;
4546
4647public class DevelopmentKillFragment extends SettingsPreferenceFragment implements Preference .OnPreferenceClickListener {
48+ private static final int REQUEST_GET_INSTALLED_APPS = 1203 ;
49+
4750 private List <AppData > appData = new ArrayList <>();
4851 private boolean init = false ;
4952 Handler handler ;
@@ -67,10 +70,12 @@ public void initPrefs() {
6770 mCheck = findPreference ("prefs_key_development_kill_find_process" );
6871 mKillPackage = findPreference ("prefs_key_development_kill_package" );
6972 mName = findPreference ("prefs_key_development_kill_app_name" );
70- ToastHelper .makeText (ContextUtils .getContext (ContextUtils .FLAG_CURRENT_APP ), "加载数据,请稍后" );
7173 ExecutorService executorService = ThreadPoolManager .getInstance ();
7274 handler = new Handler (requireContext ().getMainLooper ());
73- initApp (executorService );
75+ if (ensureInstalledAppsPermission ()) {
76+ ToastHelper .makeText (ContextUtils .getContext (ContextUtils .FLAG_CURRENT_APP ), getString (R .string .development_kill_loading_data ));
77+ initApp (executorService );
78+ }
7479 mCheck .setOnPreferenceClickListener (this );
7580 mName .setOnPreferenceClickListener (this );
7681 mKillPackage .setOnPreferenceClickListener (this );
@@ -80,7 +85,7 @@ public void initPrefs() {
8085 @ Override
8186 public boolean onPreferenceClick (@ NonNull Preference preference ) {
8287 if (!init ) {
83- showOutDialog ("资源尚未加载完毕,请稍后!" );
88+ showOutDialog (getString ( R . string . development_kill_resource_not_ready ) );
8489 return true ;
8590 }
8691 switch (preference .getKey ()) {
@@ -94,11 +99,11 @@ public void onInputReceived(String userInput) {
9499 }
95100 }
96101 if (!(pkg == null || pkg .isEmpty ())) {
97- showOutDialog (listToString ("PID: Process: \n " ,
102+ showOutDialog (listToString (getString ( R . string . development_kill_process_header ) ,
98103 pidAndPkg (pkg )));
99104 return ;
100105 }
101- showOutDialog ("包名错误或不存在,无法查找! \n " + " \" " + userInput + " \" " );
106+ showOutDialog (getString ( R . string . development_kill_package_invalid_for_find , userInput ) );
102107 }
103108 });
104109 case "prefs_key_development_kill_package" -> showInDialog (new EditDialogCallback () {
@@ -112,18 +117,18 @@ public void onInputReceived(String userInput) {
112117 }
113118 }
114119 if (pkg .isEmpty ()) {
115- showOutDialog ("包名错误或不存在,请查证后输入! \n " + " \" " + userInput + " \" " );
120+ showOutDialog (getString ( R . string . development_kill_package_invalid , userInput ) );
116121 return ;
117122 }
118123 if (!pidAndPkg (pkg ).isEmpty ()) {
119- String result = listToString ("成功 Kill: \n " , pidAndPkg (pkg ));
124+ String result = listToString (getString ( R . string . development_kill_success_prefix ) , pidAndPkg (pkg ));
120125 if (killPackage (pkg )) {
121126 showOutDialog (result );
122127 } else {
123- showOutDialog ("Kill: " + pkg + " 失败!" );
128+ showOutDialog (getString ( R . string . development_kill_failed_with_pkg , pkg ) );
124129 }
125130 } else {
126- showOutDialog ("未找到当前包名有任何正在运行的进程! \n " + " \" " + userInput + " \" " );
131+ showOutDialog (getString ( R . string . development_kill_process_not_found , userInput ) );
127132 }
128133 }
129134 }
@@ -140,17 +145,17 @@ public void onInputReceived(String userInput) {
140145 }
141146 if (!(pkg == null || pkg .isEmpty ())) {
142147 if (!pidAndPkg (pkg ).isEmpty ()) {
143- String result = listToString ("成功 Kill: \n " , pidAndPkg (pkg ));
148+ String result = listToString (getString ( R . string . development_kill_success_prefix ) , pidAndPkg (pkg ));
144149 if (killPackage (pkg )) {
145150 showOutDialog (result );
146151 } else {
147- showOutDialog ("Kill: " + pkg + " 失败!" );
152+ showOutDialog (getString ( R . string . development_kill_failed_with_pkg , pkg ) );
148153 }
149154 } else {
150- showOutDialog ("未找到当前包名有任何正在运行的进程! \n " + " \" " + userInput + " \" " );
155+ showOutDialog (getString ( R . string . development_kill_process_not_found , userInput ) );
151156 }
152157 } else
153- showOutDialog ("包名错误或不存在,请查证后输入! \n " + " \" " + userInput + " \" " );
158+ showOutDialog (getString ( R . string . development_kill_package_invalid , userInput ) );
154159 }
155160 }
156161 });
@@ -196,26 +201,11 @@ public void run() {
196201 @ Override
197202 public void run () {
198203 init = true ;
199- ToastHelper .makeText (ContextUtils .getContext (ContextUtils .FLAG_CURRENT_APP ), "加载完毕" );
204+ ToastHelper .makeText (ContextUtils .getContext (ContextUtils .FLAG_CURRENT_APP ), getString ( R . string . development_kill_loading_done ) );
200205 }
201206 });
202207 }
203208 });
204- /*AsyncTask 已经弃用
205- new AsyncTask<Void, Void, List<AppData>>() {
206- @Override
207- protected List<AppData> doInBackground(Void... voids) {
208- // 在后台线程中执行耗时任务
209- return PackageManagerUtils.getPackageByFlag(0);
210- }
211-
212- @Override
213- protected void onPostExecute(List<AppData> result) {
214- ToastHelper.makeText(ContextUtils.getContext(ContextUtils.FLAG_CURRENT_APP), "加载完毕");
215- // 在UI线程更新UI
216- appData = result;
217- }
218- }.execute();*/
219209 }
220210
221211 private void showInDialog (EditDialogCallback callback ) {
@@ -247,4 +237,32 @@ private void showOutDialog(String show) {
247237 .setPositiveButton (android .R .string .ok , null )
248238 .show ();
249239 }
240+
241+ private boolean ensureInstalledAppsPermission () {
242+ if (PermissionUtils .canReadInstalledApps (requireContext ())) {
243+ return true ;
244+ }
245+ requestPermissions (
246+ new String []{PermissionUtils .PERMISSION_GET_INSTALLED_APPS },
247+ REQUEST_GET_INSTALLED_APPS
248+ );
249+ return false ;
250+ }
251+
252+ @ Override
253+ public void onRequestPermissionsResult (int requestCode , @ NonNull String [] permissions , @ NonNull int [] grantResults ) {
254+ super .onRequestPermissionsResult (requestCode , permissions , grantResults );
255+ if (requestCode != REQUEST_GET_INSTALLED_APPS ) {
256+ return ;
257+ }
258+
259+ if (PermissionUtils .canReadInstalledApps (requireContext ())
260+ || PermissionUtils .isInstalledAppsPermissionGranted (permissions , grantResults )) {
261+ ToastHelper .makeText (ContextUtils .getContext (ContextUtils .FLAG_CURRENT_APP ), getString (R .string .development_kill_loading_data ));
262+ initApp (ThreadPoolManager .getInstance ());
263+ return ;
264+ }
265+
266+ showOutDialog (getString (R .string .development_kill_permission_not_granted ));
267+ }
250268}
0 commit comments