Skip to content

Commit c4f2638

Browse files
authored
Merge pull request #36 from optimizely/allow-multiple-managers
These changes should enable multiple OptimizelyManager and AndroidOptimizely parings for each project. Some users might find it convenient to be able to run multiple Optimizely projects inside of the same app. For example, one project might test the copy of notifications shown from Android services and another project is used for Activity testing.
2 parents c5eb882 + 515d7ed commit c4f2638

File tree

7 files changed

+31
-21
lines changed

7 files changed

+31
-21
lines changed

android-sdk/src/main/java/com/optimizely/ab/android/sdk/OptimizelyManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
* Handles loading the Optimizely data file
5757
*/
5858
public class OptimizelyManager {
59-
@NonNull private static AndroidOptimizely androidOptimizely = new AndroidOptimizely(null,
59+
@NonNull private AndroidOptimizely androidOptimizely = new AndroidOptimizely(null,
6060
LoggerFactory.getLogger(AndroidOptimizely.class));
6161
@NonNull private final String projectId;
6262
@NonNull private final Long eventHandlerDispatchInterval;
@@ -266,7 +266,7 @@ protected void onPostExecute(UserExperimentRecord userExperimentRecord) {
266266
serviceScheduler.schedule(intent, dataFileDownloadIntervalTimeUnit.toMillis(dataFileDownloadInterval));
267267

268268
try {
269-
OptimizelyManager.androidOptimizely = buildOptimizely(context, dataFile, userExperimentRecord);
269+
OptimizelyManager.this.androidOptimizely = buildOptimizely(context, dataFile, userExperimentRecord);
270270
OptimizelyManager.this.userExperimentRecord = userExperimentRecord;
271271
logger.info("Sending Optimizely instance to listener");
272272

event-handler/src/androidTest/java/com/optimizely/ab/android/event_handler/EventDAOTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ public class EventDAOTest {
5454
public void setupEventDAO() {
5555
logger = mock(Logger.class);
5656
context = InstrumentationRegistry.getTargetContext();
57-
eventDAO = EventDAO.getInstance(context, logger);
57+
eventDAO = EventDAO.getInstance(context, "1", logger);
5858
}
5959

6060
@After
6161
public void tearDownEventDAO() {
62-
context.deleteDatabase(EventSQLiteOpenHelper.DB_NAME);
62+
assertTrue(context.deleteDatabase(String.format(EventSQLiteOpenHelper.DB_NAME , "1")));
6363
}
6464

6565
@Test

event-handler/src/androidTest/java/com/optimizely/ab/android/event_handler/EventDispatcherTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public void setup() {
6767
context = InstrumentationRegistry.getTargetContext();
6868
logger = mock(Logger.class);
6969
client = mock(Client.class);
70-
eventDAO = EventDAO.getInstance(context, logger);
70+
eventDAO = EventDAO.getInstance(context, "1", logger);
7171
eventClient = new EventClient(client, logger);
7272
serviceScheduler = mock(ServiceScheduler.class);
7373
optlyStorage = mock(OptlyStorage.class);
@@ -77,7 +77,7 @@ public void setup() {
7777

7878
@After
7979
public void tearDown() {
80-
context.deleteDatabase(EventSQLiteOpenHelper.DB_NAME);
80+
context.deleteDatabase(String.format(EventSQLiteOpenHelper.DB_NAME, "1"));
8181
}
8282

8383
@Test

event-handler/src/androidTest/java/com/optimizely/ab/android/event_handler/EventSQLiteOpenHelperTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import android.content.Context;
1919
import android.database.Cursor;
2020
import android.database.sqlite.SQLiteDatabase;
21+
import android.os.Build;
22+
import android.support.annotation.RequiresApi;
2123
import android.support.test.InstrumentationRegistry;
2224
import android.support.test.runner.AndroidJUnit4;
2325

@@ -48,13 +50,14 @@ public void setup() {
4850

4951
@After
5052
public void teardown() {
51-
context.deleteDatabase(EventSQLiteOpenHelper.DB_NAME);
53+
context.deleteDatabase(String.format(EventSQLiteOpenHelper.DB_NAME, "1"));
5254
}
5355

56+
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
5457
@Test
5558
public void onCreateMakesTables() {
5659
EventSQLiteOpenHelper eventSQLiteOpenHelper =
57-
new EventSQLiteOpenHelper(context, EventSQLiteOpenHelper.DB_NAME, null, 1, logger);
60+
new EventSQLiteOpenHelper(context, "1", null, 1, logger);
5861
SQLiteDatabase db = eventSQLiteOpenHelper.getWritableDatabase();
5962
String[] projection = {
6063
EventTable.Column._ID,

event-handler/src/main/java/com/optimizely/ab/android/event_handler/EventDAO.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ private EventDAO(@NonNull EventSQLiteOpenHelper dbHelper, @NonNull Logger logger
4646
}
4747

4848
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
49-
static EventDAO getInstance(@NonNull Context context, @NonNull Logger logger) {
50-
EventSQLiteOpenHelper sqLiteOpenHelper = new EventSQLiteOpenHelper(context, EventSQLiteOpenHelper.DB_NAME, null, EventSQLiteOpenHelper.VERSION, null, LoggerFactory.getLogger(EventSQLiteOpenHelper.class));
49+
static EventDAO getInstance(@NonNull Context context, @NonNull String projectId, @NonNull Logger logger) {
50+
EventSQLiteOpenHelper sqLiteOpenHelper = new EventSQLiteOpenHelper(context, projectId, null, EventSQLiteOpenHelper.VERSION, LoggerFactory.getLogger(EventSQLiteOpenHelper.class));
5151
return new EventDAO(sqLiteOpenHelper, logger);
5252
}
5353

event-handler/src/main/java/com/optimizely/ab/android/event_handler/EventIntentService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public void onCreate() {
6363
OptlyStorage optlyStorage = new OptlyStorage(this);
6464
EventClient eventClient = new EventClient(new Client(optlyStorage,
6565
LoggerFactory.getLogger(Client.class)), LoggerFactory.getLogger(EventClient.class));
66-
EventDAO eventDAO = EventDAO.getInstance(this, LoggerFactory.getLogger(EventDAO.class));
66+
EventDAO eventDAO = EventDAO.getInstance(this, "1", LoggerFactory.getLogger(EventDAO.class));
6767
ServiceScheduler serviceScheduler = new ServiceScheduler(
6868
(AlarmManager) getSystemService(ALARM_SERVICE),
6969
new ServiceScheduler.PendingIntentFactory(this),

event-handler/src/main/java/com/optimizely/ab/android/event_handler/EventSQLiteOpenHelper.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import android.database.sqlite.SQLiteDatabase;
2222
import android.database.sqlite.SQLiteOpenHelper;
2323
import android.os.Build;
24+
import android.support.annotation.NonNull;
25+
import android.support.annotation.Nullable;
2426
import android.support.annotation.RequiresApi;
2527

2628
import org.slf4j.Logger;
@@ -31,7 +33,7 @@
3133
class EventSQLiteOpenHelper extends SQLiteOpenHelper {
3234

3335
static final int VERSION = 1;
34-
static final String DB_NAME = "optly-events";
36+
static final String DB_NAME = "optly-events-%s";
3537

3638
static final String SQL_CREATE_EVENT_TABLE =
3739
"CREATE TABLE " + EventTable.NAME + " (" +
@@ -43,17 +45,16 @@ class EventSQLiteOpenHelper extends SQLiteOpenHelper {
4345
private static final String SQL_DELETE_EVENT_TABLE =
4446
"DROP TABLE IF EXISTS " + EventTable.NAME;
4547

46-
private final Logger logger;
47-
48-
EventSQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, Logger logger) {
49-
super(context, name, factory, version);
50-
this.logger = logger;
51-
}
48+
@NonNull private final Logger logger;
49+
@NonNull private final String projectId;
50+
@NonNull private final Context context;
5251

5352
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
54-
EventSQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler, Logger logger) {
55-
super(context, name, factory, version, errorHandler);
53+
EventSQLiteOpenHelper(@NonNull Context context, @NonNull String projectId, @Nullable SQLiteDatabase.CursorFactory factory, int version, @NonNull Logger logger) {
54+
super(context, String.format(DB_NAME, projectId), factory, version, null);
5655
this.logger = logger;
56+
this.projectId = projectId;
57+
this.context = context;
5758
}
5859

5960
/**
@@ -62,6 +63,8 @@ class EventSQLiteOpenHelper extends SQLiteOpenHelper {
6263
*/
6364
@Override
6465
public void onCreate(SQLiteDatabase db) {
66+
// Deletes the old events db that stored events for all projects
67+
context.deleteDatabase("optly-events");
6568
db.execSQL(SQL_CREATE_EVENT_TABLE);
6669
logger.info("Created event table with SQL: {}", SQL_CREATE_EVENT_TABLE);
6770
}
@@ -73,6 +76,10 @@ public void onCreate(SQLiteDatabase db) {
7376

7477
@Override
7578
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
76-
// TODO Create an upgrade strategy once we actually upgrade the schema.
79+
80+
}
81+
82+
public String getDbName() {
83+
return String.format(DB_NAME, projectId);
7784
}
7885
}

0 commit comments

Comments
 (0)