1
1
package com .frankenstein .screenx ;
2
2
3
3
import android .Manifest ;
4
- import android .content .pm .PackageManager ;
5
4
import android .net .Uri ;
6
5
import android .os .Bundle ;
7
6
import android .os .Handler ;
7
+ import android .os .Looper ;
8
8
import android .provider .Settings ;
9
9
import android .view .View ;
10
10
import android .widget .AdapterView ;
11
11
import android .widget .GridView ;
12
12
13
+ import androidx .annotation .NonNull ;
13
14
import androidx .appcompat .app .AppCompatActivity ;
15
+ import androidx .core .app .ActivityCompat ;
14
16
import androidx .core .content .ContextCompat ;
15
17
import androidx .swiperefreshlayout .widget .SwipeRefreshLayout ;
16
18
@@ -44,7 +46,9 @@ public class MainActivity extends AppCompatActivity {
44
46
private SwipeRefreshLayout _pullToRefresh ;
45
47
private View _mProgressBar ;
46
48
private View _mPermissionsDisplay ;
47
- private View _mPermissionsText ;
49
+ private View _mStoragePermissionsView ;
50
+ private View _mUsagePermissionsView ;
51
+ private View _mOverlayPermissionsView ;
48
52
49
53
private boolean _mPermissionsDenied = false ;
50
54
private Handler _mHandler ;
@@ -62,28 +66,50 @@ protected void onCreate(Bundle savedInstanceState) {
62
66
utils .setContext (getApplicationContext ());
63
67
_logger = Logger .getInstance ("FILES" );
64
68
_logger .log ("----------MainActivity: ONCREATE---------" );
65
- _mHandler = new Handler ();
69
+ _mHandler = new Handler (Looper . myLooper () );
66
70
_pullToRefresh = findViewById (R .id .pull_to_refresh );
67
71
_pullToRefresh .setOnRefreshListener (() -> refresh ());
68
72
_mGridView = findViewById (R .id .grid_view );
69
73
_sf = ScreenFactory .getInstance ();
70
74
71
75
_mProgressBar = findViewById (R .id .progress_bar );
76
+
72
77
_mPermissionsDisplay = findViewById (R .id .permissions_display );
73
78
_mPermissionsDisplay .setVisibility (View .GONE );
74
- _mPermissionsText = findViewById (R .id .permissions_text );
75
- _mPermissionsText .setOnClickListener (view -> goToAppSettings ());
76
79
77
- requestStoragePermission ();
80
+ _mStoragePermissionsView = findViewById (R .id .storage_permissions );
81
+ _mStoragePermissionsView .setOnClickListener (view -> goToStorageSettings ());
82
+
83
+ _mUsagePermissionsView = findViewById (R .id .usage_permissions );
84
+ _mUsagePermissionsView .setOnClickListener (view -> goToUsageSettings ());
85
+
86
+ _mOverlayPermissionsView = findViewById (R .id .overlay_permissions );
87
+ _mOverlayPermissionsView .setOnClickListener (view -> goToOverlaySettings ());
88
+
89
+ checkPermissions ();
78
90
}
79
91
80
- private void goToAppSettings () {
92
+ private void goToStorageSettings () {
81
93
Intent intent = new Intent (Settings .ACTION_APPLICATION_DETAILS_SETTINGS );
82
94
Uri uri = Uri .fromParts ("package" , getPackageName (), null );
83
95
intent .setData (uri );
84
96
startActivity (intent );
85
97
}
86
98
99
+ private void goToUsageSettings () {
100
+ Intent intent = new Intent (Settings .ACTION_USAGE_ACCESS_SETTINGS );
101
+ Uri uri = Uri .fromParts ("package" , getPackageName (), null );
102
+ intent .setData (uri );
103
+ startActivity (intent );
104
+ }
105
+
106
+ private void goToOverlaySettings () {
107
+ Intent intent = new Intent (Settings .ACTION_MANAGE_OVERLAY_PERMISSION );
108
+ Uri uri = Uri .fromParts ("package" , getPackageName (), null );
109
+ intent .setData (uri );
110
+ startActivity (intent );
111
+ }
112
+
87
113
private void showProgressBar () {
88
114
_mGridView .setAlpha (0 );
89
115
_mGridView .setVisibility (View .VISIBLE );
@@ -109,9 +135,10 @@ private void hideProgressBar() {
109
135
_mGridView .animate ().alpha (1 ).setDuration (PROGRESSBAR_TRANSITION );
110
136
_mHandler .postDelayed (() -> _mProgressBar .setVisibility (View .GONE ), 1500 );
111
137
attachAdapter ();
138
+
112
139
}
113
140
114
- private void showPermissionDeniedError () {
141
+ private void showPermissionRequestScreen () {
115
142
_mPermissionsDenied = true ;
116
143
_mPermissionsDisplay .setVisibility (View .VISIBLE );
117
144
_mProgressBar .setVisibility (View .GONE );
@@ -187,27 +214,40 @@ public void onPermissionGranted(PermissionGrantedResponse response) {
187
214
@ Override
188
215
public void onPermissionDenied (PermissionDeniedResponse response ) {
189
216
_logger .log ("Permission Denied" );
190
- showPermissionDeniedError ();
217
+ showPermissionRequestScreen ();
191
218
}
192
219
193
220
@ Override
194
221
public void onPermissionRationaleShouldBeShown (PermissionRequest permission , PermissionToken token ) {
195
222
_logger .log ("Permission Rational Should be shown" );
196
- showPermissionDeniedError ();
223
+ showPermissionRequestScreen ();
197
224
token .continuePermissionRequest ();
198
225
}
199
226
})
200
227
.onSameThread ()
201
228
.check ();
202
229
}
203
230
231
+ public void checkPermissions () {
232
+ boolean storagePermissions = PermissionHelper .hasStoragePermission (this );
233
+ boolean usagePermissions = PermissionHelper .hasUsagePermission (this );
234
+ boolean overlayPermissions = PermissionHelper .hasOverlayPermission (this );
235
+
236
+ if (storagePermissions && usagePermissions && overlayPermissions ) {
237
+ _logger .log (" Have both permissions" );
238
+ permissionsGranted ();
239
+ return ;
240
+ }
241
+
242
+ _logger .log ("the permissions for storage is " , storagePermissions , " usage is" , usagePermissions , "overlay is" , overlayPermissions );
243
+ showPermissionRequestScreen ();
244
+ }
245
+
204
246
@ Override
205
247
public void onWindowFocusChanged (boolean hasFocus ) {
206
248
super .onWindowFocusChanged (hasFocus );
207
- if (hasFocus && _mPermissionsDenied &&
208
- ContextCompat .checkSelfPermission (this , Manifest .permission .READ_EXTERNAL_STORAGE )
209
- == PackageManager .PERMISSION_GRANTED ) {
210
- permissionsGranted ();
249
+ if (hasFocus && _mPermissionsDenied ) {
250
+ checkPermissions ();
211
251
}
212
252
}
213
253
0 commit comments