/* * Copyright (C) 2011 University of Washington * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package org.odk.collect.android.utilities; import java.io.UnsupportedEncodingException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * Wrapper class for accessing Base64 functionality. * This allows API Level 7 deployment of ODK Collect while * enabling API Level 8 and higher phone to support encryption. * * @author mitchellsundt@gmail.com * */ public class Base64Wrapper { private static final int FLAGS = 2;// NO_WRAP private Class<?> base64 = null; public Base64Wrapper() throws ClassNotFoundException { base64 = this.getClass().getClassLoader() .loadClass("android.util.Base64"); } public String encodeToString(byte[] ba) { Class<?>[] argClassList = new Class[]{byte[].class, int.class}; try { Method m = base64.getDeclaredMethod("encode", argClassList); Object[] argList = new Object[]{ ba, FLAGS }; Object o = m.invoke(null, argList); byte[] outArray = (byte[]) o; String s = new String(outArray, "UTF-8"); return s; } catch (SecurityException e) { e.printStackTrace(); throw new IllegalArgumentException(e.toString()); } catch (NoSuchMethodException e) { e.printStackTrace(); throw new IllegalArgumentException(e.toString()); } catch (IllegalAccessException e) { e.printStackTrace(); throw new IllegalArgumentException(e.toString()); } catch (InvocationTargetException e) { e.printStackTrace(); throw new IllegalArgumentException(e.toString()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); throw new IllegalArgumentException(e.toString()); } } public byte[] decode(String base64String) { Class<?>[] argClassList = new Class[]{String.class, int.class}; Object o; try { Method m = base64.getDeclaredMethod("decode", argClassList); Object[] argList = new Object[]{ base64String, FLAGS }; o = m.invoke(null, argList); } catch (SecurityException e) { e.printStackTrace(); throw new IllegalArgumentException(e.toString()); } catch (NoSuchMethodException e) { e.printStackTrace(); throw new IllegalArgumentException(e.toString()); } catch (IllegalAccessException e) { e.printStackTrace(); throw new IllegalArgumentException(e.toString()); } catch (InvocationTargetException e) { e.printStackTrace(); throw new IllegalArgumentException(e.toString()); } return (byte[]) o; } }