111c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechterpackage com.android.deskclock; 211c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter 311c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechterimport android.content.Context; 411c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechterimport android.content.res.AssetManager; 511c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechterimport android.util.Log; 611c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter 711c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechterimport com.android.deskclock.provider.Alarm; 811c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter 911c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechterimport java.io.FileNotFoundException; 1011c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechterimport java.io.IOException; 1111c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechterimport java.io.InputStream; 1211c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechterimport java.util.Properties; 1311c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter 1411c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechterpublic class ExtensionsFactory { 1511c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter 1611c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter private static String TAG = "ExtensionsFactory"; 1711c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter // Config filename for mappings of various class names to their custom 1811c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter // implementations. 1911c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter private static String EXTENSIONS_PROPERTIES = "deskclock_extensions.properties"; 2011c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter private static String DESKCLOCKEXTENSIONS_KEY = "DeskclockExtensions"; 2111c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter private static Properties sProperties = new Properties(); 2211c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter private static DeskClockExtensions sDeskClockExtensions = null; 2311c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter 2411c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter public static void init(AssetManager assetManager) { 2511c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter try { 2611c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter InputStream fileStream = assetManager.open(EXTENSIONS_PROPERTIES); 2711c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter sProperties.load(fileStream); 2811c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter fileStream.close(); 2911c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } catch (FileNotFoundException e) { 3011c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter // No custom extensions. Ignore. 3111c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter if (Log.isLoggable(TAG, Log.DEBUG)) { 3211c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter Log.d(TAG, "No custom extensions."); 3311c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 3411c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } catch (IOException e) { 3511c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter if (Log.isLoggable(TAG, Log.DEBUG)) { 3611c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter Log.d(TAG, e.toString()); 3711c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 3811c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 3911c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 4011c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter 4111c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter private static <T> T createInstance(String className) { 4211c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter try { 4311c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter Class<?> c = Class.forName(className); 4411c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter return (T) c.newInstance(); 4511c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } catch (ClassNotFoundException e) { 4611c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter if (Log.isLoggable(TAG, Log.ERROR)) { 4711c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter Log.e(TAG, className + ": unable to create instance.", e); 4811c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 4911c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } catch (IllegalAccessException e) { 5011c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter if (Log.isLoggable(TAG, Log.ERROR)) { 5111c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter Log.e(TAG, className + ": unable to create instance.", e); 5211c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 5311c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } catch (InstantiationException e) { 5411c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter if (Log.isLoggable(TAG, Log.ERROR)) { 5511c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter Log.e(TAG, className + ": unable to create instance.", e); 5611c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 5711c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 5811c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter return null; 5911c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 6011c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter 6111c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter public static DeskClockExtensions getDeskClockExtensions() { 6211c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter if ((sDeskClockExtensions != null)) { 6311c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter return sDeskClockExtensions; 6411c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 6511c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter 6611c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter String className = sProperties.getProperty(DESKCLOCKEXTENSIONS_KEY); 6711c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter if (className != null) { 6811c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter sDeskClockExtensions = createInstance(className); 6911c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } else { 7011c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter if (Log.isLoggable(TAG, Log.DEBUG)) { 7111c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter Log.d(TAG, DESKCLOCKEXTENSIONS_KEY + " not found in properties file."); 7211c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 7311c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 7411c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter 7511c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter if (sDeskClockExtensions == null) { 7611c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter sDeskClockExtensions = new DeskClockExtensions() { 7711c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter @Override 7811c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter public void addAlarm(Context context, Alarm newAlarm) { 7911c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter if (Log.isLoggable(TAG, Log.DEBUG)) { 8011c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter Log.d(TAG, "Add alarm: Empty inline implementation called."); 8111c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 8211c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 8311c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter 8411c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter @Override 8511c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter public void deleteAlarm(Context context, long alarmId) { 8611c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter if (Log.isLoggable(TAG, Log.DEBUG)) { 8711c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter Log.d(TAG, "Delete alarm: Empty inline implementation called."); 8811c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 8911c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 9011c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter }; 9111c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 9211c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter return sDeskClockExtensions; 9311c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter } 9411c38e64f05bbcfa4503edb1680f255946ff6350Florian Salbrechter} 95