Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2b90a7f7 authored by Michael W's avatar Michael W Committed by Bruno Martins
Browse files

SetupWizard: Add device specific hook page

* Add a new activity DeviceSpecificActivity which acts as a jumppad
  into an activity using "org.lineageos.settings.device.SUW_SETTINGS"
  * Handles navigation (back / next)
  * Handles cases where the script contains the page but SUW_SETTINGS
    don't exist
* In order to use this, devices need to provide an activity that:
  * at least shows a back and continue button
  * returns Activity.RESULT_OK and Activity.RESULT_CANCELLED for the
    buttons
  * does whatever you need to specifically have done in setup!

Change-Id: I4956c8f5f1ad13b9adf2e5604fd4a728e261336b
parent da735e0a
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
     Copyright (C) 2013 The CyanogenMod Project
     Copyright (C) 2017,2019 The LineageOS Project
     Copyright (C) 2017-2021 The LineageOS Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
@@ -235,6 +235,17 @@
            </intent-filter>
        </activity>

        <activity android:name=".DeviceSpecificActivity"
                  android:label="@string/activity_label_empty"
                  android:excludeFromRecents="true"
                  android:immersive="true"
                  android:windowSoftInputMode="stateAlwaysHidden">
            <intent-filter>
                <action android:name="org.lineageos.setupwizard.DEVICE_SPECIFIC"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

        <activity android:name=".LineageSettingsActivity"
                  android:label="@string/activity_label_empty"
                  android:excludeFromRecents="true"
+23 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
     Copyright (C) 2021 The LineageOS Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/primary" />
+4 −0
Original line number Diff line number Diff line
@@ -54,6 +54,10 @@
    </WizardAction>

    <WizardAction wizard:uri="intent:#Intent;action=org.lineageos.setupwizard.LINEAGE_LOCATION_SETTINGS;end" id="location_settings">
        <result wizard:action="device_specific" />
    </WizardAction>

    <WizardAction wizard:uri="intent:#Intent;action=org.lineageos.setupwizard.DEVICE_SPECIFIC;end" id="device_specific">
        <result wizard:action="recovery_update" />
    </WizardAction>

+4 −1
Original line number Diff line number Diff line
@@ -98,7 +98,10 @@
        <result wizard:action="oem_post_setup" />
    </WizardAction>
    <WizardAction wizard:script="android.resource://com.google.android.setupwizard/xml/wizard_script_qr_provision_flow" id="qr_provision_flow" />
    <WizardAction wizard:uri="intent:#Intent;action=org.lineageos.setupwizard.LINEAGE_RECOVERY_UPDATE;end" id="oem_post_setup">
    <WizardAction wizard:uri="intent:#Intent;action=org.lineageos.setupwizard.DEVICE_SPECIFIC;end" id="oem_post_setup">
        <result wizard:action="recovery_update" />
    </WizardAction>
    <WizardAction wizard:uri="intent:#Intent;action=org.lineageos.setupwizard.LINEAGE_RECOVERY_UPDATE;end" id="recovery_update">
        <result wizard:action="lineage_settings" />
    </WizardAction>
    <WizardAction wizard:uri="intent:#Intent;action=org.lineageos.setupwizard.LINEAGE_SETTINGS;end" id="lineage_settings">
+76 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 The LineageOS Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License
 */

package org.lineageos.setupwizard;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;

import com.google.android.setupcompat.util.WizardManagerHelper;

import org.lineageos.setupwizard.util.SetupWizardUtils;

public class DeviceSpecificActivity extends BaseSetupWizardActivity {

    private static final String ACTION_SETUP_DEVICE = "org.lineageos.settings.device.SUW_SETTINGS";
    private static final int REQUEST_CODE_SETUP_DEVICE = 90000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        onStartSubactivity();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE_SETUP_DEVICE) {
            if (resultCode == RESULT_OK) {
                goToNextPage();
            } else {
                finish();
            }
        } else if (resultCode == RESULT_CANCELED) {
            onStartSubactivity();
            applyBackwardTransition(TRANSITION_ID_NONE);
        }
    }

    @Override
    protected int getLayoutResId() {
        return R.layout.setup_device_specific;
    }

    private void onStartSubactivity() {
        Intent intent = new Intent(ACTION_SETUP_DEVICE);
        ComponentName name = intent.resolveActivity(getPackageManager());
        if (name != null) {
            applyForwardTransition(TRANSITION_ID_SLIDE);
            startActivityForResult(intent, REQUEST_CODE_SETUP_DEVICE);
        } else {
            SetupWizardUtils.disableComponent(this, DeviceSpecificActivity.class);
            goToNextPage();
            finish();
        }
    }

    private void goToNextPage() {
        applyForwardTransition(TRANSITION_ID_SLIDE);
        Intent intent = WizardManagerHelper.getNextIntent(getIntent(), Activity.RESULT_OK);
        nextAction(NEXT_REQUEST, intent);
    }
}