55import android .os .Environment ;
66import android .view .Menu ;
77import android .view .MenuItem ;
8+ import android .widget .Button ;
89import android .widget .TextView ;
910
1011import androidx .appcompat .app .AppCompatActivity ;
1112
13+ import com .termux .api .util .ViewUtils ;
1214import com .termux .shared .activities .ReportActivity ;
1315import com .termux .shared .activity .ActivityUtils ;
1416import com .termux .shared .activity .media .AppCompatActivityUtils ;
1517import com .termux .shared .android .AndroidUtils ;
18+ import com .termux .shared .android .PermissionUtils ;
19+ import com .termux .shared .data .IntentUtils ;
1620import com .termux .shared .file .FileUtils ;
1721import com .termux .shared .logger .Logger ;
1822import com .termux .shared .models .ReportInfo ;
2428
2529public class TermuxAPIActivity extends AppCompatActivity {
2630
31+ private TextView mBatteryOptimizationNotDisabledWarning ;
32+ private TextView mDisplayOverOtherAppsPermissionNotGrantedWarning ;
33+
34+ private Button mDisableBatteryOptimization ;
35+ private Button mGrantDisplayOverOtherAppsPermission ;
36+
2737 private static final String LOG_TAG = "TermuxAPIActivity" ;
2838
2939 @ Override
@@ -44,8 +54,23 @@ protected void onCreate(Bundle savedInstanceState) {
4454 pluginInfo .setText (getString (R .string .plugin_info , TermuxConstants .TERMUX_GITHUB_REPO_URL ,
4555 TermuxConstants .TERMUX_API_GITHUB_REPO_URL , TermuxConstants .TERMUX_API_APT_PACKAGE_NAME ,
4656 TermuxConstants .TERMUX_API_APT_GITHUB_REPO_URL ));
57+
58+ mBatteryOptimizationNotDisabledWarning = findViewById (R .id .textview_battery_optimization_not_disabled_warning );
59+ mDisableBatteryOptimization = findViewById (R .id .btn_disable_battery_optimizations );
60+ mDisableBatteryOptimization .setOnClickListener (v -> requestDisableBatteryOptimizations ());
61+
62+ mDisplayOverOtherAppsPermissionNotGrantedWarning = findViewById (R .id .textview_display_over_other_apps_not_granted_warning );
63+ mGrantDisplayOverOtherAppsPermission = findViewById (R .id .btn_grant_display_over_other_apps_permission );
64+ mGrantDisplayOverOtherAppsPermission .setOnClickListener (v -> requestDisplayOverOtherAppsPermission ());
4765 }
4866
67+ @ Override
68+ protected void onResume () {
69+ super .onResume ();
70+
71+ checkIfBatteryOptimizationNotDisabled ();
72+ checkIfDisplayOverOtherAppsPermissionNotGranted ();
73+ }
4974
5075 @ Override
5176 public boolean onCreateOptionsMenu (Menu menu ) {
@@ -92,6 +117,73 @@ public void run() {
92117 }.start ();
93118 }
94119
120+
121+
122+ private void checkIfBatteryOptimizationNotDisabled () {
123+ if (mBatteryOptimizationNotDisabledWarning == null ) return ;
124+
125+ // If battery optimizations not disabled
126+ if (!PermissionUtils .checkIfBatteryOptimizationsDisabled (this )) {
127+ ViewUtils .setWarningTextViewAndButtonState (this , mBatteryOptimizationNotDisabledWarning ,
128+ mDisableBatteryOptimization , true , getString (R .string .action_disable_battery_optimizations ));
129+ } else {
130+ ViewUtils .setWarningTextViewAndButtonState (this , mBatteryOptimizationNotDisabledWarning ,
131+ mDisableBatteryOptimization , false , getString (R .string .action_already_disabled ));
132+ }
133+ }
134+
135+ private void requestDisableBatteryOptimizations () {
136+ Logger .logDebug (LOG_TAG , "Requesting to disable battery optimizations" );
137+ PermissionUtils .requestDisableBatteryOptimizations (this , PermissionUtils .REQUEST_DISABLE_BATTERY_OPTIMIZATIONS );
138+ }
139+
140+
141+
142+ private void checkIfDisplayOverOtherAppsPermissionNotGranted () {
143+ if (mDisplayOverOtherAppsPermissionNotGrantedWarning == null ) return ;
144+
145+ // If display over other apps permission not granted
146+ if (!PermissionUtils .checkDisplayOverOtherAppsPermission (this )) {
147+ ViewUtils .setWarningTextViewAndButtonState (this , mDisplayOverOtherAppsPermissionNotGrantedWarning ,
148+ mGrantDisplayOverOtherAppsPermission , true , getString (R .string .action_grant_display_over_other_apps_permission ));
149+ } else {
150+ ViewUtils .setWarningTextViewAndButtonState (this , mDisplayOverOtherAppsPermissionNotGrantedWarning ,
151+ mGrantDisplayOverOtherAppsPermission , false , getString (R .string .action_already_granted ));
152+ }
153+ }
154+
155+ private void requestDisplayOverOtherAppsPermission () {
156+ Logger .logDebug (LOG_TAG , "Requesting to grant display over other apps permission" );
157+ PermissionUtils .requestDisplayOverOtherAppsPermission (this , PermissionUtils .REQUEST_GRANT_DISPLAY_OVER_OTHER_APPS_PERMISSION );
158+ }
159+
160+
161+
162+ @ Override
163+ protected void onActivityResult (int requestCode , int resultCode , Intent data ) {
164+ super .onActivityResult (requestCode , resultCode , data );
165+ Logger .logVerbose (LOG_TAG , "onActivityResult: requestCode: " + requestCode + ", resultCode: " + resultCode + ", data: " + IntentUtils .getIntentString (data ));
166+
167+ switch (requestCode ) {
168+ case PermissionUtils .REQUEST_DISABLE_BATTERY_OPTIMIZATIONS :
169+ if (PermissionUtils .checkIfBatteryOptimizationsDisabled (this ))
170+ Logger .logDebug (LOG_TAG , "Battery optimizations disabled by user on request." );
171+ else
172+ Logger .logDebug (LOG_TAG , "Battery optimizations not disabled by user on request." );
173+ break ;
174+ case PermissionUtils .REQUEST_GRANT_DISPLAY_OVER_OTHER_APPS_PERMISSION :
175+ if (PermissionUtils .checkDisplayOverOtherAppsPermission (this ))
176+ Logger .logDebug (LOG_TAG , "Display over other apps granted by user on request." );
177+ else
178+ Logger .logDebug (LOG_TAG , "Display over other apps denied by user on request." );
179+ break ;
180+ default :
181+ Logger .logError (LOG_TAG , "Unknown request code \" " + requestCode + "\" passed to onRequestPermissionsResult" );
182+ }
183+ }
184+
185+
186+
95187 private void openSettings () {
96188 ActivityUtils .startActivity (this , new Intent ().setClassName (TermuxConstants .TERMUX_PACKAGE_NAME , TermuxConstants .TERMUX_APP .TERMUX_SETTINGS_ACTIVITY_NAME ));
97189 }
0 commit comments