[android] StartupActivity: Address first round of review comments

This commit is contained in:
Torsten Grote
2019-05-03 12:12:55 -03:00
parent 5ece6505da
commit 5676e18a22
10 changed files with 31 additions and 23 deletions

View File

@@ -1,7 +1,10 @@
package org.briarproject.briar.android; package org.briarproject.briar.android;
import android.app.Activity;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import org.briarproject.briar.android.navdrawer.NavDrawerActivity;
import java.util.Collection; import java.util.Collection;
import java.util.logging.LogRecord; import java.util.logging.LogRecord;
@@ -11,6 +14,8 @@ import java.util.logging.LogRecord;
*/ */
public interface BriarApplication { public interface BriarApplication {
Class<? extends Activity> ENTRY_ACTIVITY = NavDrawerActivity.class;
Collection<LogRecord> getRecentLogRecords(); Collection<LogRecord> getRecentLogRecords();
AndroidComponent getApplicationComponent(); AndroidComponent getApplicationComponent();

View File

@@ -47,7 +47,7 @@ import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING; import static java.util.logging.Level.WARNING;
import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.ALREADY_RUNNING; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.ALREADY_RUNNING;
import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.SUCCESS; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.SUCCESS;
import static org.briarproject.briar.android.activity.ActivityComponent.ENTRY_ACTIVITY; import static org.briarproject.briar.android.BriarApplication.ENTRY_ACTIVITY;
import static org.briarproject.briar.api.android.AndroidNotificationManager.FAILURE_CHANNEL_ID; import static org.briarproject.briar.api.android.AndroidNotificationManager.FAILURE_CHANNEL_ID;
import static org.briarproject.briar.api.android.AndroidNotificationManager.FAILURE_NOTIFICATION_ID; import static org.briarproject.briar.api.android.AndroidNotificationManager.FAILURE_NOTIFICATION_ID;
import static org.briarproject.briar.api.android.AndroidNotificationManager.ONGOING_CHANNEL_ID; import static org.briarproject.briar.api.android.AndroidNotificationManager.ONGOING_CHANNEL_ID;

View File

@@ -74,7 +74,7 @@ public class StartupFailureActivity extends BaseActivity implements
@Override @Override
public void runOnDbThread(@NonNull Runnable runnable) { public void runOnDbThread(@NonNull Runnable runnable) {
throw new AssertionError("Deprecated and should not be used"); throw new UnsupportedOperationException();
} }
} }

View File

@@ -19,7 +19,7 @@ import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.Intent.FLAG_ACTIVITY_TASK_ON_HOME; import static android.content.Intent.FLAG_ACTIVITY_TASK_ON_HOME;
import static org.briarproject.briar.android.activity.ActivityComponent.ENTRY_ACTIVITY; import static org.briarproject.briar.android.BriarApplication.ENTRY_ACTIVITY;
@MethodsNotNullByDefault @MethodsNotNullByDefault
@ParametersNotNullByDefault @ParametersNotNullByDefault

View File

@@ -91,8 +91,6 @@ import dagger.Component;
dependencies = AndroidComponent.class) dependencies = AndroidComponent.class)
public interface ActivityComponent { public interface ActivityComponent {
Class<? extends Activity> ENTRY_ACTIVITY = NavDrawerActivity.class;
Activity activity(); Activity activity();
void inject(SplashScreenActivity activity); void inject(SplashScreenActivity activity);

View File

@@ -26,7 +26,7 @@ import static org.briarproject.briar.android.login.StartupViewModel.State.MIGRAT
@ParametersNotNullByDefault @ParametersNotNullByDefault
public class OpenDatabaseFragment extends BaseFragment { public class OpenDatabaseFragment extends BaseFragment {
final static String TAG = PasswordFragment.class.getName(); final static String TAG = OpenDatabaseFragment.class.getName();
@Inject @Inject
ViewModelProvider.Factory viewModelFactory; ViewModelProvider.Factory viewModelFactory;

View File

@@ -23,6 +23,7 @@ import javax.inject.Inject;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.Intent.FLAG_ACTIVITY_TASK_ON_HOME;
import static org.briarproject.briar.android.login.StartupViewModel.State.SIGNED_IN; import static org.briarproject.briar.android.login.StartupViewModel.State.SIGNED_IN;
import static org.briarproject.briar.android.login.StartupViewModel.State.SIGNED_OUT; import static org.briarproject.briar.android.login.StartupViewModel.State.SIGNED_OUT;
import static org.briarproject.briar.android.login.StartupViewModel.State.STARTED; import static org.briarproject.briar.android.login.StartupViewModel.State.STARTED;
@@ -59,10 +60,12 @@ public class StartupActivity extends BaseActivity implements
// because if it exists, we assume the database also exists // because if it exists, we assume the database also exists
// and when clearing app data, the folder does not get deleted. // and when clearing app data, the folder does not get deleted.
viewModel.deleteAccount(); viewModel.deleteAccount();
onAccountDeleted(true); onAccountDeleted();
return; return;
} }
viewModel.getAccountDeleted().observe(this, this::onAccountDeleted); viewModel.getAccountDeleted().observe(this, deleted -> {
if (deleted != null && deleted) onAccountDeleted();
});
viewModel.getState().observe(this, this::onStateChanged); viewModel.getState().observe(this, this::onStateChanged);
} }
@@ -86,7 +89,10 @@ public class StartupActivity extends BaseActivity implements
} else if (state == SIGNED_IN) { } else if (state == SIGNED_IN) {
startService(new Intent(this, BriarService.class)); startService(new Intent(this, BriarService.class));
} else if (state == STARTING) { } else if (state == STARTING) {
// only show OpenDatabaseFragment if not already visible // Only show OpenDatabaseFragment if not already visible.
// This can happen because several LifecycleManager states are
// mapped to STARTING, so this can get called several times
// as the app's lifecycle advances.
FragmentManager fm = getSupportFragmentManager(); FragmentManager fm = getSupportFragmentManager();
Fragment f = fm.findFragmentByTag(OpenDatabaseFragment.TAG); Fragment f = fm.findFragmentByTag(OpenDatabaseFragment.TAG);
if (f == null || !f.isVisible()) { if (f == null || !f.isVisible()) {
@@ -100,21 +106,19 @@ public class StartupActivity extends BaseActivity implements
} }
} }
private void onAccountDeleted(boolean accountDeleted) { private void onAccountDeleted() {
if (accountDeleted) { setResult(RESULT_CANCELED);
setResult(RESULT_CANCELED); finish();
finish(); Intent i = new Intent(this, SetupActivity.class);
Intent i = new Intent(this, SetupActivity.class); i.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP |
i.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_TASK_ON_HOME);
FLAG_ACTIVITY_CLEAR_TASK); startActivity(i);
startActivity(i);
}
} }
@Override @Override
public void runOnDbThread(Runnable runnable) { public void runOnDbThread(Runnable runnable) {
// we don't need this and shouldn't be forced to implement it // we don't need this and shouldn't be forced to implement it
throw new AssertionError(); throw new UnsupportedOperationException();
} }
} }

View File

@@ -52,6 +52,7 @@ import javax.inject.Inject;
import static android.app.Activity.RESULT_OK; import static android.app.Activity.RESULT_OK;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.media.RingtoneManager.ACTION_RINGTONE_PICKER; import static android.media.RingtoneManager.ACTION_RINGTONE_PICKER;
import static android.media.RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI; import static android.media.RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI;
@@ -79,7 +80,7 @@ import static org.briarproject.bramble.util.LogUtils.logDuration;
import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.bramble.util.LogUtils.logException;
import static org.briarproject.bramble.util.LogUtils.now; import static org.briarproject.bramble.util.LogUtils.now;
import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD; import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD;
import static org.briarproject.briar.android.activity.ActivityComponent.ENTRY_ACTIVITY; import static org.briarproject.briar.android.BriarApplication.ENTRY_ACTIVITY;
import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_RINGTONE; import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_RINGTONE;
import static org.briarproject.briar.android.navdrawer.NavDrawerActivity.INTENT_SIGN_OUT; import static org.briarproject.briar.android.navdrawer.NavDrawerActivity.INTENT_SIGN_OUT;
import static org.briarproject.briar.android.util.UiUtils.hasScreenLock; import static org.briarproject.briar.android.util.UiUtils.hasScreenLock;
@@ -576,7 +577,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
(dialogInterface, i) -> { (dialogInterface, i) -> {
language.setValue(newValue); language.setValue(newValue);
Intent intent = new Intent(getContext(), ENTRY_ACTIVITY); Intent intent = new Intent(getContext(), ENTRY_ACTIVITY);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra(INTENT_SIGN_OUT, true); intent.putExtra(INTENT_SIGN_OUT, true);
requireActivity().startActivity(intent); requireActivity().startActivity(intent);
requireActivity().finish(); requireActivity().finish();

View File

@@ -26,7 +26,7 @@ import static android.support.v7.preference.PreferenceManager.setDefaultValues;
import static java.lang.System.currentTimeMillis; import static java.lang.System.currentTimeMillis;
import static java.util.logging.Logger.getLogger; import static java.util.logging.Logger.getLogger;
import static org.briarproject.briar.android.TestingConstants.EXPIRY_DATE; import static org.briarproject.briar.android.TestingConstants.EXPIRY_DATE;
import static org.briarproject.briar.android.activity.ActivityComponent.ENTRY_ACTIVITY; import static org.briarproject.briar.android.BriarApplication.ENTRY_ACTIVITY;
@MethodsNotNullByDefault @MethodsNotNullByDefault
@ParametersNotNullByDefault @ParametersNotNullByDefault

View File

@@ -16,7 +16,7 @@ import org.briarproject.briar.api.test.TestDataCreator;
import javax.inject.Inject; import javax.inject.Inject;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
import static org.briarproject.briar.android.activity.ActivityComponent.ENTRY_ACTIVITY; import static org.briarproject.briar.android.BriarApplication.ENTRY_ACTIVITY;
public class TestDataActivity extends BriarActivity { public class TestDataActivity extends BriarActivity {