diff --git a/dont-kill-me-lib/src/main/java/org/briarproject/android/dontkillmelib/PowerUtils.java b/dont-kill-me-lib/src/main/java/org/briarproject/android/dontkillmelib/PowerUtils.java
index 8b130f6ad8b672b65b5d1d6b49caf7bd9b50fea1..ba5892df35dbdb530b8306ba5fc0084797656710 100644
--- a/dont-kill-me-lib/src/main/java/org/briarproject/android/dontkillmelib/PowerUtils.java
+++ b/dont-kill-me-lib/src/main/java/org/briarproject/android/dontkillmelib/PowerUtils.java
@@ -37,7 +37,7 @@ public class PowerUtils {
 		return i;
 	}
 
-	static void showOnboardingDialog(Context ctx, String text) {
+	public static void showOnboardingDialog(Context ctx, String text) {
 		new AlertDialog.Builder(ctx, R.style.OnboardingDialogTheme)
 				.setMessage(text)
 				.setNeutralButton(R.string.got_it,
@@ -46,7 +46,7 @@ public class PowerUtils {
 	}
 
 	@Nullable
-	static String getSystemProperty(String propName) {
+	public static String getSystemProperty(String propName) {
 		try {
 			Process p = getRuntime().exec("getprop " + propName);
 			Scanner s = new Scanner(p.getInputStream());
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/AbstractDoNotKillMeFragment.java b/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/AbstractDoNotKillMeFragment.java
new file mode 100644
index 0000000000000000000000000000000000000000..591b0a82dd0ba559c6a8e7eeae8b07597e1c36dc
--- /dev/null
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/AbstractDoNotKillMeFragment.java
@@ -0,0 +1,123 @@
+package org.briarproject.mailbox.android.dontkillme;
+
+import android.annotation.SuppressLint;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.ProgressBar;
+
+import org.briarproject.mailbox.R;
+import org.briarproject.mailbox.android.dontkillme.PowerView.OnCheckedChangedListener;
+
+import androidx.activity.result.ActivityResult;
+import androidx.activity.result.ActivityResultCallback;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import static android.view.View.INVISIBLE;
+import static android.view.View.VISIBLE;
+import static org.briarproject.android.dontkillmelib.PowerUtils.getDozeWhitelistingIntent;
+import static org.briarproject.android.dontkillmelib.PowerUtils.showOnboardingDialog;
+
+public abstract class AbstractDoNotKillMeFragment extends Fragment
+		implements OnCheckedChangedListener,
+		ActivityResultCallback<ActivityResult> {
+
+	private DozeView dozeView;
+	private HuaweiProtectedAppsView huaweiProtectedAppsView;
+	private HuaweiAppLaunchView huaweiAppLaunchView;
+	private XiaomiView xiaomiView;
+	private Button next;
+	private boolean secondAttempt = false;
+	private boolean buttonWasClicked = false;
+
+	private final ActivityResultLauncher<Intent> dozeLauncher =
+			registerForActivityResult(new StartActivityForResult(), this);
+
+	@Override
+	public View onCreateView(LayoutInflater inflater,
+			@Nullable ViewGroup container,
+			@Nullable Bundle savedInstanceState) {
+		requireActivity().setTitle(getString(
+				org.briarproject.android.dontkillmelib.R.string.setup_doze_title));
+		setHasOptionsMenu(false);
+		View v = inflater.inflate(
+				R.layout.fragment_dont_kill_me2,
+				container,
+				false);
+		dozeView = v.findViewById(
+				org.briarproject.android.dontkillmelib.R.id.dozeView);
+		dozeView.setOnCheckedChangedListener(this);
+		huaweiProtectedAppsView = v.findViewById(
+				org.briarproject.android.dontkillmelib.R.id.huaweiProtectedAppsView);
+		huaweiProtectedAppsView.setOnCheckedChangedListener(this);
+		huaweiAppLaunchView = v.findViewById(
+				org.briarproject.android.dontkillmelib.R.id.huaweiAppLaunchView);
+		huaweiAppLaunchView.setOnCheckedChangedListener(this);
+		xiaomiView = v.findViewById(
+				org.briarproject.android.dontkillmelib.R.id.xiaomiView);
+		xiaomiView.setOnCheckedChangedListener(this);
+		next = v.findViewById(org.briarproject.android.dontkillmelib.R.id.next);
+		ProgressBar progressBar = v.findViewById(
+				org.briarproject.android.dontkillmelib.R.id.progress);
+
+		dozeView.setOnButtonClickListener(this::askForDozeWhitelisting);
+		next.setOnClickListener(view -> {
+			buttonWasClicked = true;
+			next.setVisibility(INVISIBLE);
+			progressBar.setVisibility(VISIBLE);
+			onButtonClicked();
+		});
+
+		// restore UI state if button was clicked already
+		buttonWasClicked = savedInstanceState != null &&
+				savedInstanceState.getBoolean("buttonWasClicked", false);
+		if (buttonWasClicked) {
+			next.setVisibility(INVISIBLE);
+			progressBar.setVisibility(VISIBLE);
+		}
+
+		return v;
+	}
+
+	protected abstract void onButtonClicked();
+
+	@Override
+	public void onSaveInstanceState(@NonNull Bundle outState) {
+		super.onSaveInstanceState(outState);
+		outState.putBoolean("buttonWasClicked", buttonWasClicked);
+	}
+
+	@Override
+	public void onActivityResult(ActivityResult result) {
+		// we allow the user to proceed after also denying the second attempt
+		if (!dozeView.needsToBeShown() || secondAttempt) {
+			dozeView.setChecked(true);
+		} else if (getContext() != null) {
+			secondAttempt = true;
+			String s = getString(
+					org.briarproject.android.dontkillmelib.R.string.setup_doze_explanation);
+			showOnboardingDialog(getContext(), s);
+		}
+	}
+
+	@Override
+	public void onCheckedChanged() {
+		next.setEnabled(dozeView.isChecked() &&
+				huaweiProtectedAppsView.isChecked() &&
+				huaweiAppLaunchView.isChecked() &&
+				xiaomiView.isChecked());
+	}
+
+	@SuppressLint("BatteryLife")
+	private void askForDozeWhitelisting() {
+		if (getContext() == null) return;
+		dozeLauncher.launch(getDozeWhitelistingIntent(getContext()));
+	}
+}
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/DoNotKillMeFragment.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/DoNotKillMeFragment.kt
similarity index 90%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/DoNotKillMeFragment.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/DoNotKillMeFragment.kt
index c9ab6d2dc439ca28b551714f2ce3533f5c86b1f6..5c64d6b7059290f1bbf3af76c71d3db4b41bb2b5 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/DoNotKillMeFragment.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/DoNotKillMeFragment.kt
@@ -17,11 +17,11 @@
  *
  */
 
-package org.briarproject.mailbox.android
+package org.briarproject.mailbox.android.dontkillme
 
 import androidx.fragment.app.activityViewModels
 import dagger.hilt.android.AndroidEntryPoint
-import org.briarproject.android.dontkillmelib.AbstractDoNotKillMeFragment
+import org.briarproject.mailbox.android.MailboxViewModel
 
 @AndroidEntryPoint
 class DoNotKillMeFragment : AbstractDoNotKillMeFragment() {
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/DozeView.java b/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/DozeView.java
new file mode 100644
index 0000000000000000000000000000000000000000..00cfefe3b83487e41998e92daed64b83531787ca
--- /dev/null
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/DozeView.java
@@ -0,0 +1,61 @@
+package org.briarproject.mailbox.android.dontkillme;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import org.briarproject.mailbox.R;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.UiThread;
+
+import static org.briarproject.android.dontkillmelib.PowerUtils.needsDozeWhitelisting;
+
+@UiThread
+public class DozeView extends PowerView {
+
+	@Nullable
+	private Runnable onButtonClickListener;
+
+	public DozeView(Context context) {
+		this(context, null);
+	}
+
+	public DozeView(Context context, @Nullable AttributeSet attrs) {
+		this(context, attrs, 0);
+	}
+
+	public DozeView(Context context, @Nullable AttributeSet attrs,
+			int defStyleAttr) {
+		super(context, attrs, defStyleAttr);
+		setText(org.briarproject.android.dontkillmelib.R.string.setup_doze_intro);
+		setIcon(R.drawable.ic_battery_alert_white);
+		setButtonText(
+				org.briarproject.android.dontkillmelib.R.string.setup_doze_button);
+	}
+
+	@Override
+	public boolean needsToBeShown() {
+		return needsToBeShown(getContext());
+	}
+
+	public static boolean needsToBeShown(Context context) {
+		return needsDozeWhitelisting(context);
+	}
+
+	@Override
+	protected int getHelpText() {
+		return org.briarproject.android.dontkillmelib.R.string.setup_doze_explanation;
+	}
+
+	@Override
+	protected void onButtonClick() {
+		if (onButtonClickListener == null) throw new IllegalStateException();
+		onButtonClickListener.run();
+	}
+
+	public void setOnButtonClickListener(@NonNull Runnable runnable) {
+		onButtonClickListener = runnable;
+	}
+
+}
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/HuaweiAppLaunchView.java b/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/HuaweiAppLaunchView.java
new file mode 100644
index 0000000000000000000000000000000000000000..feb93b21e664f06c7e6c611f5e1672a3e401192d
--- /dev/null
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/HuaweiAppLaunchView.java
@@ -0,0 +1,77 @@
+package org.briarproject.mailbox.android.dontkillme;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.util.AttributeSet;
+
+import org.briarproject.mailbox.R;
+
+import java.util.List;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import androidx.annotation.UiThread;
+
+import static android.content.pm.PackageManager.MATCH_DEFAULT_ONLY;
+import static android.os.Build.VERSION.SDK_INT;
+
+@UiThread
+public class HuaweiAppLaunchView extends PowerView {
+
+	private final static String PACKAGE_NAME = "com.huawei.systemmanager";
+	private final static String CLASS_NAME =
+			PACKAGE_NAME + ".power.ui.HwPowerManagerActivity";
+
+	public HuaweiAppLaunchView(Context context) {
+		this(context, null);
+	}
+
+	public HuaweiAppLaunchView(Context context, @Nullable AttributeSet attrs) {
+		this(context, attrs, 0);
+	}
+
+	public HuaweiAppLaunchView(Context context, @Nullable AttributeSet attrs,
+			int defStyleAttr) {
+		super(context, attrs, defStyleAttr);
+		setText(org.briarproject.android.dontkillmelib.R.string.setup_huawei_app_launch_text);
+		setIcon(R.drawable.ic_restore_mirrored_white);
+		setButtonText(
+				org.briarproject.android.dontkillmelib.R.string.setup_huawei_app_launch_button);
+	}
+
+	@Override
+	public boolean needsToBeShown() {
+		return needsToBeShown(getContext());
+	}
+
+	public static boolean needsToBeShown(Context context) {
+		// "App launch" was introduced in EMUI 8 (Android 8.0)
+		if (1 == 1) return true;
+		if (SDK_INT < 26) return false;
+		PackageManager pm = context.getPackageManager();
+		List<ResolveInfo> resolveInfos = pm.queryIntentActivities(getIntent(),
+				MATCH_DEFAULT_ONLY);
+		return !resolveInfos.isEmpty();
+	}
+
+	@Override
+	@StringRes
+	protected int getHelpText() {
+		return org.briarproject.android.dontkillmelib.R.string.setup_huawei_app_launch_help;
+	}
+
+	@Override
+	protected void onButtonClick() {
+		getContext().startActivity(getIntent());
+		setChecked(true);
+	}
+
+	private static Intent getIntent() {
+		Intent intent = new Intent();
+		intent.setClassName(PACKAGE_NAME, CLASS_NAME);
+		return intent;
+	}
+
+}
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/HuaweiProtectedAppsView.java b/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/HuaweiProtectedAppsView.java
new file mode 100644
index 0000000000000000000000000000000000000000..b7f6c03a0ded08f6c4fd6a911d2186de019c4524
--- /dev/null
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/HuaweiProtectedAppsView.java
@@ -0,0 +1,75 @@
+package org.briarproject.mailbox.android.dontkillme;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.util.AttributeSet;
+
+import java.util.List;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import androidx.annotation.UiThread;
+
+import static android.content.pm.PackageManager.MATCH_DEFAULT_ONLY;
+import static android.os.Build.VERSION.SDK_INT;
+
+@UiThread
+public class HuaweiProtectedAppsView extends PowerView {
+
+	private final static String PACKAGE_NAME = "com.huawei.systemmanager";
+	private final static String CLASS_NAME =
+			PACKAGE_NAME + ".optimize.process.ProtectActivity";
+
+	public HuaweiProtectedAppsView(Context context) {
+		this(context, null);
+	}
+
+	public HuaweiProtectedAppsView(Context context,
+			@Nullable AttributeSet attrs) {
+		this(context, attrs, 0);
+	}
+
+	public HuaweiProtectedAppsView(Context context,
+			@Nullable AttributeSet attrs,
+			int defStyleAttr) {
+		super(context, attrs, defStyleAttr);
+		setText(org.briarproject.android.dontkillmelib.R.string.setup_huawei_text);
+		setButtonText(
+				org.briarproject.android.dontkillmelib.R.string.setup_huawei_button);
+	}
+
+	@Override
+	public boolean needsToBeShown() {
+		return needsToBeShown(getContext());
+	}
+
+	public static boolean needsToBeShown(Context context) {
+		// "Protected apps" no longer exists on Huawei EMUI 5.0 (Android 7.0)
+		if (SDK_INT >= 24) return false;
+		PackageManager pm = context.getPackageManager();
+		List<ResolveInfo> resolveInfos = pm.queryIntentActivities(getIntent(),
+				MATCH_DEFAULT_ONLY);
+		return !resolveInfos.isEmpty();
+	}
+
+	@Override
+	@StringRes
+	protected int getHelpText() {
+		return org.briarproject.android.dontkillmelib.R.string.setup_huawei_help;
+	}
+
+	@Override
+	protected void onButtonClick() {
+		getContext().startActivity(getIntent());
+		setChecked(true);
+	}
+
+	private static Intent getIntent() {
+		Intent intent = new Intent();
+		intent.setClassName(PACKAGE_NAME, CLASS_NAME);
+		return intent;
+	}
+
+}
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/PowerView.java b/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/PowerView.java
new file mode 100644
index 0000000000000000000000000000000000000000..6cb99eeef605d3b9ce81fa1492cbff001aae9259
--- /dev/null
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/PowerView.java
@@ -0,0 +1,177 @@
+package org.briarproject.mailbox.android.dontkillme;
+
+import android.content.Context;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import org.briarproject.mailbox.R;
+
+import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import androidx.annotation.UiThread;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.core.content.ContextCompat;
+
+import static android.content.Context.LAYOUT_INFLATER_SERVICE;
+import static org.briarproject.android.dontkillmelib.PowerUtils.showOnboardingDialog;
+
+@UiThread
+abstract class PowerView extends ConstraintLayout {
+
+	private final TextView textView;
+	private final ImageView icon;
+	private final ImageView checkImage;
+	private final Button button;
+
+	private boolean checked = false;
+
+	@Nullable
+	private OnCheckedChangedListener onCheckedChangedListener;
+
+	public PowerView(Context context) {
+		this(context, null);
+	}
+
+	public PowerView(Context context, @Nullable AttributeSet attrs) {
+		this(context, attrs, 0);
+	}
+
+	public PowerView(Context context, @Nullable AttributeSet attrs,
+			int defStyleAttr) {
+		super(context, attrs, defStyleAttr);
+
+		LayoutInflater inflater = (LayoutInflater) context
+				.getSystemService(LAYOUT_INFLATER_SERVICE);
+		View v = inflater.inflate(R.layout.power_view2, this, true);
+
+		textView = v.findViewById(
+				org.briarproject.android.dontkillmelib.R.id.textView);
+		icon = v.findViewById(org.briarproject.android.dontkillmelib.R.id.icon);
+		checkImage = v.findViewById(
+				org.briarproject.android.dontkillmelib.R.id.checkImage);
+		button = v.findViewById(
+				org.briarproject.android.dontkillmelib.R.id.button);
+		button.setOnClickListener(view -> onButtonClick());
+		ImageButton helpButton = v.findViewById(
+				org.briarproject.android.dontkillmelib.R.id.helpButton);
+		helpButton.setOnClickListener(view -> onHelpButtonClick());
+
+		// we need to manage the checkImage state ourselves, because automatic
+		// state saving is done based on the view's ID and there can be
+		// multiple ImageViews with the same ID in the view hierarchy
+		setSaveFromParentEnabled(true);
+
+		if (!isInEditMode() && !needsToBeShown()) {
+			setVisibility(GONE);
+		}
+	}
+
+	@Nullable
+	@Override
+	protected Parcelable onSaveInstanceState() {
+		Parcelable superState = super.onSaveInstanceState();
+		SavedState ss = new SavedState(superState);
+		ss.value = new boolean[] {checked};
+		return ss;
+	}
+
+	@Override
+	protected void onRestoreInstanceState(Parcelable state) {
+		SavedState ss = (SavedState) state;
+		super.onRestoreInstanceState(ss.getSuperState());
+		setChecked(ss.value[0]);  // also calls listener
+	}
+
+	@SuppressWarnings("BooleanMethodIsAlwaysInverted")
+	public abstract boolean needsToBeShown();
+
+	public void setChecked(boolean checked) {
+		this.checked = checked;
+		if (checked) {
+			checkImage.setVisibility(VISIBLE);
+		} else {
+			checkImage.setVisibility(INVISIBLE);
+		}
+		if (onCheckedChangedListener != null) {
+			onCheckedChangedListener.onCheckedChanged();
+		}
+	}
+
+	public boolean isChecked() {
+		return getVisibility() == GONE || checked;
+	}
+
+	public void setOnCheckedChangedListener(@NonNull
+			OnCheckedChangedListener onCheckedChangedListener) {
+		this.onCheckedChangedListener = onCheckedChangedListener;
+	}
+
+	@StringRes
+	protected abstract int getHelpText();
+
+	protected void setText(@StringRes int res) {
+		textView.setText(res);
+	}
+
+	protected void setIcon(@DrawableRes int drawable) {
+		icon.setImageDrawable(
+				ContextCompat.getDrawable(getContext(), drawable));
+	}
+
+	protected void setButtonText(@StringRes int res) {
+		button.setText(res);
+	}
+
+	protected abstract void onButtonClick();
+
+	private void onHelpButtonClick() {
+		showOnboardingDialog(getContext(),
+				getContext().getString(getHelpText()));
+	}
+
+	private static class SavedState extends BaseSavedState {
+		private boolean[] value = {false};
+
+		private SavedState(@Nullable Parcelable superState) {
+			super(superState);
+		}
+
+		private SavedState(Parcel in) {
+			super(in);
+			in.readBooleanArray(value);
+		}
+
+		@Override
+		public void writeToParcel(Parcel out, int flags) {
+			super.writeToParcel(out, flags);
+			out.writeBooleanArray(value);
+		}
+
+		static final Creator<SavedState> CREATOR
+				= new Creator<SavedState>() {
+			@Override
+			public SavedState createFromParcel(Parcel in) {
+				return new SavedState(in);
+			}
+
+			@Override
+			public SavedState[] newArray(int size) {
+				return new SavedState[size];
+			}
+		};
+	}
+
+	public interface OnCheckedChangedListener {
+		void onCheckedChanged();
+	}
+
+}
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/XiaomiView.java b/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/XiaomiView.java
new file mode 100644
index 0000000000000000000000000000000000000000..25545050bad0c36b772f6cff5da1fe30993bc903
--- /dev/null
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/dontkillme/XiaomiView.java
@@ -0,0 +1,70 @@
+package org.briarproject.mailbox.android.dontkillme;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import androidx.annotation.UiThread;
+
+import static android.os.Build.BRAND;
+import static org.briarproject.android.dontkillmelib.PowerUtils.getSystemProperty;
+import static org.briarproject.android.dontkillmelib.PowerUtils.showOnboardingDialog;
+
+@UiThread
+public class XiaomiView extends PowerView {
+
+	public XiaomiView(Context context) {
+		this(context, null);
+	}
+
+	public XiaomiView(Context context, @Nullable AttributeSet attrs) {
+		this(context, attrs, 0);
+	}
+
+	public XiaomiView(Context context, @Nullable AttributeSet attrs,
+			int defStyleAttr) {
+		super(context, attrs, defStyleAttr);
+		setText(org.briarproject.android.dontkillmelib.R.string.setup_xiaomi_text);
+		setButtonText(
+				org.briarproject.android.dontkillmelib.R.string.setup_xiaomi_button);
+	}
+
+	@Override
+	public boolean needsToBeShown() {
+		return isXiaomiOrRedmiDevice();
+	}
+
+	public static boolean isXiaomiOrRedmiDevice() {
+		return "Xiaomi".equalsIgnoreCase(BRAND) ||
+				"Redmi".equalsIgnoreCase(BRAND);
+	}
+
+	@Override
+	@StringRes
+	protected int getHelpText() {
+		return org.briarproject.android.dontkillmelib.R.string.setup_xiaomi_help;
+	}
+
+	@Override
+	protected void onButtonClick() {
+		int bodyRes = isMiuiTenOrLater()
+				?
+				org.briarproject.android.dontkillmelib.R.string.setup_xiaomi_dialog_body_new
+				:
+				org.briarproject.android.dontkillmelib.R.string.setup_xiaomi_dialog_body_old;
+		showOnboardingDialog(getContext(), getContext().getString(bodyRes));
+		setChecked(true);
+	}
+
+	private boolean isMiuiTenOrLater() {
+		String version = getSystemProperty("ro.miui.ui.version.name");
+		if (version == null || version.equals("")) return false;
+		version = version.replaceAll("[^\\d]", "");
+		try {
+			return Integer.parseInt(version) >= 10;
+		} catch (NumberFormatException e) {
+			return false;
+		}
+	}
+}
diff --git a/mailbox-android/src/main/res/drawable/ic_battery_alert_white.xml b/mailbox-android/src/main/res/drawable/ic_battery_alert_white.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3cb4682ec3a136743284356a215bd785b0d73922
--- /dev/null
+++ b/mailbox-android/src/main/res/drawable/ic_battery_alert_white.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="48dp"
+    android:height="48dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48">
+  <path
+      android:fillColor="#FFFFFFFF"
+      android:pathData="M31.33,8h-3.33v-4h-8v4h-3.33c-1.48,0 -2.67,1.19 -2.67,2.67v30.67c0,1.47 1.19,2.67 2.67,2.67h14.67c1.47,0 2.67,-1.19 2.67,-2.67v-30.67c-0.01,-1.48 -1.2,-2.67 -2.68,-2.67zM26,36h-4v-4h4v4zM26,28h-4v-10h4v10z"/>
+</vector>
diff --git a/dont-kill-me-lib/src/main/res/drawable/ic_check_white.xml b/mailbox-android/src/main/res/drawable/ic_check_white.xml
similarity index 100%
rename from dont-kill-me-lib/src/main/res/drawable/ic_check_white.xml
rename to mailbox-android/src/main/res/drawable/ic_check_white.xml
diff --git a/dont-kill-me-lib/src/main/res/drawable/ic_help_outline_white.xml b/mailbox-android/src/main/res/drawable/ic_help_outline_white.xml
similarity index 100%
rename from dont-kill-me-lib/src/main/res/drawable/ic_help_outline_white.xml
rename to mailbox-android/src/main/res/drawable/ic_help_outline_white.xml
diff --git a/mailbox-android/src/main/res/drawable/ic_permissions.xml b/mailbox-android/src/main/res/drawable/ic_permissions.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1bc3db9bec149490c14c379c1dba13d70d2dde24
--- /dev/null
+++ b/mailbox-android/src/main/res/drawable/ic_permissions.xml
@@ -0,0 +1,70 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="212dp"
+    android:height="140dp"
+    android:viewportWidth="212"
+    android:viewportHeight="140">
+  <path
+      android:pathData="M0.642,12.331H199.998V133.877C199.998,135.293 199.435,136.651 198.434,137.652C197.433,138.654 196.075,139.216 194.659,139.216H5.981C5.279,139.216 4.585,139.078 3.937,138.81C3.29,138.541 2.701,138.148 2.205,137.652C1.71,137.157 1.316,136.568 1.048,135.92C0.78,135.273 0.642,134.578 0.642,133.877V12.331Z"
+      android:fillColor="#2E3D4F"/>
+  <path
+      android:pathData="M5.981,0.912H194.669C196.085,0.912 197.443,1.475 198.444,2.476C199.445,3.477 200.008,4.835 200.008,6.251V12.341H0.642V6.251C0.642,4.835 1.204,3.477 2.205,2.476C3.207,1.475 4.565,0.912 5.981,0.912Z"
+      android:fillColor="#95DE2D"/>
+  <path
+      android:pathData="M177.597,116.714H23.053C20.435,116.714 18.313,118.836 18.313,121.454C18.313,124.072 20.435,126.194 23.053,126.194H177.597C180.215,126.194 182.337,124.072 182.337,121.454C182.337,118.836 180.215,116.714 177.597,116.714Z"
+      android:fillColor="#ffffff"/>
+  <path
+      android:pathData="M177.597,127.208H23.053C21.527,127.208 20.063,126.602 18.983,125.523C17.904,124.443 17.298,122.98 17.298,121.453C17.298,119.927 17.904,118.463 18.983,117.384C20.063,116.305 21.527,115.698 23.053,115.698H177.597C179.123,115.698 180.587,116.305 181.666,117.384C182.745,118.463 183.352,119.927 183.352,121.453C183.352,122.98 182.745,124.443 181.666,125.523C180.587,126.602 179.123,127.208 177.597,127.208ZM23.053,117.769C22.065,117.769 21.118,118.161 20.419,118.86C19.72,119.558 19.328,120.506 19.328,121.494C19.328,122.482 19.72,123.429 20.419,124.128C21.118,124.826 22.065,125.219 23.053,125.219H177.597C178.086,125.219 178.57,125.123 179.022,124.935C179.474,124.748 179.885,124.474 180.231,124.128C180.577,123.782 180.851,123.371 181.038,122.919C181.225,122.467 181.322,121.983 181.322,121.494C181.322,121.005 181.225,120.52 181.038,120.068C180.851,119.616 180.577,119.206 180.231,118.86C179.885,118.514 179.474,118.24 179.022,118.052C178.57,117.865 178.086,117.769 177.597,117.769H23.053Z"
+      android:fillColor="#093F68"/>
+  <path
+      android:pathData="M152.404,116.754H23.053C21.796,116.754 20.59,117.253 19.701,118.142C18.812,119.031 18.313,120.237 18.313,121.494C18.313,122.751 18.812,123.957 19.701,124.846C20.59,125.735 21.796,126.234 23.053,126.234H152.404V116.754Z"
+      android:fillColor="#95DE2D"/>
+  <path
+      android:pathData="M152.404,127.208H23.053C21.527,127.208 20.063,126.602 18.983,125.523C17.904,124.443 17.298,122.98 17.298,121.453C17.298,119.927 17.904,118.463 18.983,117.384C20.063,116.305 21.527,115.698 23.053,115.698H152.404C152.674,115.698 152.932,115.805 153.122,115.996C153.313,116.186 153.419,116.444 153.419,116.713V126.193C153.419,126.463 153.313,126.721 153.122,126.911C152.932,127.101 152.674,127.208 152.404,127.208ZM23.053,117.769C22.065,117.769 21.118,118.161 20.419,118.86C19.72,119.558 19.328,120.506 19.328,121.494C19.328,122.482 19.72,123.429 20.419,124.128C21.118,124.826 22.065,125.219 23.053,125.219H151.389V117.769H23.053Z"
+      android:fillColor="#093F68"/>
+  <path
+      android:pathData="M130.216,60.807C130.187,60.04 129.905,59.305 129.415,58.714C128.925,58.123 128.254,57.71 127.506,57.539C126.197,57.255 124.878,57.042 123.548,56.839C123.367,56.824 123.194,56.754 123.054,56.638C122.914,56.521 122.814,56.365 122.766,56.189C122.37,55.174 121.934,54.098 121.477,53.063C121.403,52.941 121.37,52.798 121.383,52.655C121.395,52.513 121.454,52.378 121.548,52.271C122.34,51.175 123.152,50.089 123.893,48.952C124.319,48.313 124.521,47.55 124.465,46.784C124.41,46.017 124.102,45.291 123.588,44.72C122.381,43.39 121.081,42.141 119.813,40.863C119.186,40.152 118.31,39.708 117.366,39.623C116.422,39.538 115.481,39.818 114.738,40.406C113.743,41.083 112.758,41.783 111.784,42.507C111.678,42.603 111.544,42.663 111.402,42.678C111.259,42.692 111.116,42.661 110.992,42.588C109.876,42.091 108.749,41.573 107.602,41.197C107.465,41.159 107.342,41.078 107.251,40.968C107.161,40.857 107.106,40.721 107.095,40.578C106.902,39.37 106.699,38.163 106.496,36.955C106.371,36.105 105.952,35.326 105.312,34.753C104.673,34.18 103.852,33.85 102.994,33.819C101.127,33.768 99.259,33.819 97.401,33.819C96.609,33.833 95.844,34.113 95.23,34.613C94.615,35.114 94.186,35.806 94.011,36.579C93.717,37.939 93.514,39.31 93.281,40.639C93.267,40.781 93.211,40.916 93.121,41.026C93.03,41.136 92.909,41.217 92.773,41.258C91.677,41.685 90.601,42.152 89.525,42.629C89.411,42.699 89.278,42.73 89.145,42.719C89.011,42.708 88.885,42.655 88.784,42.568C87.708,41.766 86.632,40.974 85.516,40.233C84.873,39.796 84.103,39.585 83.327,39.634C82.551,39.684 81.814,39.991 81.232,40.507C79.812,41.806 78.431,43.167 77.173,44.567C76.555,45.193 76.189,46.025 76.146,46.903C76.103,47.781 76.385,48.645 76.939,49.328C77.66,50.343 78.421,51.358 79.142,52.454C79.188,52.539 79.216,52.632 79.224,52.728C79.233,52.824 79.222,52.921 79.192,53.012C78.746,54.179 78.279,55.347 77.782,56.504C77.737,56.59 77.676,56.666 77.601,56.727C77.525,56.788 77.438,56.833 77.345,56.859C76.137,57.082 74.929,57.285 73.721,57.478C72.854,57.569 72.047,57.966 71.446,58.599C70.845,59.231 70.489,60.058 70.443,60.929C70.382,62.868 70.392,64.817 70.443,66.765C70.48,67.524 70.762,68.249 71.247,68.834C71.732,69.418 72.394,69.828 73.133,70.003C74.513,70.318 75.924,70.531 77.325,70.765C77.458,70.776 77.585,70.828 77.688,70.913C77.792,70.998 77.867,71.113 77.903,71.242C78.34,72.358 78.817,73.444 79.304,74.54C79.368,74.649 79.395,74.776 79.382,74.902C79.369,75.028 79.317,75.146 79.233,75.241C78.502,76.256 77.761,77.271 77.061,78.286C76.51,79.011 76.249,79.916 76.328,80.824C76.406,81.732 76.82,82.578 77.487,83.198C78.654,84.386 79.832,85.573 81.019,86.73C81.652,87.437 82.533,87.872 83.479,87.944C84.425,88.016 85.362,87.719 86.094,87.116C87.109,86.406 88.124,85.685 89.139,84.954C89.232,84.877 89.346,84.831 89.466,84.822C89.586,84.813 89.706,84.841 89.809,84.903C90.824,85.35 91.839,85.786 92.925,86.182C93.087,86.227 93.23,86.322 93.334,86.453C93.438,86.585 93.497,86.746 93.504,86.913C93.687,88.111 93.89,89.298 94.093,90.486C94.203,91.315 94.597,92.08 95.208,92.652C95.818,93.224 96.608,93.566 97.442,93.622C99.401,93.693 101.36,93.683 103.319,93.622C104.087,93.585 104.822,93.297 105.411,92.802C105.999,92.307 106.409,91.632 106.577,90.882C106.861,89.562 107.064,88.223 107.288,86.883C107.296,86.725 107.353,86.574 107.452,86.45C107.55,86.326 107.684,86.236 107.836,86.192C108.942,85.766 110.018,85.32 111.094,84.842C111.206,84.781 111.333,84.755 111.46,84.768C111.587,84.78 111.707,84.831 111.804,84.914C112.819,85.644 113.834,86.355 114.849,87.086C115.559,87.599 116.42,87.86 117.295,87.827C118.107,87.818 118.885,87.498 119.468,86.933C120.746,85.726 121.985,84.467 123.233,83.229C123.962,82.598 124.417,81.708 124.503,80.748C124.588,79.788 124.296,78.832 123.69,78.083C123.013,77.088 122.313,76.103 121.589,75.129C121.506,75.032 121.456,74.912 121.443,74.785C121.43,74.658 121.456,74.53 121.518,74.418C121.995,73.332 122.452,72.236 122.888,71.12C122.928,70.982 123.01,70.859 123.123,70.77C123.236,70.681 123.374,70.629 123.517,70.622C124.725,70.44 125.933,70.237 127.141,70.034C127.993,69.92 128.777,69.509 129.356,68.874C129.936,68.24 130.272,67.421 130.308,66.562C130.267,64.634 130.267,62.715 130.216,60.807ZM100.304,76.611C97.75,76.607 95.255,75.845 93.134,74.423C91.013,73.001 89.361,70.981 88.388,68.62C87.415,66.258 87.164,63.662 87.667,61.158C88.17,58.654 89.404,56.355 91.213,54.553C93.023,52.75 95.326,51.525 97.832,51.032C100.338,50.539 102.934,50.8 105.291,51.783C107.649,52.765 109.662,54.425 111.076,56.551C112.49,58.678 113.242,61.177 113.235,63.73C113.225,67.152 111.857,70.43 109.433,72.844C107.009,75.259 103.726,76.614 100.304,76.611V76.611Z"
+      android:strokeLineJoin="round"
+      android:strokeWidth="2.03"
+      android:fillColor="#00000000"
+      android:strokeColor="#95DE2D"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M100.325,103.366C100.056,103.366 99.797,103.259 99.607,103.069C99.417,102.878 99.31,102.62 99.31,102.351C99.31,102.082 99.417,101.824 99.607,101.633C99.797,101.443 100.056,101.336 100.325,101.336C110.298,101.325 119.859,97.359 126.911,90.307C133.963,83.255 137.93,73.693 137.941,63.72C137.941,63.451 138.048,63.193 138.238,63.002C138.428,62.812 138.687,62.705 138.956,62.705C139.225,62.705 139.483,62.812 139.673,63.002C139.864,63.193 139.971,63.451 139.971,63.72C139.96,74.231 135.78,84.309 128.347,91.742C120.914,99.175 110.836,103.355 100.325,103.366Z"
+      android:fillColor="#ffffff"/>
+  <path
+      android:pathData="M61.684,64.735C61.415,64.735 61.156,64.629 60.966,64.438C60.776,64.248 60.669,63.99 60.669,63.721C60.679,53.206 64.861,43.126 72.296,35.691C79.73,28.257 89.811,24.075 100.325,24.065C100.594,24.065 100.852,24.171 101.042,24.362C101.233,24.552 101.34,24.81 101.34,25.08C101.34,25.349 101.233,25.607 101.042,25.797C100.852,25.987 100.594,26.094 100.325,26.094C90.349,26.105 80.785,30.073 73.731,37.127C66.677,44.181 62.709,53.745 62.699,63.721C62.699,63.99 62.592,64.248 62.401,64.438C62.211,64.629 61.953,64.735 61.684,64.735Z"
+      android:fillColor="#ffffff"/>
+  <path
+      android:pathData="M95.818,31.159C95.667,31.16 95.517,31.126 95.38,31.061C95.243,30.996 95.122,30.902 95.026,30.784C94.942,30.68 94.879,30.56 94.841,30.432C94.803,30.304 94.791,30.17 94.805,30.037C94.819,29.904 94.86,29.775 94.924,29.657C94.988,29.54 95.075,29.436 95.179,29.353L100.254,25.293L94.955,22.562C94.718,22.439 94.539,22.227 94.457,21.972C94.376,21.717 94.398,21.441 94.519,21.202C94.579,21.083 94.663,20.976 94.764,20.889C94.866,20.801 94.984,20.735 95.111,20.694C95.239,20.652 95.373,20.636 95.506,20.647C95.64,20.657 95.77,20.694 95.889,20.756L102.568,24.197C102.717,24.275 102.844,24.389 102.938,24.529C103.032,24.669 103.09,24.83 103.106,24.998C103.124,25.166 103.1,25.335 103.036,25.491C102.972,25.647 102.871,25.785 102.741,25.892L96.468,30.966C96.277,31.098 96.05,31.166 95.818,31.159Z"
+      android:fillColor="#ffffff"/>
+  <path
+      android:pathData="M105.968,107.406C105.82,107.407 105.674,107.372 105.542,107.304L98.224,103.914C98.071,103.843 97.938,103.736 97.837,103.601C97.736,103.467 97.67,103.309 97.645,103.143C97.62,102.974 97.637,102.803 97.696,102.643C97.755,102.483 97.852,102.341 97.98,102.229L104.507,96.515C104.71,96.351 104.969,96.271 105.23,96.294C105.491,96.316 105.732,96.438 105.905,96.634C106.078,96.831 106.168,97.086 106.157,97.348C106.146,97.609 106.035,97.856 105.846,98.037L100.497,102.726L106.394,105.467C106.606,105.563 106.778,105.729 106.882,105.937C106.985,106.145 107.015,106.382 106.965,106.609C106.915,106.835 106.789,107.038 106.608,107.183C106.426,107.328 106.2,107.407 105.968,107.406Z"
+      android:fillColor="#ffffff"/>
+  <path
+      android:pathData="M161.438,31.626H211.731V73.617C211.731,74.378 211.429,75.109 210.89,75.648C210.351,76.186 209.621,76.489 208.859,76.489H164.31C163.549,76.489 162.818,76.186 162.279,75.648C161.741,75.109 161.438,74.378 161.438,73.617V31.626Z"
+      android:fillColor="#435B77"/>
+  <path
+      android:pathData="M164.31,25.109H208.859C209.621,25.109 210.351,25.412 210.89,25.951C211.429,26.489 211.731,27.22 211.731,27.982V31.626H161.438V27.982C161.438,27.22 161.741,26.489 162.279,25.951C162.818,25.412 163.549,25.109 164.31,25.109Z"
+      android:fillColor="#70CC40"/>
+  <path
+      android:pathData="M48.6,24.288H16.993C16.724,24.288 16.466,24.181 16.276,23.99C16.085,23.8 15.978,23.542 15.978,23.273C15.978,23.004 16.085,22.745 16.276,22.555C16.466,22.365 16.724,22.258 16.993,22.258H48.6C48.87,22.258 49.128,22.365 49.318,22.555C49.508,22.745 49.615,23.004 49.615,23.273C49.615,23.542 49.508,23.8 49.318,23.99C49.128,24.181 48.87,24.288 48.6,24.288Z"
+      android:fillColor="#DFEAEF"/>
+  <path
+      android:pathData="M36.4,34.803H16.993C16.724,34.803 16.466,34.696 16.276,34.506C16.085,34.316 15.978,34.058 15.978,33.788C15.978,33.519 16.085,33.261 16.276,33.071C16.466,32.88 16.724,32.773 16.993,32.773H36.4C36.669,32.773 36.927,32.88 37.118,33.071C37.308,33.261 37.415,33.519 37.415,33.788C37.415,34.058 37.308,34.316 37.118,34.506C36.927,34.696 36.669,34.803 36.4,34.803Z"
+      android:fillColor="#DFEAEF"/>
+  <path
+      android:pathData="M48.6,34.803H42.023C41.754,34.803 41.496,34.696 41.305,34.506C41.115,34.316 41.008,34.058 41.008,33.788C41.008,33.519 41.115,33.261 41.305,33.071C41.496,32.88 41.754,32.773 42.023,32.773H48.641C48.91,32.773 49.168,32.88 49.359,33.071C49.549,33.261 49.656,33.519 49.656,33.788C49.656,34.058 49.549,34.316 49.359,34.506C49.168,34.696 48.91,34.803 48.641,34.803H48.6Z"
+      android:fillColor="#DFEAEF"/>
+  <path
+      android:pathData="M26.697,47.328H16.993C16.724,47.328 16.466,47.221 16.276,47.031C16.085,46.84 15.978,46.582 15.978,46.313C15.978,46.044 16.085,45.785 16.276,45.595C16.466,45.405 16.724,45.298 16.993,45.298H26.697C26.966,45.298 27.224,45.405 27.414,45.595C27.605,45.785 27.712,46.044 27.712,46.313C27.712,46.582 27.605,46.84 27.414,47.031C27.224,47.221 26.966,47.328 26.697,47.328Z"
+      android:fillColor="#DFEAEF"/>
+  <path
+      android:pathData="M182.337,90.588H143.148C142.878,90.588 142.62,90.481 142.43,90.29C142.24,90.1 142.133,89.842 142.133,89.573C142.133,89.303 142.24,89.045 142.43,88.855C142.62,88.665 142.878,88.558 143.148,88.558H182.337C182.606,88.558 182.864,88.665 183.054,88.855C183.245,89.045 183.352,89.303 183.352,89.573C183.352,89.842 183.245,90.1 183.054,90.29C182.864,90.481 182.606,90.588 182.337,90.588Z"
+      android:fillColor="#DFEAEF"/>
+  <path
+      android:pathData="M182.337,100.859H164.432C164.163,100.859 163.905,100.752 163.715,100.562C163.524,100.371 163.417,100.113 163.417,99.844C163.417,99.575 163.524,99.317 163.715,99.126C163.905,98.936 164.163,98.829 164.432,98.829H182.337C182.606,98.829 182.864,98.936 183.055,99.126C183.245,99.317 183.352,99.575 183.352,99.844C183.352,100.113 183.245,100.371 183.055,100.562C182.864,100.752 182.606,100.859 182.337,100.859Z"
+      android:fillColor="#DFEAEF"/>
+  <path
+      android:pathData="M152.404,100.859H143.148C142.878,100.859 142.62,100.752 142.43,100.562C142.24,100.371 142.133,100.113 142.133,99.844C142.133,99.575 142.24,99.317 142.43,99.126C142.62,98.936 142.878,98.829 143.148,98.829H152.404C152.674,98.829 152.932,98.936 153.122,99.126C153.312,99.317 153.419,99.575 153.419,99.844C153.419,100.113 153.312,100.371 153.122,100.562C152.932,100.752 152.674,100.859 152.404,100.859Z"
+      android:fillColor="#DFEAEF"/>
+</vector>
diff --git a/mailbox-android/src/main/res/drawable/ic_restore_mirrored_white.xml b/mailbox-android/src/main/res/drawable/ic_restore_mirrored_white.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f46d4520e620e5227b704a45432da2746384de0d
--- /dev/null
+++ b/mailbox-android/src/main/res/drawable/ic_restore_mirrored_white.xml
@@ -0,0 +1,13 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="48dp"
+    android:height="48dp"
+    android:viewportWidth="48"
+    android:viewportHeight="48">
+  <path
+      android:fillColor="#FFFFFFFF"
+      android:pathData="m22.01,6c9.95,0 17.99,8.06 17.99,18h6l-7.79,7.79 -0.14,0.29 -8.07,-8.08h6c0,-7.73 -6.27,-14 -14,-14 -7.73,0 -14,6.27 -14,14 0,7.73 6.27,14 14,14 3.87,0 7.36,-1.58 9.89,-4.11l2.83,2.83c-3.25,3.26 -7.74,5.28 -12.71,5.28 -9.95,0 -18.01,-8.06 -18.01,-18 0,-9.94 8.06,-18 18.01,-18z"
+      android:strokeWidth="0.99999994"/>
+  <path
+      android:fillColor="#FFFFFFFF"
+      android:pathData="M20,16V26L28.56,31.08 30,28.65 23,24.5V16Z"/>
+</vector>
diff --git a/mailbox-android/src/main/res/layout/fragment_dont_kill_me2.xml b/mailbox-android/src/main/res/layout/fragment_dont_kill_me2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e5d88b104468c1d5b85c7ea7250f03265ad4378b
--- /dev/null
+++ b/mailbox-android/src/main/res/layout/fragment_dont_kill_me2.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ScrollView 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"
+    android:fillViewport="true">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:padding="16dp">
+
+        <ImageView
+            android:id="@+id/illustration"
+            android:layout_width="0dp"
+            android:layout_height="168dp"
+            android:layout_marginHorizontal="32dp"
+            android:layout_marginVertical="24dp"
+            app:layout_constraintBottom_toTopOf="@+id/divider"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:srcCompat="@drawable/ic_permissions"
+            tools:ignore="ContentDescription" />
+
+        <com.google.android.material.divider.MaterialDivider
+            android:id="@+id/divider"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="24dp"
+            android:layout_marginBottom="16dp"
+            app:layout_constraintBottom_toTopOf="@+id/dozeView"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/illustration" />
+
+        <org.briarproject.mailbox.android.dontkillme.DozeView
+            android:id="@+id/dozeView"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="24dp"
+            android:paddingBottom="16dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/divider" />
+
+        <org.briarproject.mailbox.android.dontkillme.HuaweiProtectedAppsView
+            android:id="@+id/huaweiProtectedAppsView"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="24dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/dozeView" />
+
+        <org.briarproject.mailbox.android.dontkillme.HuaweiAppLaunchView
+            android:id="@+id/huaweiAppLaunchView"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="24dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/huaweiProtectedAppsView" />
+
+        <org.briarproject.mailbox.android.dontkillme.XiaomiView
+            android:id="@+id/xiaomiView"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="24dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/huaweiAppLaunchView" />
+
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/next"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="24dp"
+            android:enabled="false"
+            android:text="@string/create_account_button"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/xiaomiView"
+            app:layout_constraintVertical_bias="1.0"
+            tools:enabled="true" />
+
+        <ProgressBar
+            android:id="@+id/progress"
+            style="?android:attr/progressBarStyle"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:visibility="invisible"
+            app:layout_constraintBottom_toBottomOf="@+id/next"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/next" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</ScrollView>
diff --git a/mailbox-android/src/main/res/layout/power_view2.xml b/mailbox-android/src/main/res/layout/power_view2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ed868eb9c4fcce4e1d9141c6bdd48f889626a5d2
--- /dev/null
+++ b/mailbox-android/src/main/res/layout/power_view2.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<merge 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="wrap_content"
+    tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
+
+    <TextView
+        android:id="@+id/textView"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:textSize="16sp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@+id/icon"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:text="@string/setup_huawei_text" />
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:id="@+id/icon"
+        style="@style/PowerIcon"
+        android:layout_width="48dp"
+        android:layout_height="48dp"
+        android:layout_marginEnd="12dp"
+        android:layout_marginRight="12dp"
+        android:contentDescription="@string/help"
+        android:padding="12dp"
+        app:layout_constraintBottom_toBottomOf="@+id/textView"
+        app:layout_constraintEnd_toStartOf="@+id/textView"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="@+id/textView"
+        app:srcCompat="@drawable/ic_help_outline_white" />
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:id="@+id/checkImage"
+        android:layout_width="24dp"
+        android:layout_height="24dp"
+        android:layout_margin="8dp"
+        android:visibility="invisible"
+        app:layout_constraintBottom_toBottomOf="@+id/button"
+        app:layout_constraintEnd_toStartOf="@id/button"
+        app:layout_constraintTop_toTopOf="@+id/button"
+        app:srcCompat="@drawable/ic_check_white"
+        app:tint="?attr/colorControlNormal"
+        tools:ignore="ContentDescription" />
+
+    <com.google.android.material.button.MaterialButton
+        android:id="@+id/button"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginHorizontal="4dp"
+        android:layout_marginVertical="12dp"
+        app:layout_constraintEnd_toStartOf="@+id/helpButton"
+        app:layout_constraintStart_toEndOf="@+id/icon"
+        app:layout_constraintTop_toBottomOf="@+id/textView"
+        tools:text="@string/setup_huawei_button" />
+
+    <ImageButton
+        android:id="@+id/helpButton"
+        style="@style/HelpButton"
+        android:layout_width="48dp"
+        android:layout_height="48dp"
+        android:background="?attr/selectableItemBackgroundBorderless"
+        android:contentDescription="@string/help"
+        app:layout_constraintBottom_toBottomOf="@+id/button"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="@+id/button"
+        app:srcCompat="@drawable/ic_help_outline_white" />
+
+    <com.google.android.material.divider.MaterialDivider
+        android:id="@+id/divider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="24dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/button" />
+
+</merge>
diff --git a/mailbox-android/src/main/res/navigation/nav_main.xml b/mailbox-android/src/main/res/navigation/nav_main.xml
index 2a91515276cb7f5c93beb2eefed9db87642dba9e..3f7bee7ff9790e6e282d9838aff503277fe21527 100644
--- a/mailbox-android/src/main/res/navigation/nav_main.xml
+++ b/mailbox-android/src/main/res/navigation/nav_main.xml
@@ -14,6 +14,6 @@
     </fragment>
     <fragment
         android:id="@+id/doNotKillMeFragment"
-        android:name="org.briarproject.mailbox.android.DoNotKillMeFragment"
+        android:name="org.briarproject.mailbox.android.dontkillme.DoNotKillMeFragment"
         android:label="DoNotKillMeFragment" />
 </navigation>
diff --git a/mailbox-android/src/main/res/values/colors.xml b/mailbox-android/src/main/res/values/colors.xml
index a0aca040da2567448f5db9852c16e3baed8963e7..a1f4b1ae336702af40d4e1bfabf6352ece5c371e 100644
--- a/mailbox-android/src/main/res/values/colors.xml
+++ b/mailbox-android/src/main/res/values/colors.xml
@@ -2,6 +2,7 @@
 <resources>
     <color name="briar_green">#74B816</color>
     <color name="briar_night">#435B77</color>
+    <color name="briar_night_800">#212d3b</color>
     <color name="briar_blue">#1F78D1</color>
     <color name="briar_blue_dark">#1A222D</color>
 
diff --git a/mailbox-android/src/main/res/values/styles.xml b/mailbox-android/src/main/res/values/styles.xml
index e547d159db5ad01f164b7431e754dadc57e4ab0b..679e8d58cb2f759afbdbd7ca60160a5a7a24ec3a 100644
--- a/mailbox-android/src/main/res/values/styles.xml
+++ b/mailbox-android/src/main/res/values/styles.xml
@@ -5,4 +5,14 @@
         <item name="android:textColor">?attr/colorSecondary</item>
     </style>
 
-</resources>
\ No newline at end of file
+    <style name="PowerIcon">
+        <item name="android:background">@drawable/ic_circle</item>
+        <!-- Figma had #222E3C as backgroundTint, but the style guide's closest is this -->
+        <item name="backgroundTint">@color/briar_night_800</item>
+    </style>
+
+    <style name="HelpButton" parent="Widget.AppCompat.Button.Borderless">
+        <item name="android:tint">#418cd8</item>
+    </style>
+
+</resources>