Skip to content

Commit 2c20523

Browse files
committed
add remove collection dialog and logic
1 parent a38e0e5 commit 2c20523

7 files changed

Lines changed: 200 additions & 1 deletion

File tree

Examples/OneSignalDemoV2/app/src/main/java/com/onesignal/sdktest/data/repository/OneSignalRepository.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,13 @@ class OneSignalRepository {
9191
OneSignal.User.removeTag(key)
9292
}
9393

94+
fun removeTags(keys: Collection<String>) {
95+
Log.d(TAG, "Removing tags: $keys")
96+
if (keys.isNotEmpty()) {
97+
OneSignal.User.removeTags(keys)
98+
}
99+
}
100+
94101
fun getTags(): Map<String, String> {
95102
return OneSignal.User.getTags()
96103
}

Examples/OneSignalDemoV2/app/src/main/java/com/onesignal/sdktest/ui/main/MainActivity.kt

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import android.view.View
1010
import android.widget.AdapterView
1111
import android.widget.ArrayAdapter
1212
import android.widget.Button
13+
import android.widget.CheckBox
1314
import android.widget.EditText
1415
import android.widget.ImageButton
1516
import android.widget.LinearLayout
@@ -197,6 +198,13 @@ class MainActivity : AppCompatActivity() {
197198
}
198199
}
199200

201+
binding.btnRemoveAliases.setOnClickListener {
202+
val items = viewModel.aliases.value ?: emptyList()
203+
showRemoveMultiDialog(getString(R.string.remove_aliases_title), items) { keys ->
204+
viewModel.removeSelectedAliases(keys)
205+
}
206+
}
207+
200208
binding.btnRemoveAllAliases.setOnClickListener {
201209
viewModel.removeAliases()
202210
}
@@ -225,6 +233,13 @@ class MainActivity : AppCompatActivity() {
225233
}
226234
}
227235

236+
binding.btnRemoveTags.setOnClickListener {
237+
val items = viewModel.tags.value ?: emptyList()
238+
showRemoveMultiDialog(getString(R.string.remove_tags_title), items) { keys ->
239+
viewModel.removeSelectedTags(keys)
240+
}
241+
}
242+
228243
binding.btnAddTrigger.setOnClickListener {
229244
showAddPairDialog(getString(R.string.add_trigger_title)) { key, value ->
230245
viewModel.addTrigger(key, value)
@@ -237,6 +252,13 @@ class MainActivity : AppCompatActivity() {
237252
}
238253
}
239254

255+
binding.btnRemoveTriggers.setOnClickListener {
256+
val items = viewModel.triggers.value ?: emptyList()
257+
showRemoveMultiDialog(getString(R.string.remove_triggers_title), items) { keys ->
258+
viewModel.removeSelectedTriggers(keys)
259+
}
260+
}
261+
240262
binding.btnClearTriggers.setOnClickListener {
241263
viewModel.clearTriggers()
242264
}
@@ -325,6 +347,7 @@ class MainActivity : AppCompatActivity() {
325347
val hasItems = aliases.isNotEmpty()
326348
binding.rvAliases.visibility = if (hasItems) View.VISIBLE else View.GONE
327349
binding.tvNoAliases.visibility = if (hasItems) View.GONE else View.VISIBLE
350+
binding.layoutRemoveAliases.visibility = if (hasItems) View.VISIBLE else View.GONE
328351
binding.layoutRemoveAllAliases.visibility = if (hasItems) View.VISIBLE else View.GONE
329352
}
330353

@@ -347,14 +370,16 @@ class MainActivity : AppCompatActivity() {
347370
val hasItems = tags.isNotEmpty()
348371
binding.rvTags.visibility = if (hasItems) View.VISIBLE else View.GONE
349372
binding.tvNoTags.visibility = if (hasItems) View.GONE else View.VISIBLE
373+
binding.layoutRemoveTags.visibility = if (hasItems) View.VISIBLE else View.GONE
350374
}
351375

352376
// Triggers
353377
viewModel.triggers.observe(this) { triggers ->
354378
triggersAdapter.submitList(triggers)
355379
binding.rvTriggers.visibility = if (triggers.isNotEmpty()) View.VISIBLE else View.GONE
356380
binding.tvNoTriggers.visibility = if (triggers.isEmpty()) View.VISIBLE else View.GONE
357-
// Show Clear Triggers when at least 1 trigger exists
381+
// Show Remove/Clear Triggers when at least 1 trigger exists
382+
binding.layoutRemoveTriggers.visibility = if (triggers.isNotEmpty()) View.VISIBLE else View.GONE
358383
binding.layoutClearTriggers.visibility = if (triggers.isNotEmpty()) View.VISIBLE else View.GONE
359384
}
360385

@@ -535,6 +560,40 @@ class MainActivity : AppCompatActivity() {
535560
dialog.show()
536561
}
537562

563+
private fun showRemoveMultiDialog(
564+
title: String,
565+
items: List<Pair<String, String>>,
566+
onConfirm: (Collection<String>) -> Unit
567+
) {
568+
val dialogView = layoutInflater.inflate(R.layout.dialog_remove_multi, null)
569+
val container = dialogView.findViewById<LinearLayout>(R.id.checkboxes_container)
570+
571+
val checkboxes = mutableListOf<Pair<CheckBox, String>>()
572+
573+
for ((key, value) in items) {
574+
val rowView = LayoutInflater.from(this)
575+
.inflate(R.layout.item_dialog_checkbox_row, container, false)
576+
val cb = rowView.findViewById<CheckBox>(R.id.cb_item)
577+
cb.text = "$key: $value"
578+
container.addView(rowView)
579+
checkboxes.add(Pair(cb, key))
580+
}
581+
582+
AlertDialog.Builder(this, R.style.AlertDialogTheme)
583+
.setTitle(title)
584+
.setView(dialogView)
585+
.setPositiveButton(R.string.confirm) { _, _ ->
586+
val selectedKeys = checkboxes
587+
.filter { it.first.isChecked }
588+
.map { it.second }
589+
if (selectedKeys.isNotEmpty()) {
590+
onConfirm(selectedKeys)
591+
}
592+
}
593+
.setNegativeButton(R.string.cancel, null)
594+
.show()
595+
}
596+
538597
private fun showSingleInputDialog(label: String, onAdd: (String) -> Unit) {
539598
val dialogView = layoutInflater.inflate(R.layout.dialog_single_input, null)
540599
val etInput = dialogView.findViewById<EditText>(R.id.et_input)

Examples/OneSignalDemoV2/app/src/main/java/com/onesignal/sdktest/ui/main/MainViewModel.kt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,17 @@ class MainViewModel(application: Application) : AndroidViewModel(application), I
374374
}
375375
}
376376

377+
fun removeSelectedAliases(labels: Collection<String>) {
378+
viewModelScope.launch(Dispatchers.IO) {
379+
repository.removeAliases(labels)
380+
withContext(Dispatchers.Main) {
381+
aliasesList.removeAll { it.first in labels }
382+
refreshAliases()
383+
showToast("${labels.size} alias(es) removed")
384+
}
385+
}
386+
}
387+
377388
// Email operations
378389
fun addEmail(email: String) {
379390
viewModelScope.launch(Dispatchers.IO) {
@@ -446,6 +457,16 @@ class MainViewModel(application: Application) : AndroidViewModel(application), I
446457
}
447458
}
448459

460+
fun removeSelectedTags(keys: Collection<String>) {
461+
viewModelScope.launch(Dispatchers.IO) {
462+
repository.removeTags(keys)
463+
withContext(Dispatchers.Main) {
464+
loadExistingTags()
465+
showToast("${keys.size} tag(s) removed")
466+
}
467+
}
468+
}
469+
449470
fun removeTag(key: String) {
450471
viewModelScope.launch(Dispatchers.IO) {
451472
repository.removeTag(key)
@@ -484,6 +505,17 @@ class MainViewModel(application: Application) : AndroidViewModel(application), I
484505
}
485506
}
486507

508+
fun removeSelectedTriggers(keys: Collection<String>) {
509+
viewModelScope.launch(Dispatchers.IO) {
510+
repository.clearTriggers(keys)
511+
withContext(Dispatchers.Main) {
512+
triggersList.removeAll { it.first in keys }
513+
refreshTriggers()
514+
showToast("${keys.size} trigger(s) removed")
515+
}
516+
}
517+
}
518+
487519
fun removeTrigger(key: String) {
488520
viewModelScope.launch(Dispatchers.IO) {
489521
repository.removeTrigger(key)

Examples/OneSignalDemoV2/app/src/main/res/layout/activity_main.xml

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,29 @@
720720
android:textColor="@android:color/white"
721721
android:background="@color/colorPrimary"/>
722722

723+
<LinearLayout
724+
android:id="@+id/layout_remove_aliases"
725+
android:layout_width="match_parent"
726+
android:layout_height="wrap_content"
727+
android:orientation="vertical"
728+
android:visibility="gone">
729+
730+
<View
731+
android:layout_width="match_parent"
732+
android:layout_height="1dp"
733+
android:background="@color/colorDivider"/>
734+
735+
<Button
736+
android:id="@+id/btn_remove_aliases"
737+
android:layout_width="match_parent"
738+
android:layout_height="56dp"
739+
android:text="@string/remove_aliases"
740+
android:textSize="19sp"
741+
android:textColor="@android:color/white"
742+
android:background="@color/colorRed"/>
743+
744+
</LinearLayout>
745+
723746
<LinearLayout
724747
android:id="@+id/layout_remove_all_aliases"
725748
android:layout_width="match_parent"
@@ -1021,6 +1044,29 @@
10211044
android:textColor="@android:color/white"
10221045
android:background="@color/colorPrimary"/>
10231046

1047+
<LinearLayout
1048+
android:id="@+id/layout_remove_tags"
1049+
android:layout_width="match_parent"
1050+
android:layout_height="wrap_content"
1051+
android:orientation="vertical"
1052+
android:visibility="gone">
1053+
1054+
<View
1055+
android:layout_width="match_parent"
1056+
android:layout_height="1dp"
1057+
android:background="@color/colorDivider"/>
1058+
1059+
<Button
1060+
android:id="@+id/btn_remove_tags"
1061+
android:layout_width="match_parent"
1062+
android:layout_height="56dp"
1063+
android:text="@string/remove_tags"
1064+
android:textSize="19sp"
1065+
android:textColor="@android:color/white"
1066+
android:background="@color/colorRed"/>
1067+
1068+
</LinearLayout>
1069+
10241070
</LinearLayout>
10251071

10261072
</androidx.cardview.widget.CardView>
@@ -1170,6 +1216,29 @@
11701216
android:textColor="@android:color/white"
11711217
android:background="@color/colorPrimary"/>
11721218

1219+
<LinearLayout
1220+
android:id="@+id/layout_remove_triggers"
1221+
android:layout_width="match_parent"
1222+
android:layout_height="wrap_content"
1223+
android:orientation="vertical"
1224+
android:visibility="gone">
1225+
1226+
<View
1227+
android:layout_width="match_parent"
1228+
android:layout_height="1dp"
1229+
android:background="@color/colorDivider"/>
1230+
1231+
<Button
1232+
android:id="@+id/btn_remove_triggers"
1233+
android:layout_width="match_parent"
1234+
android:layout_height="56dp"
1235+
android:text="@string/remove_triggers"
1236+
android:textSize="19sp"
1237+
android:textColor="@android:color/white"
1238+
android:background="@color/colorRed"/>
1239+
1240+
</LinearLayout>
1241+
11731242
<LinearLayout
11741243
android:id="@+id/layout_clear_triggers"
11751244
android:layout_width="match_parent"
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:layout_width="match_parent"
4+
android:layout_height="wrap_content"
5+
android:maxHeight="400dp"
6+
android:padding="16dp">
7+
8+
<LinearLayout
9+
android:id="@+id/checkboxes_container"
10+
android:layout_width="match_parent"
11+
android:layout_height="wrap_content"
12+
android:orientation="vertical" />
13+
14+
</ScrollView>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:id="@+id/cb_item"
4+
android:layout_width="match_parent"
5+
android:layout_height="wrap_content"
6+
android:paddingStart="8dp"
7+
android:paddingEnd="8dp"
8+
android:paddingTop="10dp"
9+
android:paddingBottom="10dp"
10+
android:textSize="15sp"
11+
android:textColor="@color/colorDarkText" />

Examples/OneSignalDemoV2/app/src/main/res/values/strings.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<string name="no_aliases_added">No Aliases Added</string>
3030
<string name="add_alias">ADD ALIAS</string>
3131
<string name="add_aliases">ADD ALIASES</string>
32+
<string name="remove_aliases">REMOVE ALIASES</string>
3233
<string name="remove_all_aliases">REMOVE ALL ALIASES</string>
3334

3435
<!-- Push -->
@@ -54,6 +55,7 @@
5455
<string name="no_tags_added">No Tags Added</string>
5556
<string name="add_tag">ADD TAG</string>
5657
<string name="add_tags">ADD TAGS</string>
58+
<string name="remove_tags">REMOVE TAGS</string>
5759

5860
<!-- Outcome Events -->
5961
<string name="outcome_events">Outcome Events</string>
@@ -77,6 +79,7 @@
7779
<string name="no_triggers_added">No Triggers Added</string>
7880
<string name="add_trigger">ADD TRIGGER</string>
7981
<string name="add_triggers">ADD TRIGGERS</string>
82+
<string name="remove_triggers">REMOVE TRIGGERS</string>
8083
<string name="clear_triggers">CLEAR TRIGGERS</string>
8184

8285
<!-- Track Event -->
@@ -122,4 +125,8 @@
122125
<string name="add_trigger_title">Add Trigger</string>
123126
<string name="add_triggers_title">Add Triggers</string>
124127
<string name="add_row">+ ADD ROW</string>
128+
<string name="remove_aliases_title">Remove Aliases</string>
129+
<string name="remove_tags_title">Remove Tags</string>
130+
<string name="remove_triggers_title">Remove Triggers</string>
131+
<string name="confirm">REMOVE</string>
125132
</resources>

0 commit comments

Comments
 (0)