mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 02:39:05 +01:00
Start migrating the PreferenceFragment to regular Fragment with ConstrainedLayout
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingHorizontal="@dimen/margin_large">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/imageViewBomb"
|
||||
android:layout_width="64dp"
|
||||
android:layout_height="64dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:src="@drawable/ic_bomb"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/barrier"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:tint="?attr/colorControlNormal" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textViewExplanation"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/disappearing_messages_explanation_short"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/imageViewBomb" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/buttonLearnMore"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/learn_more"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textViewExplanation" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/headlineSetting"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/disappearing_messages_title"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/buttonLearnMore" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textSetting"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/disappearing_messages_summary"
|
||||
app:layout_constraintEnd_toStartOf="@id/switchDisappearingMessages"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/headlineSetting" />
|
||||
|
||||
<Switch
|
||||
android:id="@+id/switchDisappearingMessages"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/textSetting"
|
||||
app:layout_constraintTop_toBottomOf="@+id/buttonLearnMore" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -1,19 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<Preference
|
||||
android:key="pref_key_disappearing_messages_explanation"
|
||||
android:layout="@layout/conversation_settings_disappearing_messages_explanation"
|
||||
android:selectable="false" />
|
||||
|
||||
<org.briarproject.briar.android.conversation.LinkPreference android:key="pref_key_disappearing_messages_learn_more" />
|
||||
|
||||
<SwitchPreference
|
||||
android:defaultValue="true"
|
||||
android:key="pref_key_disappearing_messages"
|
||||
android:summary="@string/disappearing_messages_summary"
|
||||
android:title="@string/disappearing_messages_title"
|
||||
app:iconSpaceReserved="false" />
|
||||
|
||||
</PreferenceScreen>
|
||||
Reference in New Issue
Block a user