mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-17 13:19:52 +01:00
Add a minimal MailboxStatusFragment
This commit is contained in:
@@ -46,6 +46,7 @@ import org.briarproject.briar.android.logging.CachingLogHandler;
|
|||||||
import org.briarproject.briar.android.login.SignInReminderReceiver;
|
import org.briarproject.briar.android.login.SignInReminderReceiver;
|
||||||
import org.briarproject.briar.android.mailbox.ErrorFragment;
|
import org.briarproject.briar.android.mailbox.ErrorFragment;
|
||||||
import org.briarproject.briar.android.mailbox.MailboxScanFragment;
|
import org.briarproject.briar.android.mailbox.MailboxScanFragment;
|
||||||
|
import org.briarproject.briar.android.mailbox.MailboxStatusFragment;
|
||||||
import org.briarproject.briar.android.mailbox.OfflineFragment;
|
import org.briarproject.briar.android.mailbox.OfflineFragment;
|
||||||
import org.briarproject.briar.android.mailbox.SetupDownloadFragment;
|
import org.briarproject.briar.android.mailbox.SetupDownloadFragment;
|
||||||
import org.briarproject.briar.android.removabledrive.ChooserFragment;
|
import org.briarproject.briar.android.removabledrive.ChooserFragment;
|
||||||
@@ -251,4 +252,6 @@ public interface AndroidComponent
|
|||||||
void inject(OfflineFragment offlineFragment);
|
void inject(OfflineFragment offlineFragment);
|
||||||
|
|
||||||
void inject(ErrorFragment errorFragment);
|
void inject(ErrorFragment errorFragment);
|
||||||
|
|
||||||
|
void inject(MailboxStatusFragment mailboxStatusFragment);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,8 @@ package org.briarproject.briar.android.mailbox;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState;
|
import org.briarproject.bramble.api.mailbox.MailboxPairingState;
|
||||||
import org.briarproject.bramble.api.mailbox.MailboxStatus;
|
|
||||||
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||||
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
import org.briarproject.briar.R;
|
import org.briarproject.briar.R;
|
||||||
@@ -23,7 +21,6 @@ import androidx.lifecycle.ViewModelProvider;
|
|||||||
|
|
||||||
import static android.view.View.INVISIBLE;
|
import static android.view.View.INVISIBLE;
|
||||||
import static android.view.View.VISIBLE;
|
import static android.view.View.VISIBLE;
|
||||||
import static android.widget.Toast.LENGTH_LONG;
|
|
||||||
import static org.briarproject.briar.android.util.UiUtils.showFragment;
|
import static org.briarproject.briar.android.util.UiUtils.showFragment;
|
||||||
|
|
||||||
@MethodsNotNullByDefault
|
@MethodsNotNullByDefault
|
||||||
@@ -66,7 +63,7 @@ public class MailboxActivity extends BriarActivity {
|
|||||||
} else if (state instanceof MailboxState.OfflineWhenPairing) {
|
} else if (state instanceof MailboxState.OfflineWhenPairing) {
|
||||||
onOffline();
|
onOffline();
|
||||||
} else if (state instanceof MailboxState.IsPaired) {
|
} else if (state instanceof MailboxState.IsPaired) {
|
||||||
onIsPaired(((MailboxState.IsPaired) state).mailboxStatus);
|
onIsPaired();
|
||||||
} else {
|
} else {
|
||||||
throw new AssertionError("Unknown state: " + state);
|
throw new AssertionError("Unknown state: " + state);
|
||||||
}
|
}
|
||||||
@@ -167,10 +164,10 @@ public class MailboxActivity extends BriarActivity {
|
|||||||
OfflineFragment.TAG);
|
OfflineFragment.TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onIsPaired(MailboxStatus mailboxStatus) {
|
private void onIsPaired() {
|
||||||
progressBar.setVisibility(INVISIBLE);
|
progressBar.setVisibility(INVISIBLE);
|
||||||
// TODO
|
showFragment(getSupportFragmentManager(), new MailboxStatusFragment(),
|
||||||
Toast.makeText(this, "NOT IMPLEMENTED", LENGTH_LONG).show();
|
MailboxStatusFragment.TAG, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void repopulateBackStack() {
|
private void repopulateBackStack() {
|
||||||
|
|||||||
@@ -0,0 +1,85 @@
|
|||||||
|
package org.briarproject.briar.android.mailbox;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||||
|
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
|
import org.briarproject.briar.R;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.fragment.app.FragmentActivity;
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
|
import static java.util.Objects.requireNonNull;
|
||||||
|
import static org.briarproject.briar.android.AppModule.getAndroidComponent;
|
||||||
|
import static org.briarproject.briar.android.util.UiUtils.formatDate;
|
||||||
|
|
||||||
|
@MethodsNotNullByDefault
|
||||||
|
@ParametersNotNullByDefault
|
||||||
|
public class MailboxStatusFragment extends Fragment {
|
||||||
|
|
||||||
|
static final String TAG = MailboxStatusFragment.class.getName();
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ViewModelProvider.Factory viewModelFactory;
|
||||||
|
|
||||||
|
private MailboxViewModel viewModel;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttach(Context context) {
|
||||||
|
super.onAttach(context);
|
||||||
|
FragmentActivity activity = requireActivity();
|
||||||
|
getAndroidComponent(activity).inject(this);
|
||||||
|
viewModel = new ViewModelProvider(activity, viewModelFactory)
|
||||||
|
.get(MailboxViewModel.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater,
|
||||||
|
@Nullable ViewGroup container,
|
||||||
|
@Nullable Bundle savedInstanceState) {
|
||||||
|
return inflater.inflate(R.layout.fragment_mailbox_status,
|
||||||
|
container, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onViewCreated(View v, @Nullable Bundle savedInstanceState) {
|
||||||
|
super.onViewCreated(v, savedInstanceState);
|
||||||
|
MailboxState.IsPaired state =
|
||||||
|
(MailboxState.IsPaired) viewModel.getState().getLastValue();
|
||||||
|
requireNonNull(state); // TODO check assumption
|
||||||
|
TextView statusInfoView = v.findViewById(R.id.statusInfoView);
|
||||||
|
long lastSuccess = state.mailboxStatus.getTimeOfLastSuccess();
|
||||||
|
String lastConnectionText;
|
||||||
|
if (lastSuccess < 0) {
|
||||||
|
lastConnectionText = getString(R.string.pref_lock_timeout_never);
|
||||||
|
} else {
|
||||||
|
lastConnectionText = formatDate(requireContext(), lastSuccess);
|
||||||
|
}
|
||||||
|
String statusInfoText = getString(
|
||||||
|
R.string.mailbox_status_connected_info, lastConnectionText);
|
||||||
|
statusInfoView.setText(statusInfoText);
|
||||||
|
// TODO
|
||||||
|
// * react to status changes
|
||||||
|
// * detect problems and show them
|
||||||
|
// * update connection time periodically like conversation timestamps
|
||||||
|
// * add "Check connection" button
|
||||||
|
// * add "Unlink" button with confirmation dialog
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
requireActivity().setTitle(R.string.mailbox_status_title);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
<?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"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".android.mailbox.MailboxActivity">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/imageView"
|
||||||
|
android:layout_width="32dp"
|
||||||
|
android:layout_height="32dp"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginLeft="16dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/statusTitleView"
|
||||||
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_chainStyle="packed"
|
||||||
|
app:srcCompat="@drawable/ic_check_circle_outline"
|
||||||
|
app:tint="@color/briar_brand_green"
|
||||||
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/statusTitleView"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="16dp"
|
||||||
|
android:text="@string/mailbox_status_connected_title"
|
||||||
|
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6"
|
||||||
|
app:layout_constrainedWidth="true"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/imageView"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/imageView"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/imageView" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/statusInfoView"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="16dp"
|
||||||
|
android:gravity="center"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/statusTitleView"
|
||||||
|
app:layout_constraintVertical_bias="0.0"
|
||||||
|
tools:text="@string/mailbox_status_connected_info" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -614,7 +614,7 @@
|
|||||||
|
|
||||||
<!-- Mailbox -->
|
<!-- Mailbox -->
|
||||||
<string name="mailbox_settings_title">Mailbox</string>
|
<string name="mailbox_settings_title">Mailbox</string>
|
||||||
<string name="mailbox_setup_title">Mailbox Setup</string>
|
<string name="mailbox_setup_title">Mailbox setup</string>
|
||||||
<string name="mailbox_setup_intro">A Mailbox enables your contacts to send you messages while you are offline. The Mailbox will receive your messages and store them until you come online.\n
|
<string name="mailbox_setup_intro">A Mailbox enables your contacts to send you messages while you are offline. The Mailbox will receive your messages and store them until you come online.\n
|
||||||
\nYou can install the Briar Mailbox app on a spare device. Keep it connected to power and Wi-Fi so it\'s always online.</string>
|
\nYou can install the Briar Mailbox app on a spare device. Keep it connected to power and Wi-Fi so it\'s always online.</string>
|
||||||
<string name="mailbox_setup_download">First, install the Mailbox app on another device by searching for \"Briar Mailbox\" on Google Play or wherever you downloaded Briar.\n
|
<string name="mailbox_setup_download">First, install the Mailbox app on another device by searching for \"Briar Mailbox\" on Google Play or wherever you downloaded Briar.\n
|
||||||
@@ -637,6 +637,10 @@
|
|||||||
<string name="tor_offline_title">Offline</string>
|
<string name="tor_offline_title">Offline</string>
|
||||||
<string name="tor_offline_description">Ensure that this device is online and connections to the internet are allowed.\n\nAfterwards, wait for the globe icon in connection settings to turn green.</string>
|
<string name="tor_offline_description">Ensure that this device is online and connections to the internet are allowed.\n\nAfterwards, wait for the globe icon in connection settings to turn green.</string>
|
||||||
<string name="tor_offline_button_check">Check connection settings</string>
|
<string name="tor_offline_button_check">Check connection settings</string>
|
||||||
|
<string name="mailbox_status_title">Mailbox status</string>
|
||||||
|
<string name="mailbox_status_connected_title">Mailbox is running</string>
|
||||||
|
<!-- Example for string substitution: Last connection: 3min ago-->
|
||||||
|
<string name="mailbox_status_connected_info">Last connection: %s</string>
|
||||||
|
|
||||||
<!-- Conversation Settings -->
|
<!-- Conversation Settings -->
|
||||||
<string name="disappearing_messages_title">Disappearing messages</string>
|
<string name="disappearing_messages_title">Disappearing messages</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user