/*
* Copyright (C) 2010 Moduad Co., Ltd.
*
* 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 com.android.pushclient;
import java.util.Properties;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.util.Log;
/**
* This class is to manage the notificatin service and to load the configuration.
*
* @author Sehwan Noh (devnoh@gmail.com)
*/
public final class ServiceManager {
private static final String LOGTAG = LogUtil
.makeLogTag(ServiceManager.class);
private Context context;
private SharedPreferences sharedPrefs;
private Properties props;
private String version = "0.5.0";
private String apiKey;
private String xmppHost;
private String xmppPort;
private String callbackActivityPackageName;
private String callbackActivityClassName;
public ServiceManager(Context context) {
this.context = context;
if (context instanceof Activity) {
Log.i(LOGTAG, "Callback Activity...");
Activity callbackActivity = (Activity) context;
callbackActivityPackageName = callbackActivity.getPackageName();
callbackActivityClassName = callbackActivity.getClass().getName();
}
// apiKey = getMetaDataValue("ANDROIDPN_API_KEY");
// Log.i(LOGTAG, "apiKey=" + apiKey);
// // if (apiKey == null) {
// // Log.e(LOGTAG, "Please set the androidpn api key in the manifest file.");
// // throw new RuntimeException();
// // }
props = loadProperties();
apiKey = props.getProperty("apiKey", "");
xmppHost = props.getProperty("xmppHost", "127.0.0.1");
xmppPort = props.getProperty("xmppPort", "5222");
Log.i(LOGTAG, "apiKey=" + apiKey);
Log.i(LOGTAG, "xmppHost=" + xmppHost);
Log.i(LOGTAG, "xmppPort=" + xmppPort);
sharedPrefs = context.getSharedPreferences(
Constants.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);
Editor editor = sharedPrefs.edit();
editor.putString(Constants.API_KEY, apiKey);
editor.putString(Constants.VERSION, version);
editor.putString(Constants.XMPP_HOST, xmppHost);
editor.putInt(Constants.XMPP_PORT, Integer.parseInt(xmppPort));
editor.putString(Constants.CALLBACK_ACTIVITY_PACKAGE_NAME,
callbackActivityPackageName);
editor.putString(Constants.CALLBACK_ACTIVITY_CLASS_NAME,
callbackActivityClassName);
editor.commit();
// Log.i(LOGTAG, "sharedPrefs=" + sharedPrefs.toString());
}
public void startService() {
Thread serviceThread = new Thread(new Runnable() {
@Override
public void run() {
Intent intent = NotificationService.getIntent();
intent.setAction("com.android.pushclient.NotificationService");
intent.setPackage("com.sogou.fastomiai");
context.startService(intent);
}
});
serviceThread.start();
}
public void stopService() {
Intent intent = NotificationService.getIntent();
context.stopService(intent);
}
// private String getMetaDataValue(String name, String def) {
// String value = getMetaDataValue(name);
// return (value == null) ? def : value;
// }
//
// private String getMetaDataValue(String name) {
// Object value = null;
// PackageManager packageManager = context.getPackageManager();
// ApplicationInfo applicationInfo;
// try {
// applicationInfo = packageManager.getApplicationInfo(context
// .getPackageName(), 128);
// if (applicationInfo != null && applicationInfo.metaData != null) {
// value = applicationInfo.metaData.get(name);
// }
// } catch (NameNotFoundException e) {
// throw new RuntimeException(
// "Could not read the name in the manifest file.", e);
// }
// if (value == null) {
// throw new RuntimeException("The name '" + name
// + "' is not defined in the manifest file's meta data.");
// }
// return value.toString();
// }
private Properties loadProperties() {
// InputStream in = null;
// Properties props = null;
// try {
// in = getClass().getResourceAsStream(
// "/org/androidpn/client/client.properties");
// if (in != null) {
// props = new Properties();
// props.load(in);
// } else {
// Log.e(LOGTAG, "Could not find the properties file.");
// }
// } catch (IOException e) {
// Log.e(LOGTAG, "Could not find the properties file.", e);
// } finally {
// if (in != null)
// try {
// in.close();
// } catch (Throwable ignore) {
// }
// }
// return props;
Properties props = new Properties();
try {
int id = context.getResources().getIdentifier("androidpn", "raw",
context.getPackageName());
props.load(context.getResources().openRawResource(id));
} catch (Exception e) {
Log.e(LOGTAG, "Could not find the properties file.", e);
// e.printStackTrace();
}
return props;
}
// public String getVersion() {
// return version;
// }
//
// public String getApiKey() {
// return apiKey;
// }
public void setNotificationIcon(int iconId) {
Editor editor = sharedPrefs.edit();
editor.putInt(Constants.NOTIFICATION_ICON, iconId);
editor.commit();
}
// public void viewNotificationSettings() {
// Intent intent = new Intent().setClass(context,
// NotificationSettingsActivity.class);
// context.startActivity(intent);
// }
public static void viewNotificationSettings(Context context) {
Intent intent = new Intent().setClass(context,
NotificationSettingsActivity.class);
context.startActivity(intent);
}
}