package cri.sanity;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.Vector;
import android.app.AlarmManager;
import android.app.Application;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.KeyguardManager;
import android.app.admin.DevicePolicyManager;
import android.bluetooth.BluetoothAdapter;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.location.LocationManager;
import android.media.AudioManager;
import android.preference.PreferenceManager;
import android.telephony.TelephonyManager;
import android.text.ClipboardManager;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.net.wifi.WifiManager;
import android.util.Log;
import android.os.AsyncTask;
import android.os.Environment;
import android.os.PowerManager;
import android.net.ConnectivityManager;
import android.widget.Toast;
import android.text.format.DateFormat;
public final class A extends Application
{
public static final boolean DEBUG = android.util.Config.DEBUG;
public static final int SDK = android.os.Build.VERSION.SDK_INT;
private static final int NID = 1;
//---- inner classes
public abstract static class Async extends AsyncTask<Void,Void,Void> {
public Void doInBackground(Void ...v) {
run();
return null;
}
public abstract void run();
}
//---- data
private static A a;
private static String name;
private static Resources resources;
private static ContentResolver resolver;
private static PackageInfo pkgInfo;
private static SharedPreferences prefs;
private static SharedPreferences.Editor edit;
private static Notification notif;
private static PendingIntent notifIntent;
private static boolean full;
private static NotificationManager notifMan;
private static AudioManager audioMan;
private static TelephonyManager telMan;
private static BluetoothAdapter btAdapter;
private static WifiManager wifiMan;
private static SensorManager sensorMan;
private static PowerManager powerMan;
private static LocationManager locMan;
private static DevicePolicyManager devpolMan;
//---- methods
@Override
public void onCreate() {
a = this;
name = getString(R.string.app);
prefs = PreferenceManager.getDefaultSharedPreferences(a);
edit = prefs.edit();
try { full = Conf.FULL || prefs.getBoolean(K.FULL, false); }
catch(Exception e) { setFull(false); }
try { pkgInfo = getPackageManager().getPackageInfo(getPackageName(), 0); }
catch(NameNotFoundException e) {}
}
//---- static methods
// basic
public static final A app() { return a; }
public static final String name() { return name; }
public static final SharedPreferences prefs() { return prefs; }
public static final SharedPreferences.Editor edit() { return edit; }
public static final String pkg() { return pkgInfo.packageName; }
public static final Resources resources() { if(resources==null) resources=a.getResources(); return resources; }
public static final ContentResolver resolver() { if(resolver ==null) resolver =a.getContentResolver(); return resolver; }
//public static final PackageInfo pkgInfo() { return pkgInfo; }
public static final String verName() { return pkgInfo.versionName; }
public static final int verCode() { return pkgInfo.versionCode; }
public static final int beta() { return pkgInfo.versionCode % 100; }
// log
//public static final int logd(Object o, String method) { return Log.d(name, o.getClass().getSimpleName()+'.'+method); }
public static final int logd(Throwable t) { return Log.wtf(name, t); }
public static final int logd(String msg) { return Log.d(name, msg); }
//public static final int logi(String msg) { return Log.i(name, msg); }
//public static final int logv(String msg) { return Log.v(name, msg); }
//public static final int logw(String msg) { return Log.w(name, msg); }
//public static final int loge(String msg) { return Log.e(name, msg); }
// misc
public static final String s(int id) { return a.getString(id); }
//public static final String s(int id) { return (String)resources().getText(id); }
public static final boolean empty(String s) { return s==null || s.length()<=0; }
//public static final Vector<String> split(String sep, String str) { return split(sep, str, 16); }
public static final Vector<String> split(String sep, String str, int capacity) {
Vector<String> split = new Vector<String>(capacity);
final int n = str.length();
if(n <= 0) return split;
int p = 0;
int q = str.indexOf(sep);
while(q > 0) {
split.add(str.substring(p, q));
p = q + 1;
if(p >= n) {
split.add("");
return split;
}
q = str.indexOf(sep, p);
}
split.add(str.substring(p));
return split;
}
public static final int rstring(String field) throws IllegalAccessException, NoSuchFieldException {
return R.string.class.getDeclaredField(field).getInt(R.string.class);
}
//public static final int rarray(String field) throws IllegalAccessException, NoSuchFieldException {
// return R.array.class.getDeclaredField(field).getInt(R.array.class);
//}
public static final String rawstr(int resId) {
try {
InputStream is = resources().openRawResource(resId);
BufferedReader br = new BufferedReader(new InputStreamReader(is), 8192);
StringBuilder s = new StringBuilder(1024);
String line;
while((line = br.readLine()) != null)
s.append(line).append('\n');
br.close();
is.close();
return s.toString();
} catch(IOException e) {
return null;
}
}
public static final long time() { return System.currentTimeMillis(); }
public static final String date() { return date(time()); }
public static final String date(long time) { return DateFormat.format(Conf.DATE_PATTERN, time).toString(); }
public static final String sdcardDir() {
File file = Environment.getExternalStorageDirectory();
if(!file.canWrite()) return null;
final String dir = file.getAbsolutePath() + '/' + name;
file = new File(dir);
return file.isDirectory()||file.mkdir() ? dir : null;
}
public static final String cleanFn(String fn, boolean slashClean) {
for(String s : new String[]{ "?", ":", "*", "\"", "\\", ";", "&", "<", ">", "\r", "\n" })
fn = fn.replace(s, "");
if(slashClean) fn = fn.replace("/", "");
return fn.trim();
}
// string conversion
/*
public int s2b(String s) { return Boolean.parseBoolean(s); }
public int s2i(String s) { return Integer.parseInt (s); }
public long s2l(String s) { return Long .parseLong (s); }
public float s2f(String s) { return Float .parseFloat (s); }
public String b2s(boolean b) { return Boolean.toString (b); }
public String i2s(int i) { return Integer.toString (i); }
public String l2s(long l) { return Long .toString (l); }
public String f2s(float f) { return Float .toString (f); }
*/
// basic notification/interaction
public static final void toast(Context ctx, String msg) { Toast.makeText(ctx, msg , Toast.LENGTH_SHORT).show(); }
public static final void toast(Context ctx, int resId) { Toast.makeText(ctx, resId, Toast.LENGTH_SHORT).show(); }
public static final void toast(String msg) { Toast.makeText(a , msg , Toast.LENGTH_SHORT).show(); }
public static final void toast(int resId) { Toast.makeText(a , resId, Toast.LENGTH_SHORT).show(); }
public static final void notify(String msg) { notify(name , msg, NID, R.drawable.ic_bar, time()); }
public static final void notify(String msg, int id) { notify(name , msg, id , R.drawable.ic_bar, time()); }
public static final void notify(String msg, long when) { notify(name , msg, NID, R.drawable.ic_bar, when); }
public static final void notify(String msg, int id, long when) { notify(name , msg, id , R.drawable.ic_bar, when); }
public static final void notify(String msg, int id, int icon) { notify(name , msg, id , icon , time()); }
public static final void notify(String title, String msg) { notify(title, msg, NID, R.drawable.ic_bar, time()); }
public static final void notify(String title, String msg, int id) { notify(title, msg, id , R.drawable.ic_bar, time()); }
public static final void notify(String title, String msg, long when) { notify(title, msg, NID, R.drawable.ic_bar, when); }
public static final void notify(String title, String msg, int id, int icon) { notify(title, msg, id, icon, time()); }
public static final void notify(String title, String msg, int id, int icon, long when) {
if(notif == null) {
notif = new Notification(icon, msg, when);
Intent i = new Intent(a, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
notifIntent = PendingIntent.getActivity(a, 0, i, 0);
} else {
notif.tickerText = msg;
notif.when = when;
notif.icon = icon;
}
notif.setLatestEventInfo(a, title, msg, notifIntent);
notifMan().notify(id, notif);
}
public static final void notifyCanc() { notifMan().cancel(NID); }
public static final void notifyCanc(int id) { notifMan().cancel( id); }
//public static final void notifyCancAll() { notifMan().cancelAll(); }
//---- preferences
public static final boolean isEnabled() { return prefs.getBoolean(K.ENABLED, false); }
public static final boolean isFull() { return full; }
public static final void setFull(boolean full) { putc(K.FULL, A.full=full); }
public static final boolean is(String key) { return prefs.getBoolean(key, false); }
//public static final boolean is(String key, boolean def) { return prefs.getBoolean(key, def ); }
public static final String gets(String key) { return prefs.getString (key, "" ); }
//public static final String gets(String key, String def) { return prefs.getString (key, def ); }
public static final int geti(String key) { return prefs.getInt (key, 0 ); }
//public static final int geti(String key, int def) { return prefs.getInt (key, def ); }
public static final long getl(String key) { return prefs.getLong (key, 0l ); }
//public static final long getl(String key, long def) { return prefs.getLong (key, def ); }
//public static final float getf(String key) { return prefs.getFloat (key, 0 ); }
//public static final float getf(String key, float def) { return prefs.getFloat (key, def ); }
public static final int getsi(String key) { return Integer.parseInt(prefs.getString(key, "0")); }
//public static final int getsi(String key, String def) { return Integer.parseInt (prefs.getString(key, def)); }
//public static final long getsl(String key) { return Long .parseLong (prefs.getString(key, "0")); }
//public static final long getsl(String key, String def) { return Long .parseLong (prefs.getString(key, def)); }
//public static final float getsf(String key) { return Float .parseFloat(prefs.getString(key, "0")); }
//public static final float getsf(String key, String def) { return Float .parseFloat(prefs.getString(key, def)); }
public static final Object get(String key) {
try { return geti(key); } catch(Exception ei) {
try { return getl(key); } catch(Exception el) {
try { return is(key); } catch(Exception eb) {
try { return gets(key); } catch(Exception es) {}}}}
return null;
}
public static final boolean has (String key) { return prefs.contains(key); }
public static final A del (String key) { edit.remove(key); return a; }
public static final A delc(String key) { edit.remove(key).commit(); return a; }
public static final A put (String key, boolean val) { edit.putBoolean(key, val); return a; }
public static final A putc(String key, boolean val) { edit.putBoolean(key, val).commit(); return a; }
public static final A put (String key, int val) { edit.putInt (key, val); return a; }
public static final A putc(String key, int val) { edit.putInt (key, val).commit(); return a; }
public static final A put (String key, long val) { edit.putLong (key, val); return a; }
public static final A putc(String key, long val) { edit.putLong (key, val).commit(); return a; }
public static final A put (String key, float val) { edit.putFloat (key, val); return a; }
public static final A putc(String key, float val) { edit.putFloat (key, val).commit(); return a; }
public static final A put (String key, String val) { edit.putString (key, val); return a; }
public static final A putc(String key, String val) { edit.putString (key, val).commit(); return a; }
public static final A putc(String key, Object val) { return put(key, val).commit(); }
public static final A put (String key, Object val) {
if( val instanceof Boolean) edit.putBoolean(key, (Boolean)val);
else if(val instanceof Integer) edit.putInt (key, (Integer)val);
else if(val instanceof Float ) edit.putFloat (key, (Float )val);
else if(val instanceof Long ) edit.putLong (key, (Long )val);
else edit.putString (key, val.toString());
return a;
}
public static final A putAll (Map<String,?> map) {
for(Map.Entry<String,?> e : map.entrySet())
put(e.getKey(), e.getValue());
return a;
}
public static final A commit() { edit.commit(); return a; }
//---- manage devices
public static final NotificationManager notifMan() {
if(notifMan == null) notifMan = (NotificationManager)a.getSystemService(NOTIFICATION_SERVICE);
return notifMan;
}
public static final AudioManager audioMan() {
if(audioMan == null) audioMan = (AudioManager)a.getSystemService(AUDIO_SERVICE);
return audioMan;
}
public static final TelephonyManager telMan() {
if(telMan == null) telMan = (TelephonyManager)a.getSystemService(TELEPHONY_SERVICE);
return telMan;
}
public static final WifiManager wifiMan() {
if(wifiMan == null) wifiMan = (WifiManager)a.getSystemService(WIFI_SERVICE);
return wifiMan;
}
public static final ConnectivityManager connMan() {
return (ConnectivityManager)a.getSystemService(CONNECTIVITY_SERVICE);
}
public static final KeyguardManager keyguardMan() {
return (KeyguardManager)a.getSystemService(KEYGUARD_SERVICE);
}
public static final DevicePolicyManager devpolMan() {
if(devpolMan == null) devpolMan = (DevicePolicyManager)a.getSystemService(DEVICE_POLICY_SERVICE);
return devpolMan;
}
public static final PowerManager powerMan() {
if(powerMan == null) powerMan = (PowerManager)a.getSystemService(POWER_SERVICE);
return powerMan;
}
public static final LocationManager locMan() {
if(locMan == null) locMan = (LocationManager)a.getSystemService(LOCATION_SERVICE);
return locMan;
}
public static final SensorManager sensorMan() {
if(sensorMan == null) sensorMan = (SensorManager)a.getSystemService(SENSOR_SERVICE);
return sensorMan;
}
public static final AlarmManager alarmMan() {
return (AlarmManager)a.getSystemService(ALARM_SERVICE);
}
public static final ClipboardManager clipMan() {
return (ClipboardManager)a.getSystemService(CLIPBOARD_SERVICE);
}
public static final BluetoothAdapter btAdapter() {
if(btAdapter == null) btAdapter = BluetoothAdapter.getDefaultAdapter();
return btAdapter;
}
public static final Sensor sensorProxim() {
final SensorManager sm = sensorMan();
return sm==null ? null : sm.getDefaultSensor(Sensor.TYPE_PROXIMITY);
}
}