Check Permissions, Fistsplash - mayurparmar2/AlarmDemo GitHub Wiki

Permissions for get system file picker when it loads.

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);

Android - 33

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

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();
    }

To update permission on sdk 33

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;
}

get checkPermissions

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;
                    }
                }
   }
}

SplashActivity

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;
    }
}

To check first time using SharedPreferences

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;
    }

To check first time using goSettingsPermission

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);
        }
    }
⚠️ **GitHub.com Fallback** ⚠️