blob: d52429e689be99f8a73c12daf25600919af87e09 [file] [log] [blame]
Ben Gilad03a533a2013-08-21 09:46:00 -07001/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.contacts.common.extensions;
18
19import android.content.Context;
20import android.util.Log;
21
22import java.io.FileNotFoundException;
23import java.io.IOException;
24import java.io.InputStream;
25import java.util.Properties;
26
27
28/*
29 * A framework for adding extensions to Dialer. This class reads a property file from
30 * assets/contacts_extensions.properties and loads extension classes that an app has defined. If
31 * an extension class was not defined, null is returned.
32 */
33public class ExtensionsFactory {
34
35 private static String TAG = "ExtensionsFactory";
36
37 // Config filename for mappings of various class names to their custom
38 // implementations.
39 private static final String EXTENSIONS_PROPERTIES = "contacts_extensions.properties";
40
41 private static final String EXTENDED_PHONE_DIRECTORIES_KEY = "extendedPhoneDirectories";
42
43 private static Properties sProperties = null;
44 private static ExtendedPhoneDirectoriesManager mExtendedPhoneDirectoriesManager = null;
45
46 public static void init(Context context) {
47 if (sProperties != null) {
48 return;
49 }
50 try {
51 final InputStream fileStream = context.getAssets().open(EXTENSIONS_PROPERTIES);
52 sProperties = new Properties();
53 sProperties.load(fileStream);
54 fileStream.close();
55
56 final String className = sProperties.getProperty(EXTENDED_PHONE_DIRECTORIES_KEY);
57 if (className != null) {
58 mExtendedPhoneDirectoriesManager = createInstance(className);
59 } else {
60 Log.d(TAG, EXTENDED_PHONE_DIRECTORIES_KEY + " not found in properties file.");
61 }
62
63 } catch (FileNotFoundException e) {
64 // No custom extensions. Ignore.
65 Log.d(TAG, "No custom extensions.");
66 } catch (IOException e) {
67 Log.d(TAG, e.toString());
68 }
69 }
70
71 private static <T> T createInstance(String className) {
72 try {
73 Class<?> c = Class.forName(className);
74 //noinspection unchecked
75 return (T) c.newInstance();
76 } catch (ClassNotFoundException e) {
77 Log.e(TAG, className + ": unable to create instance.", e);
78 } catch (IllegalAccessException e) {
79 Log.e(TAG, className + ": unable to create instance.", e);
80 } catch (InstantiationException e) {
81 Log.e(TAG, className + ": unable to create instance.", e);
82 }
83 return null;
84 }
85
86 public static ExtendedPhoneDirectoriesManager getExtendedPhoneDirectoriesManager() {
87 return mExtendedPhoneDirectoriesManager;
88 }
89}