use of com.onesignal.OSOutcomeEvent in project OneSignal-Android-SDK by OneSignal.
the class Dialog method createSendOutcomeAlertDialog.
public void createSendOutcomeAlertDialog(final String content) {
final View sendOutcomeAlertDialogView = layoutInflater.inflate(R.layout.send_outcome_alert_dialog_layout, null, false);
final CardView sendOutcomeDialogTitleCardView = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_card_view);
final RelativeLayout sendOutcomeDialogTitleRelativeLayout = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_relative_layout);
final TextView sendOutcomeDialogTitleTextView = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_text_view);
final ImageView sendOutcomeDialogTitleArrowImageView = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_arrow_image_view);
final RecyclerView sendOutcomeDialogSelectionRecyclerView = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_selection_recycler_view);
final LinearLayout sendOutcomeDialogSelectionContentLinearLayout = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_content_linear_layout);
final TextInputLayout sendOutcomeDialogNameTextInputLayout = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_name_text_input_layout);
final EditText sendOutcomeDialogNameEditText = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_name_edit_text);
final TextInputLayout sendOutcomeDialogValueTextInputLayout = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_value_text_input_layout);
final EditText sendOutcomeDialogValueEditText = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_value_edit_text);
final ProgressBar sendOutcomeDialogProgressBar = sendOutcomeAlertDialogView.findViewById(R.id.send_outcome_alert_dialog_progress_bar);
sendOutcomeDialogNameTextInputLayout.setHint("Name");
sendOutcomeDialogValueTextInputLayout.setHint("Value");
sendOutcomeDialogTitleTextView.setText(content);
font.applyFont(sendOutcomeDialogTitleTextView, font.saralaBold);
font.applyFont(sendOutcomeDialogNameTextInputLayout, font.saralaBold);
font.applyFont(sendOutcomeDialogValueTextInputLayout, font.saralaBold);
sendOutcomeDialogTitleCardView.setCardElevation(8f);
recyclerViewBuilder.setupRecyclerView(sendOutcomeDialogSelectionRecyclerView, 3, false, true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
sendOutcomeDialogSelectionRecyclerView.setLayoutManager(linearLayoutManager);
EnumSelectionRecyclerViewAdapter enumSelectionRecyclerViewAdapter = new EnumSelectionRecyclerViewAdapter(context, OutcomeEvent.values(), new EnumSelectionCallback() {
@Override
public void onSelection(String title) {
int nameVisibility = View.GONE;
int valueVisibility = View.GONE;
OutcomeEvent outcomeEvent = OutcomeEvent.enumFromTitleString(title);
if (outcomeEvent == null) {
Drawable arrow = context.getResources().getDrawable(R.drawable.ic_chevron_down_white_48dp);
sendOutcomeDialogTitleArrowImageView.setImageDrawable(arrow);
sendOutcomeDialogTitleCardView.setCardElevation(0f);
sendOutcomeDialogSelectionRecyclerView.setVisibility(View.GONE);
sendOutcomeDialogSelectionContentLinearLayout.setVisibility(View.GONE);
sendOutcomeDialogNameEditText.setVisibility(nameVisibility);
sendOutcomeDialogValueTextInputLayout.setVisibility(valueVisibility);
return;
}
switch(outcomeEvent) {
case OUTCOME:
case UNIQUE_OUTCOME:
nameVisibility = View.VISIBLE;
break;
case OUTCOME_WITH_VALUE:
nameVisibility = View.VISIBLE;
valueVisibility = View.VISIBLE;
break;
}
sendOutcomeDialogTitleTextView.setText(outcomeEvent.getTitle());
Drawable arrow = context.getResources().getDrawable(R.drawable.ic_chevron_down_white_48dp);
sendOutcomeDialogTitleArrowImageView.setImageDrawable(arrow);
sendOutcomeDialogTitleCardView.setCardElevation(0f);
sendOutcomeDialogSelectionRecyclerView.setVisibility(View.GONE);
sendOutcomeDialogSelectionContentLinearLayout.setVisibility(View.VISIBLE);
sendOutcomeDialogNameTextInputLayout.setVisibility(nameVisibility);
sendOutcomeDialogNameEditText.setVisibility(nameVisibility);
sendOutcomeDialogValueTextInputLayout.setVisibility(valueVisibility);
sendOutcomeDialogValueEditText.setVisibility(valueVisibility);
}
});
sendOutcomeDialogSelectionRecyclerView.setAdapter(enumSelectionRecyclerViewAdapter);
sendOutcomeDialogTitleRelativeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean showMenu = sendOutcomeDialogSelectionRecyclerView.getVisibility() == View.GONE;
Drawable arrow = context.getResources().getDrawable(showMenu ? R.drawable.ic_chevron_up_white_48dp : R.drawable.ic_chevron_down_white_48dp);
int menuVisibility = showMenu ? View.VISIBLE : View.GONE;
int contentVisibility = showMenu ? View.GONE : View.VISIBLE;
float shadow = showMenu ? 8f : 0f;
sendOutcomeDialogTitleArrowImageView.setImageDrawable(arrow);
sendOutcomeDialogTitleCardView.setCardElevation(shadow);
sendOutcomeDialogSelectionRecyclerView.setVisibility(menuVisibility);
sendOutcomeDialogSelectionContentLinearLayout.setVisibility(contentVisibility);
int nameVisibility = View.GONE;
int valueVisibility = View.GONE;
String selectedTitle = sendOutcomeDialogTitleTextView.getText().toString();
OutcomeEvent outcomeEvent = OutcomeEvent.enumFromTitleString(selectedTitle);
if (outcomeEvent == null) {
sendOutcomeDialogSelectionContentLinearLayout.setVisibility(View.GONE);
return;
}
if (!showMenu) {
switch(outcomeEvent) {
case OUTCOME:
case UNIQUE_OUTCOME:
nameVisibility = View.VISIBLE;
break;
case OUTCOME_WITH_VALUE:
nameVisibility = View.VISIBLE;
valueVisibility = View.VISIBLE;
break;
}
}
sendOutcomeDialogSelectionContentLinearLayout.setVisibility(nameVisibility);
sendOutcomeDialogNameEditText.setVisibility(nameVisibility);
sendOutcomeDialogValueTextInputLayout.setVisibility(valueVisibility);
sendOutcomeDialogValueEditText.setVisibility(valueVisibility);
}
});
final CustomAlertDialogBuilder sendOutcomeAlertDialog = new CustomAlertDialogBuilder(context, sendOutcomeAlertDialogView);
sendOutcomeAlertDialog.setView(sendOutcomeAlertDialogView);
sendOutcomeAlertDialog.setIsCancelable(true);
sendOutcomeAlertDialog.setCanceledOnTouchOutside(false);
sendOutcomeAlertDialog.setPositiveButton(Text.BUTTON_SEND, new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, int which) {
toggleUpdateAlertDialogAttributes(true);
String selectedTitle = sendOutcomeDialogTitleTextView.getText().toString();
OutcomeEvent outcomeEvent = OutcomeEvent.enumFromTitleString(selectedTitle);
if (outcomeEvent == null) {
toaster.makeCustomViewToast("Please select an outcome type!", ToastType.ERROR);
toggleUpdateAlertDialogAttributes(false);
return;
}
String name = sendOutcomeDialogNameEditText.getText().toString().trim();
String value = sendOutcomeDialogValueEditText.getText().toString().trim();
if (name.isEmpty()) {
toaster.makeCustomViewToast("Please enter an outcome name!", ToastType.ERROR);
toggleUpdateAlertDialogAttributes(false);
return;
}
switch(outcomeEvent) {
case OUTCOME:
OneSignal.sendOutcome(name, new OneSignal.OutcomeCallback() {
@Override
public void onSuccess(@Nullable OSOutcomeEvent outcomeEvent) {
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
toggleUpdateAlertDialogAttributes(false);
dialog.dismiss();
}
});
}
});
break;
case UNIQUE_OUTCOME:
OneSignal.sendUniqueOutcome(name, new OneSignal.OutcomeCallback() {
@Override
public void onSuccess(@Nullable OSOutcomeEvent outcomeEvent) {
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
toggleUpdateAlertDialogAttributes(false);
dialog.dismiss();
}
});
}
});
break;
case OUTCOME_WITH_VALUE:
if (value.isEmpty()) {
toaster.makeCustomViewToast("Please enter an outcome value!", ToastType.ERROR);
toggleUpdateAlertDialogAttributes(false);
return;
}
OneSignal.sendOutcomeWithValue(name, Float.parseFloat(value), new OneSignal.OutcomeCallback() {
@Override
public void onSuccess(@Nullable OSOutcomeEvent outcomeEvent) {
((Activity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
toggleUpdateAlertDialogAttributes(false);
dialog.dismiss();
}
});
}
});
break;
}
InterfaceUtil.hideKeyboardFrom(context, sendOutcomeAlertDialogView);
}
private void toggleUpdateAlertDialogAttributes(boolean disableAttributes) {
int progressVisibility = disableAttributes ? View.VISIBLE : View.GONE;
sendOutcomeDialogProgressBar.setVisibility(progressVisibility);
int buttonVisibility = disableAttributes ? View.GONE : View.VISIBLE;
sendOutcomeAlertDialog.getPositiveButtonElement().setVisibility(buttonVisibility);
sendOutcomeAlertDialog.getNegativeButtonElement().setVisibility(buttonVisibility);
sendOutcomeAlertDialog.getPositiveButtonElement().setEnabled(!disableAttributes);
sendOutcomeAlertDialog.getNegativeButtonElement().setEnabled(!disableAttributes);
sendOutcomeAlertDialog.setIsCancelable(!disableAttributes);
}
}).setNegativeButton(Text.BUTTON_CANCEL, null);
sendOutcomeAlertDialog.show();
}
use of com.onesignal.OSOutcomeEvent in project OneSignal-Android-SDK by OneSignal.
the class TestHelpers method getAllOutcomesRecordsDBv5.
static List<OSOutcomeEvent> getAllOutcomesRecordsDBv5(OneSignalDb db) {
;
Cursor cursor = db.query(MockOSOutcomeEventsTable.TABLE_NAME, null, null, null, // group by
null, // filter by row groups
null, // sort order, new to old
null, // limit
null);
List<OSOutcomeEvent> events = new ArrayList<>();
if (cursor.moveToFirst()) {
do {
String notificationIds = cursor.getString(cursor.getColumnIndex(MockOSOutcomeEventsTable.COLUMN_NAME_NOTIFICATION_IDS));
String name = cursor.getString(cursor.getColumnIndex(MockOSOutcomeEventsTable.COLUMN_NAME_NAME));
String sessionString = cursor.getString(cursor.getColumnIndex(MockOSOutcomeEventsTable.COLUMN_NAME_SESSION));
OSInfluenceType session = OSInfluenceType.fromString(sessionString);
long timestamp = cursor.getLong(cursor.getColumnIndex(MockOSOutcomeEventsTable.COLUMN_NAME_TIMESTAMP));
float weight = cursor.getFloat(cursor.getColumnIndex(MockOSOutcomeEventsTable.COLUMN_NAME_WEIGHT));
try {
OSOutcomeEvent event = new OSOutcomeEvent(session, new JSONArray(notificationIds), name, timestamp, weight);
events.add(event);
} catch (JSONException e) {
e.printStackTrace();
}
} while (cursor.moveToNext());
}
cursor.close();
return events;
}
use of com.onesignal.OSOutcomeEvent in project OneSignal-Android-SDK by OneSignal.
the class DatabaseRunner method shouldUpgradeDbFromV3ToV4.
@Test
public void shouldUpgradeDbFromV3ToV4() throws Exception {
// 1. Init DB as version 3
ShadowOneSignalDbHelper.DATABASE_VERSION = 3;
SQLiteDatabase writableDatabase = dbHelper.getSQLiteDatabaseWithRetries();
Cursor cursor = writableDatabase.rawQuery("SELECT name FROM sqlite_master WHERE type ='table' AND name='" + MockOSOutcomeEventsTable.TABLE_NAME + "'", null);
boolean exist = false;
if (cursor != null) {
exist = cursor.getCount() > 0;
cursor.close();
}
// 2. Table must not exist
assertFalse(exist);
writableDatabase.setVersion(3);
writableDatabase.close();
OSOutcomeEvent event = new OSOutcomeEvent(OSInfluenceType.UNATTRIBUTED, new JSONArray().put("notificationId"), "name", 0, 0);
ContentValues values = new ContentValues();
values.put(MockOSOutcomeEventsTable.COLUMN_NAME_NOTIFICATION_INFLUENCE_TYPE, event.getSession().toString().toLowerCase());
values.put(MockOSOutcomeEventsTable.COLUMN_NAME_NOTIFICATION_IDS, event.getNotificationIds().toString());
values.put(MockOSOutcomeEventsTable.COLUMN_NAME_NAME, event.getName());
values.put(MockOSOutcomeEventsTable.COLUMN_NAME_TIMESTAMP, event.getTimestamp());
values.put(MockOSOutcomeEventsTable.COLUMN_NAME_WEIGHT, event.getWeight());
// 3. Clear the cache of the DB so it reloads the file.
ShadowOneSignalDbHelper.restSetStaticFields();
ShadowOneSignalDbHelper.ignoreDuplicatedFieldsOnUpgrade = true;
// 4. Opening the DB will auto trigger the update.
List<OSOutcomeEvent> events = getAllOutcomesRecordsDBv5(dbHelper);
assertEquals(events.size(), 0);
writableDatabase = dbHelper.getSQLiteDatabaseWithRetries();
// 5. Table now must exist
writableDatabase.insert(MockOSOutcomeEventsTable.TABLE_NAME, null, values);
writableDatabase.close();
List<OSOutcomeEventDB> outcomeEvents = getAllOutcomesRecords(dbHelper);
assertEquals(outcomeEvents.size(), 1);
}
use of com.onesignal.OSOutcomeEvent in project OneSignal-Android-SDK by OneSignal.
the class DatabaseRunner method shouldUpgradeDbFromV7ToV8OutcomesTable.
@Test
public void shouldUpgradeDbFromV7ToV8OutcomesTable() {
// 1. Init DB as version 7
ShadowOneSignalDbHelper.DATABASE_VERSION = 7;
SQLiteDatabase writableDatabase = dbHelper.getSQLiteDatabaseWithRetries();
// Create table with the schema we had in DB v7
writableDatabase.execSQL(SQL_CREATE_OUTCOME_REVISION2_ENTRIES);
writableDatabase.execSQL(SQL_CREATE_UNIQUE_OUTCOME_REVISION1_ENTRIES);
Cursor cursor = writableDatabase.rawQuery("SELECT name FROM sqlite_master WHERE type ='table' AND name='" + MockOSCachedUniqueOutcomeTable.TABLE_NAME_V2 + "'", null);
boolean exist = false;
if (cursor != null) {
exist = cursor.getCount() > 0;
cursor.close();
}
// 2. Table must not exist
assertFalse(exist);
// Set data to check that modification on table keep data
OSOutcomeEventDB outcomeEventDB = new OSOutcomeEventDB(OSInfluenceType.DIRECT, OSInfluenceType.INDIRECT, "iam_id", "notificationId", "outcome_outcome", 1234, (float) 1234);
ContentValues outcomeValues = new ContentValues();
outcomeValues.put(MockOSOutcomeEventsTable.COLUMN_NAME_NOTIFICATION_IDS, outcomeEventDB.getNotificationIds().toString());
outcomeValues.put(MockOSOutcomeEventsTable.COLUMN_NAME_SESSION, outcomeEventDB.getNotificationInfluenceType().toString());
outcomeValues.put(MockOSOutcomeEventsTable.COLUMN_NAME_NAME, outcomeEventDB.getName());
outcomeValues.put(MockOSOutcomeEventsTable.COLUMN_NAME_WEIGHT, outcomeEventDB.getWeight());
outcomeValues.put(MockOSOutcomeEventsTable.COLUMN_NAME_TIMESTAMP, outcomeEventDB.getTimestamp());
writableDatabase.insert(MockOSOutcomeEventsTable.TABLE_NAME, null, outcomeValues);
List<OSOutcomeEvent> outcomesSavedBeforeUpdate = getAllOutcomesRecordsDBv5(dbHelper);
assertEquals(1, outcomesSavedBeforeUpdate.size());
writableDatabase = dbHelper.getSQLiteDatabaseWithRetries();
writableDatabase.setVersion(7);
writableDatabase.close();
// 3. Clear the cache of the DB so it reloads the file and next getSQLiteDatabaseWithRetries will auto trigger the update
ShadowOneSignalDbHelper.restSetStaticFields();
ShadowOneSignalDbHelper.ignoreDuplicatedFieldsOnUpgrade = true;
// 4. Opening the DB will auto trigger the update to DB version 8.
writableDatabase = dbHelper.getSQLiteDatabaseWithRetries();
List<OSOutcomeEventDB> outcomesSaved = getAllOutcomesRecords(dbHelper);
assertEquals(1, outcomesSaved.size());
OSOutcomeEventDB outcomeSaved = outcomesSaved.get(0);
assertEquals(outcomeEventDB.getName(), outcomeSaved.getName());
assertEquals(outcomeEventDB.getWeight(), outcomeSaved.getWeight());
assertEquals(outcomeEventDB.getTimestamp(), outcomeSaved.getTimestamp());
assertEquals(outcomeEventDB.getNotificationIds(), outcomeSaved.getNotificationIds());
assertEquals(outcomeEventDB.getNotificationInfluenceType(), outcomeSaved.getNotificationInfluenceType());
assertEquals(new JSONArray(), outcomeSaved.getIamIds());
assertEquals(OSInfluenceType.UNATTRIBUTED, outcomeSaved.getIamInfluenceType());
}
Aggregations