Search This Blog

Showing posts with label Hashmap. Show all posts
Showing posts with label Hashmap. Show all posts

Sunday, September 25, 2016

Checking multiple run time permission for marshmellow and above in android

Hello friend., Here i am posting tutorial for granting multiple permission with common code.. You need to add this code once and check permission run time.

Make one class in with common methods can be added in it. I call it CM as common methods. Add the following code in the common code.


CM.java

public static void showMessageOKCancel(Activity context, String message,                                                                                                              DialogInterface.OnClickListener okListener) {
           new AlertDialog.Builder(context)
                           .setMessage(message)
                           .setPositiveButton("OK", okListener)
                           .setNegativeButton("Cancel", null)
                           .create()
                           .show();
}

public static void applyMarshmallowPermission(
                          final Activity context, String Permission[], String[] strPermissionMessage, 
                          final int RequestCode, OnPermissionAlreadyGrant callBackPermission) {
            final List<String> permissionsList = new ArrayList<String>();
            List<String> permissionsNeeded = new ArrayList<String>();

             for (int i = 0; i < Permission.length; i++) {
                         if (!addPermission(context, permissionsList, Permission[i])) {
                                            permissionsNeeded.add(strPermissionMessage[i]);
                         }
             }

             if (permissionsList.size() > 0) {
                         if (permissionsNeeded.size() > 0) {
                              // Need Rationale
                              String message = "You need to grant access to " + permissionsNeeded.get(0);
                              for (int i = 1; i < permissionsNeeded.size(); i++)
                                       message = message + ", " + permissionsNeeded.get(i);

                              showMessageOKCancel(context, message,
                                          new DialogInterface.OnClickListener() {
                                                  @Override
                                                   public void onClick(DialogInterface dialog, int which) {
                                                                  ActivityCompat.requestPermissions(context,                                                                                                     permissionsList.toArray(new                                                                                                                              String[permissionsList.size()]), RequestCode);
                                                   }
                                           });
                                  return;
                            }
                           ActivityCompat.requestPermissions(context, permissionsList.toArray(new                                                            String[permissionsList.size()]),  RequestCode);
                          return;
              }

               if (callBackPermission != null) {
                          callBackPermission.onPermssionAlreadyGranted();
                          return;
              }


}


private static boolean addPermission(Activity context, 
                                             List<String> permissionsList, String permission) {
                   
                            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                                          permissionsList.add(permission);
                                          // Check for Rationale Option
                                          if (ActivityCompat.shouldShowRequestPermissionRationale(context, permission)) {
                                                            return false;
                                          }

                             }
       return true;

}

public static int checkNeverAskAgainList(Activity
                                                                context, String[] permissionsList) {
          int deniedList = 0;
          for (String strPermission : permissionsList) {
                   boolean isRational = ActivityCompat.shouldShowRequestPermissionRationale(context, strPermission);
                   if (isRational) {
                              deniedList++;
                   }
           }
   return deniedList;
}


public static void goToSettings(Activity context) {
                Intent myAppSettings = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + context.getPackageName()));
                myAppSettings.addCategory(Intent.CATEGORY_DEFAULT);
                myAppSettings.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(myAppSettings);
}


This methods are used to check for permissions that user has to allow or user will go to setting and allow the permission that our app needs.

Now how to use this for multiple permission grant in your activity using this methods.

Add this in your activity when you need to check the permissions

//Mention list of permissions that are needed in your activity
String strPermissoinList[] = new String[]{android.Manifest.permission.READ_PHONE_STATE,                                                      android.Manifest.permission.GET_ACCOUNTS};
// Description to be shown to user for particular permission if user denied once.
String strPermissionMessage[] = new String[]{"Phone State", "Google+ Account"};
// Request code to be used when permission is received from user
public static final int PERMISSION_MULTIPLE_GRANT_CODE = 1001;



public void buttonClick(View view) {
               CM.applyMarshmallowPermission(MainActivity.this, strPermissoinList,                                                          strPermissionMessage,                                                                                                           PERMISSION_MULTIPLE_GRANT_CODE, 
                                                new OnPermissionAlreadyGrant() { 
                   @Override
                   public void onPermssionAlreadyGranted() {
                              // if you have already granted or sdk version is below marshmellow
                              Toast.makeText(MainActivity.this, "You have allowed all permission.                                                                applyMarshmallowPermission : " +                                                                                      CM.getDeviceId(MainActivity.this),                                                                                        Toast.LENGTH_SHORT).show();
                  }
          });
}

Now add the following lines in the onRequestPermissionsResult code.

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
       switch (requestCode) {
             case PERMISSION_MULTIPLE_GRANT_CODE:

                    Map<String, Integer> perms = new HashMap<String, Integer>();
                    // Initial
                    perms.put(android.Manifest.permission.READ_PHONE_STATE, PackageManager.PERMISSION_GRANTED);
                    perms.put(android.Manifest.permission.GET_ACCOUNTS, PackageManager.PERMISSION_GRANTED);
                    // Fill with results
                    for (int i = 0; i < permissions.length; i++)
                            perms.put(permissions[i], grantResults[i]);
                      // Check for READ_PHONE_STATE
                      if (perms.get(android.Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED
                                       && perms.get(android.Manifest.permission.GET_ACCOUNTS) == PackageManager.PERMISSION_GRANTED) {
                                          Toast.makeText(this, "You have allowed all permission. onRequestPermissionsResult :: " + CM.getDeviceId(MainActivity.this), Toast.LENGTH_SHORT)
.show();

                       } else {

                           int countBlock = CM.checkNeverAskAgainList(this, strPermissoinList);
                           if (countBlock > 0) {
                                  // Permission Denied
                                   Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT)
.show();
                            } else {
                                    CM.showMessageOKCancel(MainActivity.this, "Go to setting and give permission",
                                                                            new DialogInterface.OnClickListener() {
                                   @Override
                                   public void onClick(DialogInterface dialog, int which) {
                                                  CM.goToSettings(MainActivity.this);
                                   }
                             });
                    }
              }
              break;
          default:
               super.onRequestPermissionsResult(requestCode, permissions, grantResults);
       }
}

Finally the callback interface that you need to define in your code is below

public interface OnPermissionAlreadyGrant {
           void onPermssionAlreadyGranted();
}

Wednesday, June 20, 2012

DOM parsing using xml

Put the following code in the xml file.

<Books>
    <Book>
        <Name>Cryptography</Name>
        <Author>Harish</Author>
        <Price>$200</Price>
    </Book>
    <Book>
        <Name>Android</Name>
        <Author>Harish</Author>
        <Price>$250</Price>
    </Book>
</Books>


Method to parse this as the xml file and read in the method.

public HashMap doDomParsing(String strUrl, String strParent, String[] child)
{
       HashMap hmap, hmapchild = null;
       URL url;
       hmap = new HashMap();
       
       try
       {
           //url = new URL(strUrl);
           
           DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
           DocumentBuilder db = dbf.newDocumentBuilder();

          Document doc = db.parse(new InputSource(getClass().getResourceAsStream("/res/raw/parse.xml")));
           
           NodeList nodeList = doc.getElementsByTagName("item");
           for (int i = 0; i < nodeList.getLength(); i++)
           {
               
               Node node = nodeList.item(i);
               NodeList properties = node.getChildNodes();
               
               hmapchild = new HashMap();
               
               for(int j=0 ; j < properties.getLength() ; j++)
               {
                   Node property = properties.item(j);
                   String nodename = property.getNodeName();
                   Log.e("Node NAME", nodename);
                   
                   for(int inew =0 ;inew < child.length ; inew++)
                   {
                       if(nodename.equalsIgnoreCase(child[inew]))
                       {
                           hmapchild.put(nodename, property.getFirstChild().getNodeValue());
                       }
                   }
               }
               hmap.put(i, hmapchild);
           }
       }
       catch (Exception e)
       {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
       
       return  hmap;
}