diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java index 49f5578b5..04e605894 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java @@ -41,7 +41,6 @@ import org.briarproject.briar.api.blog.event.BlogPostAddedEvent; import org.briarproject.briar.api.conversation.event.ConversationMessageReceivedEvent; import org.briarproject.briar.api.forum.event.ForumPostReceivedEvent; import org.briarproject.briar.api.privategroup.event.GroupMessageAddedEvent; -import org.briarproject.briar.api.remotewipe.RemoteWipeActivatedEvent; import java.util.Set; import java.util.concurrent.Callable; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/remotewipe/RemoteWipeActivatedActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/remotewipe/RemoteWipeActivatedActivity.java index df76a0cb7..6f04d4de3 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/remotewipe/RemoteWipeActivatedActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/remotewipe/RemoteWipeActivatedActivity.java @@ -6,19 +6,36 @@ import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; import javax.annotation.Nullable; +import javax.inject.Inject; + +import androidx.lifecycle.ViewModelProvider; public class RemoteWipeActivatedActivity extends BriarActivity { + @Inject + ViewModelProvider.Factory viewModelFactory; + RemoteWipeActivatedViewModel viewModel; + + @Override + public void injectActivity(ActivityComponent component) { + component.inject(this); + + viewModel = new ViewModelProvider(this, viewModelFactory) + .get(RemoteWipeActivatedViewModel.class); + } + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - signOut(true, true); - } + viewModel.getConfirmSent() + .observeEvent(this, confirmed -> { + if (confirmed) { + signOut(true, true); + } + }); - @Override - public void injectActivity(ActivityComponent component) { - component.inject(this); + viewModel.sendConfirmMessages(); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/remotewipe/RemoteWipeActivatedViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/remotewipe/RemoteWipeActivatedViewModel.java index 4a749b30d..5666979d8 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/remotewipe/RemoteWipeActivatedViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/remotewipe/RemoteWipeActivatedViewModel.java @@ -1,2 +1,62 @@ -package org.briarproject.briar.android.remotewipe;public class RemoteWipeActivatedViewModel { +package org.briarproject.briar.android.remotewipe; + +import android.app.Application; + +import org.briarproject.bramble.api.FormatException; +import org.briarproject.bramble.api.db.DatabaseComponent; +import org.briarproject.bramble.api.db.DbException; +import org.briarproject.bramble.api.event.Event; +import org.briarproject.bramble.api.event.EventBus; +import org.briarproject.bramble.api.event.EventListener; +import org.briarproject.bramble.api.sync.event.MessagesSentEvent; +import org.briarproject.briar.android.viewmodel.LiveEvent; +import org.briarproject.briar.android.viewmodel.MutableLiveEvent; +import org.briarproject.briar.api.remotewipe.RemoteWipeManager; + +import javax.inject.Inject; + +import androidx.annotation.NonNull; +import androidx.lifecycle.AndroidViewModel; + +public class RemoteWipeActivatedViewModel extends AndroidViewModel implements + EventListener { + private final RemoteWipeManager remoteWipeManager; + private final DatabaseComponent db; + private final MutableLiveEvent confirmSent = + new MutableLiveEvent<>(); + + @Inject + RemoteWipeActivatedViewModel( + @NonNull Application application, + RemoteWipeManager remoteWipeManager, + DatabaseComponent db, EventBus eventBus) { + super(application); + this.remoteWipeManager = remoteWipeManager; + this.db = db; + eventBus.addListener(this); + } + + public void sendConfirmMessages() { + try { + db.transaction(false, + remoteWipeManager::sendConfirmMessages); + } catch (DbException | FormatException e) { + System.out.println(e); + // If there is a problem sending the messages, just wipe + confirmSent.postEvent(true); + } + } + + public LiveEvent getConfirmSent() { + return confirmSent; + } + + @Override + public void eventOccurred(Event e) { + // As soon as we know a message is sent, we can wipe + if (e instanceof MessagesSentEvent) { + confirmSent.postEvent(true); + } + } } + diff --git a/briar-android/src/main/java/org/briarproject/briar/android/remotewipe/RemoteWipeModule.java b/briar-android/src/main/java/org/briarproject/briar/android/remotewipe/RemoteWipeModule.java index 4d1de72e8..a42260266 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/remotewipe/RemoteWipeModule.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/remotewipe/RemoteWipeModule.java @@ -29,4 +29,10 @@ public abstract class RemoteWipeModule { @ViewModelKey(RevokeRemoteWipeViewModel.class) abstract ViewModel bindRevokeRemoteWipeViewModel( RevokeRemoteWipeViewModel RevokeRemoteWipeViewModel); + + @Binds + @IntoMap + @ViewModelKey(RemoteWipeActivatedViewModel.class) + abstract ViewModel bindRemoteWipeActivatedViewModel( + RemoteWipeActivatedViewModel remoteWipeActivatedViewModel); }