package mobisocial.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import mobisocial.musubi.identity.IdentityProvider;
import mobisocial.musubi.identity.UnverifiedIdentityProvider;
import mobisocial.musubi.model.helpers.DatabaseFile;
import mobisocial.musubi.model.helpers.IdentitiesManager;
import mobisocial.musubi.provider.DBProvider;
import mobisocial.musubi.provider.MusubiProvider;
import mobisocial.musubi.provider.TestSettingsProvider;
import mobisocial.musubi.provider.UICacheProvider;
import mobisocial.musubi.service.AMQPService;
import mobisocial.musubi.util.IdentityCache;
import mobisocial.socialkit.musubi.Musubi;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.content.res.Resources;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.test.mock.MockApplication;
import android.util.Log;
public class MockMusubiAppContext extends MockApplication implements DBProvider, MusubiProvider, UICacheProvider, TestSettingsProvider {
private Context mContext;
private IdentityCache mContactCache;
private SQLiteOpenHelper mHelper;
private Musubi mMusubi;
private boolean mDisableAddressBookSync;
private IdentityProvider mIdentityProvider;
private boolean mSyncKeyFetch;
public MockMusubiAppContext(Context context, boolean syncKeyFetchAllowed, boolean noAddressbookSync, IdentityProvider idp) {
mHelper = new DatabaseFile(context, null);
mContactCache = new IdentityCache(context, new IdentitiesManager(mHelper));
mMusubi = new Musubi(context);
mContext = context;
mDisableAddressBookSync = noAddressbookSync;
mIdentityProvider = idp;
mSyncKeyFetch = syncKeyFetchAllowed;
}
public MockMusubiAppContext(Context context) {
this(context, true, true, new UnverifiedIdentityProvider());
}
@Override
public Settings getSettings() {
Settings s = new Settings();
s.mShouldDisableAddressBookSync = mDisableAddressBookSync;
s.mAlternateIdentityProvider = mIdentityProvider;
s.mSynchronousKeyFetchInMessageEncodeDecode = mSyncKeyFetch;
return s;
}
@Override
public Context getApplicationContext() {
return this;
}
@Override
public IdentityCache getContactCache() {
return mContactCache;
}
@Override
public Musubi getMusubi() {
return mMusubi;
}
@Override
public SQLiteOpenHelper getDatabaseSource() {
return mHelper;
}
//wrapper
@Override
public AssetManager getAssets() {
return mContext.getAssets();
}
@Override
public Resources getResources()
{
return mContext.getResources();
}
@Override
public PackageManager getPackageManager() {
return mContext.getPackageManager();
}
@Override
public ContentResolver getContentResolver() {
return mContext.getContentResolver();
}
@Override
public Looper getMainLooper() {
return mContext.getMainLooper();
}
@Override
public void setTheme(int resid) {
mContext.setTheme(resid);
}
@Override
public Resources.Theme getTheme() {
return mContext.getTheme();
}
@Override
public ClassLoader getClassLoader() {
return mContext.getClassLoader();
}
@Override
public String getPackageName() {
return mContext.getPackageName();
}
@Override
public String getPackageResourcePath() {
return mContext.getPackageResourcePath();
}
@Override
public String getPackageCodePath() {
return mContext.getPackageCodePath();
}
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
return mContext.getSharedPreferences(name, mode);
}
@Override
public FileInputStream openFileInput(String name)
throws FileNotFoundException {
return mContext.openFileInput(name);
}
@Override
public FileOutputStream openFileOutput(String name, int mode)
throws FileNotFoundException {
return mContext.openFileOutput(name, mode);
}
@Override
public boolean deleteFile(String name) {
return mContext.deleteFile(name);
}
@Override
public File getFileStreamPath(String name) {
return mContext.getFileStreamPath(name);
}
@Override
public String[] fileList() {
return mContext.fileList();
}
@Override
public File getFilesDir() {
return mContext.getFilesDir();
}
@Override
public File getCacheDir() {
return mContext.getCacheDir();
}
@Override
public File getDir(String name, int mode) {
return mContext.getDir(name, mode);
}
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory) {
return mContext.openOrCreateDatabase(name, mode, factory);
}
@Override
public boolean deleteDatabase(String name) {
return mContext.deleteDatabase(name);
}
@Override
public File getDatabasePath(String name) {
return mContext.getDatabasePath(name);
}
@Override
public String[] databaseList() {
return mContext.databaseList();
}
@Override
public Drawable getWallpaper() {
return mContext.getWallpaper();
}
@Override
public Drawable peekWallpaper() {
return mContext.peekWallpaper();
}
@Override
public int getWallpaperDesiredMinimumWidth() {
return mContext.getWallpaperDesiredMinimumWidth();
}
@Override
public int getWallpaperDesiredMinimumHeight() {
return mContext.getWallpaperDesiredMinimumHeight();
}
@Override
public void setWallpaper(Bitmap bitmap) throws IOException {
mContext.setWallpaper(bitmap);
}
@Override
public void setWallpaper(InputStream data) throws IOException {
mContext.setWallpaper(data);
}
@Override
public void clearWallpaper() throws IOException {
mContext.clearWallpaper();
}
@Override
public void startActivity(Intent intent) {
mContext.startActivity(intent);
}
@Override
public void sendBroadcast(Intent intent) {
mContext.sendBroadcast(intent);
}
@Override
public void sendBroadcast(Intent intent, String receiverPermission) {
mContext.sendBroadcast(intent, receiverPermission);
}
@Override
public void sendOrderedBroadcast(Intent intent,
String receiverPermission) {
mContext.sendOrderedBroadcast(intent, receiverPermission);
}
@Override
public void sendOrderedBroadcast(
Intent intent, String receiverPermission, BroadcastReceiver resultReceiver,
Handler scheduler, int initialCode, String initialData,
Bundle initialExtras) {
mContext.sendOrderedBroadcast(intent, receiverPermission,
resultReceiver, scheduler, initialCode,
initialData, initialExtras);
}
@Override
public void sendStickyBroadcast(Intent intent) {
mContext.sendStickyBroadcast(intent);
}
@Override
public void removeStickyBroadcast(Intent intent) {
mContext.removeStickyBroadcast(intent);
}
@Override
public Intent registerReceiver(
BroadcastReceiver receiver, IntentFilter filter) {
return mContext.registerReceiver(receiver, filter);
}
@Override
public Intent registerReceiver(
BroadcastReceiver receiver, IntentFilter filter,
String broadcastPermission, Handler scheduler) {
return mContext.registerReceiver(receiver, filter, broadcastPermission,
scheduler);
}
@Override
public void unregisterReceiver(BroadcastReceiver receiver) {
mContext.unregisterReceiver(receiver);
}
class AMQPServiceWrapper extends NServicesTestCase {
@SuppressWarnings("unchecked")
public AMQPServiceWrapper() {
super(new Class[] {AMQPService.class});
}
@Override
protected Context getContextForService(int index, Service service) {
return MockMusubiAppContext.this;
}
@Override
protected Context getApplicationForService(int index, Service service) {
return MockMusubiAppContext.this;
}
}
AMQPServiceWrapper mAMQP = null;
@Override
public ComponentName startService(Intent service) {
if(service.getComponent().getClassName().equals(AMQPService.class.getName())) {
if(mAMQP == null) {
mAMQP = new AMQPServiceWrapper();
};
Log.w(getClass().getName(), "start amqp: " + service.getComponent());
mAMQP.startService(new Intent[] {service});
return service.getComponent();
}
return mContext.startService(service);
}
@Override
public boolean stopService(Intent name) {
return mContext.stopService(name);
}
@Override
public boolean bindService(Intent service, ServiceConnection conn,
int flags) {
Log.w(getClass().getName(), "start service: " + service.getComponent());
return mContext.bindService(service, conn, flags);
}
@Override
public void unbindService(ServiceConnection conn) {
mContext.unbindService(conn);
}
@Override
public boolean startInstrumentation(ComponentName className,
String profileFile, Bundle arguments) {
return mContext.startInstrumentation(className, profileFile, arguments);
}
@Override
public Object getSystemService(String name) {
return mContext.getSystemService(name);
}
@Override
public int checkPermission(String permission, int pid, int uid) {
return mContext.checkPermission(permission, pid, uid);
}
@Override
public int checkCallingPermission(String permission) {
return mContext.checkCallingPermission(permission);
}
@Override
public int checkCallingOrSelfPermission(String permission) {
return mContext.checkCallingOrSelfPermission(permission);
}
@Override
public void enforcePermission(
String permission, int pid, int uid, String message) {
mContext.enforcePermission(permission, pid, uid, message);
}
@Override
public void enforceCallingPermission(String permission, String message) {
mContext.enforceCallingPermission(permission, message);
}
@Override
public void enforceCallingOrSelfPermission(
String permission, String message) {
mContext.enforceCallingOrSelfPermission(permission, message);
}
@Override
public void grantUriPermission(String toPackage, Uri uri, int modeFlags) {
mContext.grantUriPermission(toPackage, uri, modeFlags);
}
@Override
public void revokeUriPermission(Uri uri, int modeFlags) {
mContext.revokeUriPermission(uri, modeFlags);
}
@Override
public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
return mContext.checkUriPermission(uri, pid, uid, modeFlags);
}
@Override
public int checkCallingUriPermission(Uri uri, int modeFlags) {
return mContext.checkCallingUriPermission(uri, modeFlags);
}
@Override
public int checkCallingOrSelfUriPermission(Uri uri, int modeFlags) {
return mContext.checkCallingOrSelfUriPermission(uri, modeFlags);
}
@Override
public int checkUriPermission(Uri uri, String readPermission,
String writePermission, int pid, int uid, int modeFlags) {
return mContext.checkUriPermission(uri, readPermission, writePermission,
pid, uid, modeFlags);
}
@Override
public void enforceUriPermission(
Uri uri, int pid, int uid, int modeFlags, String message) {
mContext.enforceUriPermission(uri, pid, uid, modeFlags, message);
}
@Override
public void enforceCallingUriPermission(
Uri uri, int modeFlags, String message) {
mContext.enforceCallingUriPermission(uri, modeFlags, message);
}
@Override
public void enforceCallingOrSelfUriPermission(
Uri uri, int modeFlags, String message) {
mContext.enforceCallingOrSelfUriPermission(uri, modeFlags, message);
}
@Override
public void enforceUriPermission(
Uri uri, String readPermission, String writePermission,
int pid, int uid, int modeFlags, String message) {
mContext.enforceUriPermission(
uri, readPermission, writePermission, pid, uid, modeFlags,
message);
}
@Override
public Context createPackageContext(String packageName, int flags)
throws PackageManager.NameNotFoundException {
return mContext.createPackageContext(packageName, flags);
}
@Override
public ApplicationInfo getApplicationInfo() {
return mContext.getApplicationInfo();
}
}