diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 35086ea2..3f704ba7 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -49,6 +49,9 @@ android:name="lineageos.permission.FINISH_SETUP" android:protectionLevel="signatureOrSystem" /> + + diff --git a/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java b/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java index 6fb36e46..da9f9b46 100644 --- a/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java +++ b/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java @@ -17,12 +17,14 @@ package org.lineageos.setupwizard; +import static android.view.View.INVISIBLE; import static com.google.android.setupcompat.util.ResultCodes.RESULT_ACTIVITY_NOT_FOUND; import static com.google.android.setupcompat.util.ResultCodes.RESULT_RETRY; import static com.google.android.setupcompat.util.ResultCodes.RESULT_SKIP; import static org.lineageos.setupwizard.SetupWizardApp.ACTION_EMERGENCY_DIAL; import static org.lineageos.setupwizard.SetupWizardApp.ACTION_NEXT; +import static org.lineageos.setupwizard.SetupWizardApp.ACTION_SETUP_COMPLETE; import static org.lineageos.setupwizard.SetupWizardApp.EXTRA_ACTION_ID; import static org.lineageos.setupwizard.SetupWizardApp.EXTRA_FIRST_RUN; import static org.lineageos.setupwizard.SetupWizardApp.EXTRA_HAS_MULTIPLE_USERS; @@ -36,7 +38,10 @@ import android.annotation.Nullable; import android.app.Activity; import android.app.ActivityManager; import android.content.ActivityNotFoundException; +import android.content.BroadcastReceiver; +import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.net.wifi.WifiManager; @@ -91,6 +96,18 @@ public abstract class BaseSetupWizardActivity extends Activity implements Naviga private boolean mIsPrimaryUser; protected int mResultCode = 0; private Intent mResultData; + private final BroadcastReceiver finishReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (ACTION_SETUP_COMPLETE.equals(intent.getAction())) { + if (BaseSetupWizardActivity.this instanceof FinishActivity) return; + if (mNavigationBar != null) { + // hide the activity's view, so it does not pop up again + mNavigationBar.getRootView().setVisibility(INVISIBLE); + } + } + } + }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -98,6 +115,7 @@ public abstract class BaseSetupWizardActivity extends Activity implements Naviga logActivityState("onCreate savedInstanceState=" + savedInstanceState); } super.onCreate(savedInstanceState); + registerReceiver(finishReceiver, new IntentFilter(ACTION_SETUP_COMPLETE)); mIsPrimaryUser = UserHandle.myUserId() == 0; initLayout(); mNavigationBar = getNavigationBar(); @@ -169,6 +187,7 @@ public abstract class BaseSetupWizardActivity extends Activity implements Naviga if (LOGV) { logActivityState("onDestroy"); } + unregisterReceiver(finishReceiver); super.onDestroy(); } @@ -307,7 +326,7 @@ public abstract class BaseSetupWizardActivity extends Activity implements Naviga Animation fadeOut = AnimationUtils.loadAnimation(this, android.R.anim.fade_out); final Button next = mNavigationBar.getNextButton(); next.startAnimation(fadeOut); - next.setVisibility(View.INVISIBLE); + next.setVisibility(INVISIBLE); } } @@ -515,7 +534,7 @@ public abstract class BaseSetupWizardActivity extends Activity implements Naviga Animation fadeOut = AnimationUtils.loadAnimation(this, android.R.anim.fade_out); final Button back = mNavigationBar.getBackButton(); back.startAnimation(fadeOut); - back.setVisibility(View.INVISIBLE); + back.setVisibility(INVISIBLE); } } diff --git a/src/org/lineageos/setupwizard/FinishActivity.java b/src/org/lineageos/setupwizard/FinishActivity.java index 6aadea2b..74e09a41 100644 --- a/src/org/lineageos/setupwizard/FinishActivity.java +++ b/src/org/lineageos/setupwizard/FinishActivity.java @@ -17,6 +17,7 @@ package org.lineageos.setupwizard; +import static org.lineageos.setupwizard.SetupWizardApp.ACTION_SETUP_COMPLETE; import static org.lineageos.setupwizard.SetupWizardApp.DISABLE_NAV_KEYS; import static org.lineageos.setupwizard.SetupWizardApp.KEY_BUTTON_BACKLIGHT; import static org.lineageos.setupwizard.SetupWizardApp.KEY_SEND_METRICS; @@ -45,6 +46,9 @@ import org.lineageos.setupwizard.util.EnableAccessibilityController; import lineageos.providers.LineageSettings; +import static android.os.Binder.getCallingUserHandle; +import static org.lineageos.setupwizard.Manifest.permission.FINISH_SETUP; + public class FinishActivity extends BaseSetupWizardActivity { public static final String TAG = FinishActivity.class.getSimpleName(); @@ -100,6 +104,10 @@ public class FinishActivity extends BaseSetupWizardActivity { } private void startFinishSequence() { + Intent i = new Intent(ACTION_SETUP_COMPLETE); + i.setPackage(getPackageName()); + sendBroadcastAsUser(i, getCallingUserHandle(), FINISH_SETUP); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); hideBackButton(); hideNextButton(); diff --git a/src/org/lineageos/setupwizard/SetupWizardApp.java b/src/org/lineageos/setupwizard/SetupWizardApp.java index afab72d1..57c992ba 100644 --- a/src/org/lineageos/setupwizard/SetupWizardApp.java +++ b/src/org/lineageos/setupwizard/SetupWizardApp.java @@ -35,6 +35,7 @@ public class SetupWizardApp extends Application { /* Verbose Logging */ public static final boolean LOGV = Log.isLoggable(TAG, Log.VERBOSE); + public static final String ACTION_SETUP_COMPLETE = "org.lineageos.setupwizard.LINEAGE_SETUP_COMPLETE"; public static final String ACTION_FINISHED = "org.lineageos.setupwizard.SETUP_FINISHED"; public static final String ACTION_SETUP_WIFI = "android.net.wifi.PICK_WIFI_NETWORK"; public static final String ACTION_SETUP_FINGERPRINT = "android.settings.FINGERPRINT_SETUP";