diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationSettingsActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationSettingsActivity.java index 44917d12e..a26b47929 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationSettingsActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationSettingsActivity.java @@ -10,6 +10,7 @@ import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; +import org.briarproject.briar.android.fragment.BaseFragment.BaseFragmentListener; import javax.inject.Inject; @@ -19,7 +20,8 @@ import androidx.lifecycle.ViewModelProviders; import static org.briarproject.briar.android.conversation.ConversationActivity.CONTACT_ID; -public class ConversationSettingsActivity extends BriarActivity { +public class ConversationSettingsActivity extends BriarActivity implements + BaseFragmentListener { @Inject ViewModelProvider.Factory viewModelFactory; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationSettingsFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationSettingsFragment.java index c57b97690..cd3de1883 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationSettingsFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationSettingsFragment.java @@ -2,37 +2,40 @@ package org.briarproject.briar.android.conversation; import android.content.Context; import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Switch; import org.briarproject.bramble.api.db.DatabaseExecutor; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.db.TransactionManager; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; +import org.briarproject.briar.android.fragment.BaseFragment; import org.briarproject.briar.api.autodelete.AutoDeleteManager; import java.util.concurrent.Executor; import java.util.logging.Logger; +import javax.annotation.Nullable; import javax.inject.Inject; import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProviders; -import androidx.preference.Preference; -import androidx.preference.PreferenceFragmentCompat; -import androidx.preference.SwitchPreference; 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 { +@MethodsNotNullByDefault +@ParametersNotNullByDefault +public class ConversationSettingsFragment extends BaseFragment { - private static final String DM_ENABLE = "pref_key_disappearing_messages"; - private static final String DM_EXPLANATION = - "pref_key_disappearing_messages_explanation"; - private static final String DM_LEARN_MORE = - "pref_key_disappearing_messages_learn_more"; + public static final String TAG = + ConversationSettingsFragment.class.getName(); private static final Logger LOG = Logger.getLogger(ConversationSettingsFragment.class.getName()); @@ -52,10 +55,15 @@ public class ConversationSettingsFragment extends PreferenceFragmentCompat private ConversationSettingsActivity listener; - private SwitchPreference enableDisappearingMessages; + private Switch switchDisappearingMessages; private volatile boolean disappearingMessages = false; + @Override + public String getUniqueTag() { + return TAG; + } + @Override public void onAttach(Context context) { super.onAttach(context); @@ -64,15 +72,25 @@ public class ConversationSettingsFragment extends PreferenceFragmentCompat } @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - addPreferencesFromResource(R.xml.conversation_settings); + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View contentView = + inflater.inflate(R.layout.fragment_conversation_settings, + container, false); - enableDisappearingMessages = findPreference(DM_ENABLE); + switchDisappearingMessages = + contentView.findViewById(R.id.switchDisappearingMessages); - enableDisappearingMessages.setOnPreferenceChangeListener(this); + switchDisappearingMessages + .setOnCheckedChangeListener((button, value) -> { + viewModel.setAutoDeleteTimerEnabled(value); + }); viewModel = ViewModelProviders.of(requireActivity(), viewModelFactory) .get(ConversationViewModel.class); + + return contentView; } private ConversationViewModel viewModel; @@ -80,14 +98,10 @@ public class ConversationSettingsFragment extends PreferenceFragmentCompat @Override public void onStart() { super.onStart(); - setSettingsEnabled(false); + switchDisappearingMessages.setEnabled(false); loadSettings(); } - private void setSettingsEnabled(boolean enabled) { - enableDisappearingMessages.setEnabled(enabled); - } - private void loadSettings() { observeOnce(viewModel.getContact(), this, c -> { dbExecutor.execute(() -> { @@ -107,18 +121,9 @@ public class ConversationSettingsFragment extends PreferenceFragmentCompat private void displaySettings() { listener.runOnUiThreadUnlessDestroyed(() -> { - enableDisappearingMessages.setChecked(disappearingMessages); - setSettingsEnabled(true); + switchDisappearingMessages.setChecked(disappearingMessages); + switchDisappearingMessages.setEnabled(true); }); } - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - if (preference == enableDisappearingMessages) { - boolean dmSetting = (Boolean) newValue; - viewModel.setAutoDeleteTimerEnabled(dmSetting); - } - return true; - } - } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/LinkPreference.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/LinkPreference.java deleted file mode 100644 index 0ee8ce861..000000000 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/LinkPreference.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.briarproject.briar.android.conversation; - -import android.content.Context; -import android.text.SpannableStringBuilder; -import android.text.Spanned; -import android.text.style.URLSpan; -import android.util.AttributeSet; -import android.widget.TextView; - -import org.briarproject.briar.R; - -import androidx.preference.Preference; -import androidx.preference.PreferenceViewHolder; - -class LinkPreference extends Preference { - - public LinkPreference(Context context, - AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - init(); - } - - public LinkPreference(Context context, AttributeSet attrs, - int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(); - } - - public LinkPreference(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - public LinkPreference(Context context) { - super(context); - init(); - } - - private void init() { - setLayoutResource( - R.layout.conversation_settings_disappearing_messages_learn_more); - } - - @Override - public void onBindViewHolder(PreferenceViewHolder holder) { - super.onBindViewHolder(holder); - TextView link = (TextView) holder.findViewById(R.id.link); - - SpannableStringBuilder ssb = new SpannableStringBuilder(); - ssb.append(link.getText()); - ssb.setSpan(new URLSpan("#"), 0, ssb.length(), - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - link.setText(ssb, TextView.BufferType.SPANNABLE); - } - -} diff --git a/briar-android/src/main/res/layout/fragment_conversation_settings.xml b/briar-android/src/main/res/layout/fragment_conversation_settings.xml new file mode 100644 index 000000000..377282d71 --- /dev/null +++ b/briar-android/src/main/res/layout/fragment_conversation_settings.xml @@ -0,0 +1,66 @@ + + + + + + + +