Add a minimal MailboxStatusFragment

This commit is contained in:
Torsten Grote
2022-02-18 10:54:58 -03:00
parent 5e8d5c96fc
commit a567301e49
5 changed files with 148 additions and 8 deletions

View File

@@ -46,6 +46,7 @@ import org.briarproject.briar.android.logging.CachingLogHandler;
import org.briarproject.briar.android.login.SignInReminderReceiver;
import org.briarproject.briar.android.mailbox.ErrorFragment;
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.SetupDownloadFragment;
import org.briarproject.briar.android.removabledrive.ChooserFragment;
@@ -251,4 +252,6 @@ public interface AndroidComponent
void inject(OfflineFragment offlineFragment);
void inject(ErrorFragment errorFragment);
void inject(MailboxStatusFragment mailboxStatusFragment);
}

View File

@@ -3,10 +3,8 @@ package org.briarproject.briar.android.mailbox;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.ProgressBar;
import android.widget.Toast;
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.ParametersNotNullByDefault;
import org.briarproject.briar.R;
@@ -23,7 +21,6 @@ import androidx.lifecycle.ViewModelProvider;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
import static android.widget.Toast.LENGTH_LONG;
import static org.briarproject.briar.android.util.UiUtils.showFragment;
@MethodsNotNullByDefault
@@ -66,7 +63,7 @@ public class MailboxActivity extends BriarActivity {
} else if (state instanceof MailboxState.OfflineWhenPairing) {
onOffline();
} else if (state instanceof MailboxState.IsPaired) {
onIsPaired(((MailboxState.IsPaired) state).mailboxStatus);
onIsPaired();
} else {
throw new AssertionError("Unknown state: " + state);
}
@@ -167,10 +164,10 @@ public class MailboxActivity extends BriarActivity {
OfflineFragment.TAG);
}
private void onIsPaired(MailboxStatus mailboxStatus) {
private void onIsPaired() {
progressBar.setVisibility(INVISIBLE);
// TODO
Toast.makeText(this, "NOT IMPLEMENTED", LENGTH_LONG).show();
showFragment(getSupportFragmentManager(), new MailboxStatusFragment(),
MailboxStatusFragment.TAG, false);
}
private void repopulateBackStack() {

View File

@@ -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);
}
}