mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-22 15:49:53 +01:00
Manipulate disappearing messages settings via settings screen
This commit is contained in:
@@ -29,6 +29,7 @@ import org.briarproject.briar.android.contact.add.remote.PendingContactListActiv
|
|||||||
import org.briarproject.briar.android.conversation.AliasDialogFragment;
|
import org.briarproject.briar.android.conversation.AliasDialogFragment;
|
||||||
import org.briarproject.briar.android.conversation.ConversationActivity;
|
import org.briarproject.briar.android.conversation.ConversationActivity;
|
||||||
import org.briarproject.briar.android.conversation.ConversationSettingsActivity;
|
import org.briarproject.briar.android.conversation.ConversationSettingsActivity;
|
||||||
|
import org.briarproject.briar.android.conversation.ConversationSettingsFragment;
|
||||||
import org.briarproject.briar.android.conversation.ImageActivity;
|
import org.briarproject.briar.android.conversation.ImageActivity;
|
||||||
import org.briarproject.briar.android.conversation.ImageFragment;
|
import org.briarproject.briar.android.conversation.ImageFragment;
|
||||||
import org.briarproject.briar.android.forum.CreateForumActivity;
|
import org.briarproject.briar.android.forum.CreateForumActivity;
|
||||||
@@ -237,4 +238,6 @@ public interface ActivityComponent {
|
|||||||
|
|
||||||
void inject(ImageFragment imageFragment);
|
void inject(ImageFragment imageFragment);
|
||||||
|
|
||||||
|
void inject(ConversationSettingsFragment conversationSettingsFragment);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,40 @@
|
|||||||
package org.briarproject.briar.android.conversation;
|
package org.briarproject.briar.android.conversation;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.contact.ContactId;
|
||||||
import org.briarproject.briar.R;
|
import org.briarproject.briar.R;
|
||||||
import org.briarproject.briar.android.activity.ActivityComponent;
|
import org.briarproject.briar.android.activity.ActivityComponent;
|
||||||
import org.briarproject.briar.android.activity.BriarActivity;
|
import org.briarproject.briar.android.activity.BriarActivity;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import androidx.appcompat.app.ActionBar;
|
import androidx.appcompat.app.ActionBar;
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
import androidx.lifecycle.ViewModelProviders;
|
||||||
|
|
||||||
|
import static org.briarproject.briar.android.conversation.ConversationActivity.CONTACT_ID;
|
||||||
|
|
||||||
public class ConversationSettingsActivity extends BriarActivity {
|
public class ConversationSettingsActivity extends BriarActivity {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ViewModelProvider.Factory viewModelFactory;
|
||||||
|
|
||||||
|
private ConversationViewModel viewModel;
|
||||||
|
|
||||||
|
private ContactId contactId;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle bundle) {
|
public void onCreate(Bundle bundle) {
|
||||||
super.onCreate(bundle);
|
super.onCreate(bundle);
|
||||||
|
|
||||||
|
Intent i = getIntent();
|
||||||
|
int id = i.getIntExtra(CONTACT_ID, -1);
|
||||||
|
if (id == -1) throw new IllegalStateException();
|
||||||
|
contactId = new ContactId(id);
|
||||||
|
|
||||||
ActionBar actionBar = getSupportActionBar();
|
ActionBar actionBar = getSupportActionBar();
|
||||||
if (actionBar != null) {
|
if (actionBar != null) {
|
||||||
actionBar.setHomeButtonEnabled(true);
|
actionBar.setHomeButtonEnabled(true);
|
||||||
@@ -22,6 +42,19 @@ public class ConversationSettingsActivity extends BriarActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setContentView(R.layout.activity_conversation_settings);
|
setContentView(R.layout.activity_conversation_settings);
|
||||||
|
|
||||||
|
viewModel = ViewModelProviders.of(this, viewModelFactory)
|
||||||
|
.get(ConversationViewModel.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
// Trigger loading of contact data, noop if data was loaded already.
|
||||||
|
//
|
||||||
|
// We can only start loading data *after* we are sure
|
||||||
|
// the user has signed in. After sign-in, onCreate() isn't run again.
|
||||||
|
if (signedIn()) viewModel.setContactId(contactId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,16 +1,120 @@
|
|||||||
package org.briarproject.briar.android.conversation;
|
package org.briarproject.briar.android.conversation;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.db.DatabaseExecutor;
|
||||||
|
import org.briarproject.bramble.api.db.DbException;
|
||||||
|
import org.briarproject.bramble.api.db.TransactionManager;
|
||||||
import org.briarproject.briar.R;
|
import org.briarproject.briar.R;
|
||||||
|
import org.briarproject.briar.api.autodelete.AutoDeleteManager;
|
||||||
|
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
import androidx.lifecycle.ViewModelProviders;
|
||||||
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceFragmentCompat;
|
import androidx.preference.PreferenceFragmentCompat;
|
||||||
|
import androidx.preference.SwitchPreference;
|
||||||
|
|
||||||
public class ConversationSettingsFragment extends PreferenceFragmentCompat {
|
import static java.util.logging.Level.WARNING;
|
||||||
|
import static org.briarproject.bramble.util.LogUtils.logException;
|
||||||
|
import static org.briarproject.briar.android.util.UiUtils.observeOnce;
|
||||||
|
import static org.briarproject.briar.api.autodelete.AutoDeleteConstants.NO_AUTO_DELETE_TIMER;
|
||||||
|
|
||||||
|
public class ConversationSettingsFragment extends PreferenceFragmentCompat
|
||||||
|
implements Preference.OnPreferenceChangeListener {
|
||||||
|
|
||||||
|
private static final String DM_ENABLE = "pref_key_disappearing_messages";
|
||||||
|
|
||||||
|
private static final Logger LOG =
|
||||||
|
Logger.getLogger(ConversationSettingsFragment.class.getName());
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ViewModelProvider.Factory viewModelFactory;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@DatabaseExecutor
|
||||||
|
Executor dbExecutor;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
TransactionManager db;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
AutoDeleteManager autoDeleteManager;
|
||||||
|
|
||||||
|
private ConversationSettingsActivity listener;
|
||||||
|
|
||||||
|
private SwitchPreference enableDisappearingMessages;
|
||||||
|
|
||||||
|
private volatile boolean disappearingMessages = false;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttach(Context context) {
|
||||||
|
super.onAttach(context);
|
||||||
|
listener = (ConversationSettingsActivity) context;
|
||||||
|
listener.getActivityComponent().inject(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||||
addPreferencesFromResource(R.xml.conversation_settings);
|
addPreferencesFromResource(R.xml.conversation_settings);
|
||||||
|
|
||||||
|
enableDisappearingMessages = findPreference(DM_ENABLE);
|
||||||
|
|
||||||
|
enableDisappearingMessages.setOnPreferenceChangeListener(this);
|
||||||
|
|
||||||
|
viewModel = ViewModelProviders.of(requireActivity(), viewModelFactory)
|
||||||
|
.get(ConversationViewModel.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ConversationViewModel viewModel;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
setSettingsEnabled(false);
|
||||||
|
loadSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setSettingsEnabled(boolean enabled) {
|
||||||
|
enableDisappearingMessages.setEnabled(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadSettings() {
|
||||||
|
observeOnce(viewModel.getContact(), this, c -> {
|
||||||
|
dbExecutor.execute(() -> {
|
||||||
|
try {
|
||||||
|
db.transaction(false, txn -> {
|
||||||
|
long timer = autoDeleteManager
|
||||||
|
.getAutoDeleteTimer(txn, c.getId());
|
||||||
|
disappearingMessages = timer != NO_AUTO_DELETE_TIMER;
|
||||||
|
});
|
||||||
|
displaySettings();
|
||||||
|
} catch (DbException e) {
|
||||||
|
logException(LOG, WARNING, e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void displaySettings() {
|
||||||
|
listener.runOnUiThreadUnlessDestroyed(() -> {
|
||||||
|
enableDisappearingMessages.setChecked(disappearingMessages);
|
||||||
|
setSettingsEnabled(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
if (preference == enableDisappearingMessages) {
|
||||||
|
boolean dmSetting = (Boolean) newValue;
|
||||||
|
viewModel.setAutoDeleteTimerEnabled(dmSetting);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:defaultValue="true"
|
android:defaultValue="true"
|
||||||
android:key="pref_key_lock"
|
android:key="pref_key_disappearing_messages"
|
||||||
android:summary="@string/disappearing_messages_summary"
|
android:summary="@string/disappearing_messages_summary"
|
||||||
android:title="@string/disappearing_messages_title"
|
android:title="@string/disappearing_messages_title"
|
||||||
app:iconSpaceReserved="false"/>
|
app:iconSpaceReserved="false"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user