Check Permissions, Fistsplash - mayurparmar2/AlarmDemo GitHub Wiki
Post.java
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
// Uri wa_status_uri = Config.getContentUriFromPath(getApplicationContext(), directory);
Uri wa_status_uri = Uri.parse("content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fmedia/document/primary%3AAndroid%2Fmedia%2Fcom.whatsapp%2FWhatsApp%2FMedia%2F.Statuses");
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, wa_status_uri);
startActivityForResult(intent, 10001);
Post.java
/* Android - 33 */
public static final int PERMISSION_TOKEN = 10;
public static final String[] ALL_PERMISSIONS_LIST= getRequiredPermissions().toArray(new String[0]);
public static List<String> getRequiredPermissions() {
List<String> permissions = new ArrayList<>();
permissions.add(Manifest.permission.CAMERA);
if (Build.VERSION.SDK_INT >= 33) {
permissions.add("android.permission.READ_MEDIA_VIDEO");
permissions.add("android.permission.READ_MEDIA_IMAGES");
permissions.add("android.permission.POST_NOTIFICATIONS");
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
permissions.add("android.permission.WRITE_EXTERNAL_STORAGE");
permissions.add("android.permission.READ_EXTERNAL_STORAGE");
}
return permissions;
}
public static boolean hasPermissions(Context context, String... permissions) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission)
!= PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
if (!hasPermissions(this, ALL_PERMISSIONS_LIST)) {
ActivityCompat.requestPermissions(this, ALL_PERMISSIONS_LIST, PERMISSION_TOKEN);
} else {
new Handler(Looper.getMainLooper()).postDelayed(this::startUi, 1000);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_TOKEN) {
boolean allGranted = true;
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
allGranted = false;
break;
}
}
if (allGranted) {
startUi();
} else if (shouldShowRequestPermissionRationale(activity, androidPermissionFromAisPermission)) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
showPermissionDialog(activity, activity.getResources().getStringArray(R.array.ratinale_list)[i - 1]);
}
}, 200L);
} else {
finishActivity();
}
}
}
public static boolean shouldShowRequestPermissionRationale(Activity activity, String... strArr) {
for (String str : strArr) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, str)) {
return true;
}
}
return false;
}
static void showPermissionDialog(final Context context, String str) {
if (dialog == null || !dialog.isShowing()) {
dialog = new AlertDialog.Builder(context).setTitle(context.getString(R.string.allow_permission)).setMessage(Html.fromHtml(str)).setPositiveButton(context.getString(R.string.app_settings), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Intent intent = new Intent();
intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
intent.setData(Uri.fromParts("package", context.getPackageName(), null));
context.startActivity(intent);
}
}).setCancelable(true).create();
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialogInterface) {
PermissionUtils.verifyPermission(context);
}
});
dialog.show();
}
}
ManageAllFilesAccessPermission.java
if(FireBaseInitializeApp.getInstance().hasPermissions()){
SplashActivity.this.HomeScreen();
}else {
permissionDialog();
}
public boolean hasPermissions() {
if (Build.VERSION.SDK_INT >= 30) {
return Environment.isExternalStorageManager();
}
return ContextCompat.checkSelfPermission(FireBaseInitializeApp.this.getApplicationContext(), "android.permission.READ_EXTERNAL_STORAGE") == 0 &&
ContextCompat.checkSelfPermission(getApplicationContext(), "android.permission.WRITE_EXTERNAL_STORAGE") == 0;
}
@SuppressLint("ResourceType")
public void permissionDialog(Activity activity) {
final Dialog dialog = new Dialog(activity);
dialog.requestWindowFeature(1);
dialog.getWindow().setBackgroundDrawableResource(17170445);
dialog.setContentView(R.layout.layout_permission_require);
dialog.findViewById(R.id.tv_allow).setOnClickListener(new View.OnClickListener() {
@Override
public final void onClick(View view) {
try {
Intent intent = new Intent("android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION");
intent.addCategory("android.intent.category.DEFAULT");
intent.setData(Uri.parse(String.format("package:%s", getApplicationContext().getPackageName())));
activity.startActivityForResult(intent, 2296);
} catch (Exception unused) {
Intent intent2 = new Intent();
intent2.setAction("android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION");
activity.startActivityForResult(intent2, 2296);
}
dialog.dismiss();
}
});
dialog.findViewById(R.id.tv_deny).setOnClickListener(new View.OnClickListener() {
@Override
public final void onClick(View view) {
dialog.dismiss();
}
});
dialog.show();
}
Splash.java
public static String[] getPermission(){
ArrayList<String> arrayLists = new ArrayList<String>();
arrayLists.add( "android.permission.CAMERA");
int buildSdk = android.os.Build.VERSION.SDK_INT;
if (buildSdk == 33) {
arrayLists.add("android.permission.READ_MEDIA_IMAGES");
// String[] updatedStrArr = new String[strArr.length + 1];
// System.arraycopy(strArr, 0, updatedStrArr, 0, strArr.length);
// updatedStrArr[strArr.length] = "android.permission.NEW_PERMISSION";
// strArr = updatedStrArr;
}else {
arrayLists.add("android.permission.WRITE_EXTERNAL_STORAGE");
arrayLists.add("android.permission.READ_EXTERNAL_STORAGE");
}
return arrayLists.toArray(new String[0]);
}
String[] strArr = {
"android.permission.CAMERA",
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_MEDIA_IMAGES",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_COARSE_LOCATION"
};
int buildSdk = android.os.Build.VERSION.SDK_INT;
if (buildSdk == 33) {
String[] updatedStrArr = new String[strArr.length + 1];
System.arraycopy(strArr, 0, updatedStrArr, 0, strArr.length);
updatedStrArr[strArr.length] = "android.permission.NEW_PERMISSION";
strArr = updatedStrArr;
}
checkPermissions.java
/* get checkPermissions*/
<!-- Required only if your app targets Android 13. -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
private static final String[] REQUIRED_SDK_PERMISSIONS33 = new String[]{
Manifest.permission.READ_MEDIA_IMAGES,
Manifest.permission.READ_MEDIA_VIDEO,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_MEDIA_LOCATION,
};
private static final String[] REQUIRED_SDK_PERMISSIONS = new String[]{
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_MEDIA_LOCATION,
};
private static final String[] REQUIRED_SDK_PERMISSIONS2 = new String[]{
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_MEDIA_LOCATION,
};
protected void checkPermissions() {
final List<String> missingPermissions = new ArrayList<String>();
String[] tmep;
if (Build.VERSION.SDK_INT >= 33) {
tmep = REQUIRED_SDK_PERMISSIONS33;
}else
if (Build.VERSION.SDK_INT > 29) {
tmep = REQUIRED_SDK_PERMISSIONS;
}else {
tmep = REQUIRED_SDK_PERMISSIONS2;
}
// check all required dynamic permissions
for (final String permission : tmep) {
final int result = ContextCompat.checkSelfPermission(this, permission);
if (result != PackageManager.PERMISSION_GRANTED) {
missingPermissions.add(permission);
}
}
if (!missingPermissions.isEmpty()) {
// request all missing permissions
final String[] permissions = missingPermissions.toArray(new String[missingPermissions.size()]);
ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE_ASK_PERMISSIONS);
} else {
final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length];
Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
onRequestPermissionsResult(REQUEST_CODE_ASK_PERMISSIONS, REQUIRED_SDK_PERMISSIONS,
grantResults);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case REQUEST_CODE_ASK_PERMISSIONS:
for (int index = permissions.length - 1; index >= 0; --index) {
if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {
// exit the app if one permission is not granted
Toast.makeText(this, "Required permission '" + permissions[index] + "' not granted, exiting", Toast.LENGTH_LONG).show();
finish();
return;
}
}
}
}
Post.java
public class SplashActivity extends AppCompatActivity {
private static final int ALL_PERMISSIONS = 10;
private static final String[] REQUIRED_PERMISSIONS =
getRequiredPermissions().toArray(new String[0]);
private SplashViewModel splashViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
splashViewModel = new ViewModelProvider(this).get(SplashViewModel.class);
if (!hasPermissions(this, REQUIRED_PERMISSIONS)) {
ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS, ALL_PERMISSIONS);
} else {
new Handler(Looper.getMainLooper()).postDelayed(this::startUi, 1000);
}
}
private static boolean hasPermissions(Context context, String... permissions) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission)
!= PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
private void startUi() {
// navigate to main application
}
private void finishActivity() {
toast("You must grant all required permissions to continue");
finish();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == ALL_PERMISSIONS) {
boolean allGranted = true;
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
allGranted = false;
break;
}
}
if (allGranted) {
startUi();
} else {
finishActivity();
}
}
}
private static List<String> getRequiredPermissions() {
List<String> permissions = new ArrayList<>();
permissions.add(Manifest.permission.READ_PHONE_STATE);
permissions.add(Manifest.permission.RECORD_AUDIO);
permissions.add(Manifest.permission.CAMERA);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
permissions.add(Manifest.permission.READ_MEDIA_IMAGES);
permissions.add(Manifest.permission.READ_MEDIA_VIDEO);
permissions.add(Manifest.permission.READ_MEDIA_AUDIO);
permissions.add(Manifest.permission.POST_NOTIFICATIONS);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
return permissions;
}
}
MainActivity .java
public class MainActivity extends AppCompatActivity {
private SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE);
if (isFirstTime()) {
// do something for the first time
Toast.makeText(this, "Welcome to the app!", Toast.LENGTH_SHORT).show();
// set the flag to false to indicate that the user has visited the app before
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("isFirstTime", false);
editor.apply();
} else {
// do something if the user has visited the app before
Toast.makeText(this, "Welcome back!", Toast.LENGTH_SHORT).show();
}
}
private boolean isFirstTime() {
// get the flag from SharedPreferences, default value is true (first time)
return sharedPreferences.getBoolean("isFirstTime", true);
}
}
public boolean isPermissionGranted(int[] grantResults){
boolean allGranted = true;
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
allGranted = false;
break;
}
}
return allGranted;
}
goSettingsPermission.java
public static void goSettingsPermission() {
try {
Intent intent = new Intent("android.settings.APPLICATION_DETAILS_SETTINGS");
intent.setData(Uri.parse("package:" + MusicEditorApplication.applicationContext().getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MusicEditorApplication.applicationContext().startActivity(intent);
} catch (Exception e) {
CommonException.crash(e);
}
}