1f84b1a90cf76e7eff76affa17834377194caba8cSara Ting/* 2f84b1a90cf76e7eff76affa17834377194caba8cSara Ting * Copyright (C) 2012 The Android Open Source Project 3f84b1a90cf76e7eff76affa17834377194caba8cSara Ting * 4f84b1a90cf76e7eff76affa17834377194caba8cSara Ting * Licensed under the Apache License, Version 2.0 (the "License"); 5f84b1a90cf76e7eff76affa17834377194caba8cSara Ting * you may not use this file except in compliance with the License. 6f84b1a90cf76e7eff76affa17834377194caba8cSara Ting * You may obtain a copy of the License at 7f84b1a90cf76e7eff76affa17834377194caba8cSara Ting * 8f84b1a90cf76e7eff76affa17834377194caba8cSara Ting * http://www.apache.org/licenses/LICENSE-2.0 9f84b1a90cf76e7eff76affa17834377194caba8cSara Ting * 10f84b1a90cf76e7eff76affa17834377194caba8cSara Ting * Unless required by applicable law or agreed to in writing, software 11f84b1a90cf76e7eff76affa17834377194caba8cSara Ting * distributed under the License is distributed on an "AS IS" BASIS, 12f84b1a90cf76e7eff76affa17834377194caba8cSara Ting * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f84b1a90cf76e7eff76affa17834377194caba8cSara Ting * See the License for the specific language governing permissions and 14f84b1a90cf76e7eff76affa17834377194caba8cSara Ting * limitations under the License. 15f84b1a90cf76e7eff76affa17834377194caba8cSara Ting */ 16f84b1a90cf76e7eff76affa17834377194caba8cSara Ting 17f84b1a90cf76e7eff76affa17834377194caba8cSara Tingpackage com.android.calendar; 18f84b1a90cf76e7eff76affa17834377194caba8cSara Ting 19f84b1a90cf76e7eff76affa17834377194caba8cSara Tingimport android.content.Context; 20f84b1a90cf76e7eff76affa17834377194caba8cSara Tingimport android.content.res.AssetManager; 21fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wrenimport android.os.Bundle; 22f84b1a90cf76e7eff76affa17834377194caba8cSara Tingimport android.util.Log; 23f84b1a90cf76e7eff76affa17834377194caba8cSara Tingimport android.view.Menu; 24f84b1a90cf76e7eff76affa17834377194caba8cSara Tingimport android.view.MenuItem; 25f84b1a90cf76e7eff76affa17834377194caba8cSara Ting 2633171c7f2faa687a98e1687cfd409827566f7959Michael Chanimport java.io.FileNotFoundException; 27f84b1a90cf76e7eff76affa17834377194caba8cSara Tingimport java.io.IOException; 28f84b1a90cf76e7eff76affa17834377194caba8cSara Tingimport java.io.InputStream; 29f84b1a90cf76e7eff76affa17834377194caba8cSara Tingimport java.util.Properties; 30f84b1a90cf76e7eff76affa17834377194caba8cSara Ting 31fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren 32f84b1a90cf76e7eff76affa17834377194caba8cSara Ting/* 33f84b1a90cf76e7eff76affa17834377194caba8cSara Ting * Skeleton for additional options in the AllInOne menu. 34f84b1a90cf76e7eff76affa17834377194caba8cSara Ting */ 35f84b1a90cf76e7eff76affa17834377194caba8cSara Tingpublic class ExtensionsFactory { 36fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren 37f84b1a90cf76e7eff76affa17834377194caba8cSara Ting private static String TAG = "ExtensionsFactory"; 38f84b1a90cf76e7eff76affa17834377194caba8cSara Ting 3933171c7f2faa687a98e1687cfd409827566f7959Michael Chan // Config filename for mappings of various class names to their custom 4033171c7f2faa687a98e1687cfd409827566f7959Michael Chan // implementations. 41f84b1a90cf76e7eff76affa17834377194caba8cSara Ting private static String EXTENSIONS_PROPERTIES = "calendar_extensions.properties"; 42f84b1a90cf76e7eff76affa17834377194caba8cSara Ting 43f84b1a90cf76e7eff76affa17834377194caba8cSara Ting private static String ALL_IN_ONE_MENU_KEY = "AllInOneMenuExtensions"; 44fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren private static String CLOUD_NOTIFICATION_KEY = "CloudNotificationChannel"; 45373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski private static String ANALYTICS_LOGGER_KEY = "AnalyticsLogger"; 46f84b1a90cf76e7eff76affa17834377194caba8cSara Ting 47f84b1a90cf76e7eff76affa17834377194caba8cSara Ting private static Properties sProperties = new Properties(); 48f84b1a90cf76e7eff76affa17834377194caba8cSara Ting private static AllInOneMenuExtensionsInterface sAllInOneMenuExtensions = null; 49373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski private static AnalyticsLogger sAnalyticsLogger = null; 50f84b1a90cf76e7eff76affa17834377194caba8cSara Ting 51f84b1a90cf76e7eff76affa17834377194caba8cSara Ting public static void init(AssetManager assetManager) { 52f84b1a90cf76e7eff76affa17834377194caba8cSara Ting try { 53f84b1a90cf76e7eff76affa17834377194caba8cSara Ting InputStream fileStream = assetManager.open(EXTENSIONS_PROPERTIES); 54f84b1a90cf76e7eff76affa17834377194caba8cSara Ting sProperties.load(fileStream); 55f84b1a90cf76e7eff76affa17834377194caba8cSara Ting fileStream.close(); 5633171c7f2faa687a98e1687cfd409827566f7959Michael Chan } catch (FileNotFoundException e) { 5733171c7f2faa687a98e1687cfd409827566f7959Michael Chan // No custom extensions. Ignore. 5833171c7f2faa687a98e1687cfd409827566f7959Michael Chan Log.d(TAG, "No custom extensions."); 59f84b1a90cf76e7eff76affa17834377194caba8cSara Ting } catch (IOException e) { 6033171c7f2faa687a98e1687cfd409827566f7959Michael Chan Log.d(TAG, e.toString()); 61f84b1a90cf76e7eff76affa17834377194caba8cSara Ting } 62f84b1a90cf76e7eff76affa17834377194caba8cSara Ting } 63f84b1a90cf76e7eff76affa17834377194caba8cSara Ting 64f84b1a90cf76e7eff76affa17834377194caba8cSara Ting private static <T> T createInstance(String className) { 65f84b1a90cf76e7eff76affa17834377194caba8cSara Ting try { 66f84b1a90cf76e7eff76affa17834377194caba8cSara Ting Class<?> c = Class.forName(className); 67f84b1a90cf76e7eff76affa17834377194caba8cSara Ting return (T) c.newInstance(); 68f84b1a90cf76e7eff76affa17834377194caba8cSara Ting } catch (ClassNotFoundException e) { 69f84b1a90cf76e7eff76affa17834377194caba8cSara Ting Log.e(TAG, className + ": unable to create instance.", e); 70f84b1a90cf76e7eff76affa17834377194caba8cSara Ting } catch (IllegalAccessException e) { 71f84b1a90cf76e7eff76affa17834377194caba8cSara Ting Log.e(TAG, className + ": unable to create instance.", e); 72f84b1a90cf76e7eff76affa17834377194caba8cSara Ting } catch (InstantiationException e) { 73f84b1a90cf76e7eff76affa17834377194caba8cSara Ting Log.e(TAG, className + ": unable to create instance.", e); 74f84b1a90cf76e7eff76affa17834377194caba8cSara Ting } 75f84b1a90cf76e7eff76affa17834377194caba8cSara Ting return null; 76f84b1a90cf76e7eff76affa17834377194caba8cSara Ting } 77f84b1a90cf76e7eff76affa17834377194caba8cSara Ting 78f84b1a90cf76e7eff76affa17834377194caba8cSara Ting public static AllInOneMenuExtensionsInterface getAllInOneMenuExtensions() { 79373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski if ((sAllInOneMenuExtensions != null)) { 80373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski return sAllInOneMenuExtensions; 81373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski } 82373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski 83373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski String className = sProperties.getProperty(ALL_IN_ONE_MENU_KEY); 84373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski if (className != null) { 85373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski sAllInOneMenuExtensions = createInstance(className); 86373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski } else { 87373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski Log.d(TAG, ALL_IN_ONE_MENU_KEY + " not found in properties file."); 88f84b1a90cf76e7eff76affa17834377194caba8cSara Ting } 89f84b1a90cf76e7eff76affa17834377194caba8cSara Ting 90373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski if (sAllInOneMenuExtensions == null) { 91373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski sAllInOneMenuExtensions = new AllInOneMenuExtensionsInterface() { 92373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski @Override 93373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski public Integer getExtensionMenuResource(Menu menu) { 94373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski return null; 95373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski } 96373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski 97373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski @Override 98373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski public boolean handleItemSelected(MenuItem item, Context context) { 99373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski return false; 100373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski } 101373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski }; 102373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski } 103f84b1a90cf76e7eff76affa17834377194caba8cSara Ting return sAllInOneMenuExtensions; 104f84b1a90cf76e7eff76affa17834377194caba8cSara Ting } 105fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren 106fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren public static CloudNotificationBackplane getCloudNotificationBackplane() { 107fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren CloudNotificationBackplane cnb = null; 108fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren 109fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren String className = sProperties.getProperty(CLOUD_NOTIFICATION_KEY); 110fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren if (className != null) { 111fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren cnb = createInstance(className); 112fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren } else { 113fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren Log.d(TAG, CLOUD_NOTIFICATION_KEY + " not found in properties file."); 114fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren } 115fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren 116fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren if (cnb == null) { 117fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren cnb = new CloudNotificationBackplane() { 118fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren @Override 119fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren public boolean open(Context context) { 120fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren return true; 121fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren } 122fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren 123fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren @Override 124fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren public boolean subscribeToGroup(String senderId, String account, String groupId) 125fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren throws IOException { 126fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren return true;} 127fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren 128fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren @Override 129c9a20a3c1803c9485489a398e0a1bffdc46a15fbChris Wren public void send(String to, String msgId, Bundle data) { 130fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren } 131fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren 132fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren @Override 133fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren public void close() { 134fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren } 135fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren }; 136fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren } 137fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren 138fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren return cnb; 139fec5bff4f2d3c50bc7d644b21acca37f320358e0Chris Wren } 140373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski 141373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski public static AnalyticsLogger getAnalyticsLogger(Context context) { 142373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski if (sAnalyticsLogger != null) { 143373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski return sAnalyticsLogger; 144373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski } 145373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski 146373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski String className = sProperties.getProperty(ANALYTICS_LOGGER_KEY); 147373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski if (className != null) { 148373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski sAnalyticsLogger = createInstance(className); 149373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski } else { 150373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski Log.d(TAG, ANALYTICS_LOGGER_KEY + " not found in properties file."); 151373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski } 152373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski 153373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski if (sAnalyticsLogger == null) { 154373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski sAnalyticsLogger = new AnalyticsLogger() { 155373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski @Override 156373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski public boolean initialize(Context context) { 157373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski return true; 158373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski } 159373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski 160373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski @Override 161373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski public void trackView(String name) { 162373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski } 163373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski }; 164373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski } 165373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski 166373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski sAnalyticsLogger.initialize(context); 167373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski return sAnalyticsLogger; 168373e9dab4c22b74e0039427fd316544d93a5d318Paul Sliwowski } 169f84b1a90cf76e7eff76affa17834377194caba8cSara Ting} 170