package org.thoughtcrime.securesms; import android.content.Intent; import android.os.Bundle; import android.support.annotation.IdRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.util.Log; import org.thoughtcrime.securesms.connect.DcHelper; import java.util.Locale; public abstract class PassphraseRequiredActionBarActivity extends BaseActionBarActivity { private static final String TAG = PassphraseRequiredActionBarActivity.class.getSimpleName(); public static final String LOCALE_EXTRA = "locale_extra"; private static final int STATE_NORMAL = 0; private static final int STATE_NEEDS_CONFIGURE = 1; @Override protected final void onCreate(Bundle savedInstanceState) { Log.w(TAG, "onCreate(" + savedInstanceState + ")"); onPreCreate(); routeApplicationState(); super.onCreate(savedInstanceState); if (!isFinishing()) { onCreate(savedInstanceState, true); } } protected void onPreCreate() {} protected void onCreate(Bundle savedInstanceState, boolean ready) {} @Override protected void onResume() { Log.w(TAG, "onResume()"); super.onResume(); } @Override protected void onPause() { Log.w(TAG, "onPause()"); super.onPause(); } @Override protected void onDestroy() { Log.w(TAG, "onDestroy()"); super.onDestroy(); } protected T initFragment(@IdRes int target, @NonNull T fragment) { return initFragment(target, fragment, null); } protected T initFragment(@IdRes int target, @NonNull T fragment, @Nullable Locale locale) { return initFragment(target, fragment, locale, null); } protected T initFragment(@IdRes int target, @NonNull T fragment, @Nullable Locale locale, @Nullable Bundle extras) { Bundle args = new Bundle(); args.putSerializable(LOCALE_EXTRA, locale); if (extras != null) { args.putAll(extras); } fragment.setArguments(args); getSupportFragmentManager().beginTransaction() .replace(target, fragment) .commitAllowingStateLoss(); return fragment; } private void routeApplicationState() { Intent intent = getIntentForState(getApplicationState()); if (intent != null) { startActivity(intent); finish(); } } private Intent getIntentForState(int state) { switch (state) { case STATE_NEEDS_CONFIGURE: return getWelcomeIntent(); default: return null; } } private int getApplicationState() { boolean isConfigured = DcHelper.isConfigured(getApplicationContext()); if (!isConfigured) { return STATE_NEEDS_CONFIGURE; } else { return STATE_NORMAL; } } private Intent getWelcomeIntent() { return getRoutedIntent(WelcomeActivity.class, null); } private Intent getRoutedIntent(Class destination, @Nullable Intent nextIntent) { final Intent intent = new Intent(this, destination); if (nextIntent != null) intent.putExtra("next_intent", nextIntent); return intent; } }