// Path: library/src/main/java/com/thefinestartist/royal/util/ByteUtil.java
// public class ByteUtil {
// 
//     public static int byteArrayToLeInt(byte[] b) {
//         final ByteBuffer bb = ByteBuffer.wrap(b);
//         bb.order(ByteOrder.LITTLE_ENDIAN);
//         return bb.getInt();
//     }
// 
//     public static byte[] leIntToByteArray(int i) {
//         final ByteBuffer bb = ByteBuffer.allocate(Integer.SIZE / Byte.SIZE);
//         bb.order(ByteOrder.LITTLE_ENDIAN);
//         bb.putInt(i);
//         return bb.array();
//     }
// 
// //    public static int byteArrayToLeInt(byte[] encodedValue) {
// //        int value = (encodedValue[3] << (Byte.SIZE * 3));
// //        value |= (encodedValue[2] & 0xFF) << (Byte.SIZE * 2);
// //        value |= (encodedValue[1] & 0xFF) << (Byte.SIZE * 1);
// //        value |= (encodedValue[0] & 0xFF);
// //        return value;
// //    }
// //
// //    public static byte[] leIntToByteArray(int value) {
// //        byte[] encodedValue = new byte[Integer.SIZE / Byte.SIZE];
// //        encodedValue[3] = (byte) (value >> Byte.SIZE * 3);
// //        encodedValue[2] = (byte) (value >> Byte.SIZE * 2);
// //        encodedValue[1] = (byte) (value >> Byte.SIZE);
// //        encodedValue[0] = (byte) value;
// //        return encodedValue;
// //    }
// 
// }
// 
// Path: library/src/main/java/com/thefinestartist/royal/util/FileUtil.java
// public class FileUtil {
// 
//     public static List<File> getFilesFrom(File parentDir, String extension) {
//         ArrayList<File> inFiles = new ArrayList<>();
//         File[] files = parentDir.listFiles();
//         for (File file : files) {
//             if (file.isDirectory()) {
//                 inFiles.addAll(getFilesFrom(file, extension));
//             } else {
//                 if(file.getName().endsWith(extension)){
//                     inFiles.add(file);
//                 }
//             }
//         }
//         return inFiles;
//     }
// 
//     public static void copy(File src, File dst) {
//         try {
//             InputStream in = new FileInputStream(src);
//             OutputStream out = new FileOutputStream(dst);
// 
//             // Transfer bytes from in to out
//             byte[] buf = new byte[1024];
//             int len;
//             while ((len = in.read(buf)) > 0) {
//                 out.write(buf, 0, len);
//             }
//             in.close();
//             out.close();
//         } catch (IOException e) {
//             e.printStackTrace();
//         }
//     }
// }


import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import com.thefinestartist.royal.util.ByteUtil;
import com.thefinestartist.royal.util.FileUtil;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import io.realm.Realm;
import io.realm.RealmConfiguration;
                StringBuilder subject = new StringBuilder();
                subject.append("[Royal] Exported ");
                subject.append(uris.size());
                subject.append(" realm file");
                if (uris.size() > 1)
                    subject.append("s");
                intent.putExtra(Intent.EXTRA_SUBJECT, subject.toString());
            }

            // Message build
            if (intent.getStringExtra(Intent.EXTRA_TEXT) == null) {
                StringBuilder message = new StringBuilder();
                for (Realm realm : realms) {
                    RealmConfiguration configuration = realm.getConfiguration();

                    message.append("Name: ");
                    message.append(configuration.getRealmFileName());
                    message.append("\n");

                    message.append("Version: ");
                    message.append(configuration.getSchemaVersion());
                    message.append("\n");

                    message.append("Path: ");
                    message.append(configuration.getPath());
                    message.append("\n");

                    message.append("Encryption Key: ");
                    byte[] key = configuration.getEncryptionKey();
                    if (key != null) {
// Path: library/src/main/java/com/thefinestartist/royal/util/ByteUtil.java
// public class ByteUtil {
// 
//     public static int byteArrayToLeInt(byte[] b) {
//         final ByteBuffer bb = ByteBuffer.wrap(b);
//         bb.order(ByteOrder.LITTLE_ENDIAN);
//         return bb.getInt();
//     }
// 
//     public static byte[] leIntToByteArray(int i) {
//         final ByteBuffer bb = ByteBuffer.allocate(Integer.SIZE / Byte.SIZE);
//         bb.order(ByteOrder.LITTLE_ENDIAN);
//         bb.putInt(i);
//         return bb.array();
//     }
// 
// //    public static int byteArrayToLeInt(byte[] encodedValue) {
// //        int value = (encodedValue[3] << (Byte.SIZE * 3));
// //        value |= (encodedValue[2] & 0xFF) << (Byte.SIZE * 2);
// //        value |= (encodedValue[1] & 0xFF) << (Byte.SIZE * 1);
// //        value |= (encodedValue[0] & 0xFF);
// //        return value;
// //    }
// //
// //    public static byte[] leIntToByteArray(int value) {
// //        byte[] encodedValue = new byte[Integer.SIZE / Byte.SIZE];
// //        encodedValue[3] = (byte) (value >> Byte.SIZE * 3);
// //        encodedValue[2] = (byte) (value >> Byte.SIZE * 2);
// //        encodedValue[1] = (byte) (value >> Byte.SIZE);
// //        encodedValue[0] = (byte) value;
// //        return encodedValue;
// //    }
// 
// }
// 
// Path: library/src/main/java/com/thefinestartist/royal/util/FileUtil.java
// public class FileUtil {
// 
//     public static List<File> getFilesFrom(File parentDir, String extension) {
//         ArrayList<File> inFiles = new ArrayList<>();
//         File[] files = parentDir.listFiles();
//         for (File file : files) {
//             if (file.isDirectory()) {
//                 inFiles.addAll(getFilesFrom(file, extension));
//             } else {
//                 if(file.getName().endsWith(extension)){
//                     inFiles.add(file);
//                 }
//             }
//         }
//         return inFiles;
//     }
// 
//     public static void copy(File src, File dst) {
//         try {
//             InputStream in = new FileInputStream(src);
//             OutputStream out = new FileOutputStream(dst);
// 
//             // Transfer bytes from in to out
//             byte[] buf = new byte[1024];
//             int len;
//             while ((len = in.read(buf)) > 0) {
//                 out.write(buf, 0, len);
//             }
//             in.close();
//             out.close();
//         } catch (IOException e) {
//             e.printStackTrace();
//         }
//     }
// }


// Path: library/src/main/java/com/thefinestartist/royal/RoyalExport.java
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import com.thefinestartist.royal.util.ByteUtil;
import com.thefinestartist.royal.util.FileUtil;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import io.realm.Realm;
import io.realm.RealmConfiguration;

                StringBuilder subject = new StringBuilder();
                subject.append("[Royal] Exported ");
                subject.append(uris.size());
                subject.append(" realm file");
                if (uris.size() > 1)
                    subject.append("s");
                intent.putExtra(Intent.EXTRA_SUBJECT, subject.toString());
            }

            // Message build
            if (intent.getStringExtra(Intent.EXTRA_TEXT) == null) {
                StringBuilder message = new StringBuilder();
                for (Realm realm : realms) {
                    RealmConfiguration configuration = realm.getConfiguration();

                    message.append("Name: ");
                    message.append(configuration.getRealmFileName());
                    message.append("\n");

                    message.append("Version: ");
                    message.append(configuration.getSchemaVersion());
                    message.append("\n");

                    message.append("Path: ");
                    message.append(configuration.getPath());
                    message.append("\n");

                    message.append("Encryption Key: ");
                    byte[] key = configuration.getEncryptionKey();
                    if (key != null) {
                        message.append(ByteUtil.byteArrayToLeInt(key));