Simplify exit code
Change-Id: Ied4a7cb143ef979fd70da81cda6472f85e750739
This commit is contained in:
committed by
Michael Bestas
parent
3616338149
commit
ecaeda6224
@@ -21,7 +21,6 @@ android_app {
|
|||||||
|
|
||||||
static_libs: [
|
static_libs: [
|
||||||
"androidx.activity_activity",
|
"androidx.activity_activity",
|
||||||
"androidx.work_work-runtime-ktx",
|
|
||||||
"SettingsLib",
|
"SettingsLib",
|
||||||
"setupcompat",
|
"setupcompat",
|
||||||
"setupdesign",
|
"setupdesign",
|
||||||
|
@@ -324,9 +324,5 @@
|
|||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
<service
|
|
||||||
android:name=".SetupWizardExitWorker"
|
|
||||||
android:exported="false" />
|
|
||||||
</application>
|
</application>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
<WizardAction
|
<WizardAction
|
||||||
wizard:uri="intent:#Intent;action=org.lineageos.setupwizard.LINEAGE_WELCOME;end"
|
wizard:uri="intent:#Intent;action=org.lineageos.setupwizard.LINEAGE_WELCOME;end"
|
||||||
id="welcome">
|
id="welcome">
|
||||||
|
<result wizard:name="skip" wizard:resultCode="1" />
|
||||||
<result wizard:action="locale" />
|
<result wizard:action="locale" />
|
||||||
</WizardAction>
|
</WizardAction>
|
||||||
|
|
||||||
|
@@ -11,6 +11,7 @@
|
|||||||
<WizardAction
|
<WizardAction
|
||||||
wizard:uri="intent:#Intent;action=org.lineageos.setupwizard.LINEAGE_WELCOME;end"
|
wizard:uri="intent:#Intent;action=org.lineageos.setupwizard.LINEAGE_WELCOME;end"
|
||||||
id="welcome">
|
id="welcome">
|
||||||
|
<result wizard:name="skip" wizard:resultCode="1" />
|
||||||
<result wizard:action="restore" />
|
<result wizard:action="restore" />
|
||||||
</WizardAction>
|
</WizardAction>
|
||||||
|
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
<WizardAction
|
<WizardAction
|
||||||
wizard:uri="intent:#Intent;action=org.lineageos.setupwizard.LINEAGE_WELCOME;end"
|
wizard:uri="intent:#Intent;action=org.lineageos.setupwizard.LINEAGE_WELCOME;end"
|
||||||
id="welcome">
|
id="welcome">
|
||||||
|
<result wizard:name="skip" wizard:resultCode="1" />
|
||||||
<result wizard:action="restore" />
|
<result wizard:action="restore" />
|
||||||
</WizardAction>
|
</WizardAction>
|
||||||
|
|
||||||
|
@@ -10,15 +10,11 @@ import static android.view.View.INVISIBLE;
|
|||||||
|
|
||||||
import static com.google.android.setupcompat.util.ResultCodes.RESULT_SKIP;
|
import static com.google.android.setupcompat.util.ResultCodes.RESULT_SKIP;
|
||||||
|
|
||||||
import static org.lineageos.setupwizard.SetupWizardApp.ACTION_SETUP_COMPLETE;
|
|
||||||
import static org.lineageos.setupwizard.SetupWizardApp.LOGV;
|
import static org.lineageos.setupwizard.SetupWizardApp.LOGV;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.content.BroadcastReceiver;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -50,18 +46,6 @@ public abstract class BaseSetupWizardActivity extends AppCompatActivity implemen
|
|||||||
|
|
||||||
private NavigationLayout mNavigationBar;
|
private NavigationLayout mNavigationBar;
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
private final ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(
|
private final ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(
|
||||||
new ActivityResultContracts.StartActivityForResult(),
|
new ActivityResultContracts.StartActivityForResult(),
|
||||||
BaseSetupWizardActivity.this::onActivityResult);
|
BaseSetupWizardActivity.this::onActivityResult);
|
||||||
@@ -72,7 +56,6 @@ public abstract class BaseSetupWizardActivity extends AppCompatActivity implemen
|
|||||||
logActivityState("onCreate savedInstanceState=" + savedInstanceState);
|
logActivityState("onCreate savedInstanceState=" + savedInstanceState);
|
||||||
}
|
}
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
registerReceiver(finishReceiver, new IntentFilter(ACTION_SETUP_COMPLETE));
|
|
||||||
initLayout();
|
initLayout();
|
||||||
mNavigationBar = getNavigationBar();
|
mNavigationBar = getNavigationBar();
|
||||||
if (mNavigationBar != null) {
|
if (mNavigationBar != null) {
|
||||||
@@ -136,7 +119,6 @@ public abstract class BaseSetupWizardActivity extends AppCompatActivity implemen
|
|||||||
if (LOGV) {
|
if (LOGV) {
|
||||||
logActivityState("onDestroy");
|
logActivityState("onDestroy");
|
||||||
}
|
}
|
||||||
unregisterReceiver(finishReceiver);
|
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -253,7 +235,7 @@ public abstract class BaseSetupWizardActivity extends AppCompatActivity implemen
|
|||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final void nextAction(int resultCode) {
|
public final void nextAction(int resultCode) {
|
||||||
nextAction(resultCode, null);
|
nextAction(resultCode, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -6,86 +6,42 @@
|
|||||||
|
|
||||||
package org.lineageos.setupwizard;
|
package org.lineageos.setupwizard;
|
||||||
|
|
||||||
import static android.os.Binder.getCallingUserHandle;
|
|
||||||
import static android.os.UserHandle.USER_CURRENT;
|
|
||||||
|
|
||||||
import static org.lineageos.setupwizard.Manifest.permission.FINISH_SETUP;
|
|
||||||
import static org.lineageos.setupwizard.SetupWizardApp.ACTION_FINISHED;
|
|
||||||
import static org.lineageos.setupwizard.SetupWizardApp.ACTION_SETUP_COMPLETE;
|
|
||||||
import static org.lineageos.setupwizard.SetupWizardApp.DISABLE_NAV_KEYS;
|
|
||||||
import static org.lineageos.setupwizard.SetupWizardApp.ENABLE_RECOVERY_UPDATE;
|
|
||||||
import static org.lineageos.setupwizard.SetupWizardApp.KEY_SEND_METRICS;
|
|
||||||
import static org.lineageos.setupwizard.SetupWizardApp.LOGV;
|
import static org.lineageos.setupwizard.SetupWizardApp.LOGV;
|
||||||
import static org.lineageos.setupwizard.SetupWizardApp.NAVIGATION_OPTION_KEY;
|
|
||||||
import static org.lineageos.setupwizard.SetupWizardApp.UPDATE_RECOVERY_PROP;
|
|
||||||
|
|
||||||
import android.animation.Animator;
|
import android.animation.Animator;
|
||||||
import android.animation.AnimatorListenerAdapter;
|
import android.animation.AnimatorListenerAdapter;
|
||||||
import android.app.WallpaperManager;
|
|
||||||
import android.content.BroadcastReceiver;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.content.om.IOverlayManager;
|
|
||||||
import android.content.pm.ActivityInfo;
|
import android.content.pm.ActivityInfo;
|
||||||
import android.graphics.Bitmap;
|
|
||||||
import android.graphics.Point;
|
|
||||||
import android.graphics.Rect;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.os.SystemProperties;
|
|
||||||
import android.os.UserHandle;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewAnimationUtils;
|
import android.view.ViewAnimationUtils;
|
||||||
import android.view.ViewGroup.MarginLayoutParams;
|
import android.view.ViewGroup.MarginLayoutParams;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.widget.ImageView;
|
|
||||||
|
|
||||||
import androidx.core.graphics.Insets;
|
import androidx.core.graphics.Insets;
|
||||||
import androidx.core.view.ViewCompat;
|
import androidx.core.view.ViewCompat;
|
||||||
import androidx.core.view.WindowInsetsCompat;
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
|
|
||||||
import lineageos.providers.LineageSettings;
|
|
||||||
|
|
||||||
import org.lineageos.setupwizard.util.SetupWizardUtils;
|
import org.lineageos.setupwizard.util.SetupWizardUtils;
|
||||||
|
|
||||||
public class FinishActivity extends BaseSetupWizardActivity {
|
public class FinishActivity extends BaseSetupWizardActivity {
|
||||||
|
|
||||||
public static final String TAG = FinishActivity.class.getSimpleName();
|
public static final String TAG = FinishActivity.class.getSimpleName();
|
||||||
|
|
||||||
private ImageView mBackground;
|
|
||||||
|
|
||||||
private SetupWizardApp mSetupWizardApp;
|
|
||||||
|
|
||||||
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
||||||
|
|
||||||
private boolean mIsFinishing;
|
private boolean mIsFinishing;
|
||||||
|
|
||||||
private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
if (LOGV) {
|
|
||||||
Log.v(TAG, "onReceive intent=" + intent);
|
|
||||||
}
|
|
||||||
if (intent != null && intent.getAction().equals(ACTION_FINISHED)) {
|
|
||||||
unregisterReceiver(mIntentReceiver);
|
|
||||||
completeSetup();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
overridePendingTransition(R.anim.translucent_enter, R.anim.translucent_exit);
|
overrideActivityTransition(OVERRIDE_TRANSITION_CLOSE, R.anim.translucent_enter,
|
||||||
|
R.anim.translucent_exit);
|
||||||
if (LOGV) {
|
if (LOGV) {
|
||||||
logActivityState("onCreate savedInstanceState=" + savedInstanceState);
|
logActivityState("onCreate savedInstanceState=" + savedInstanceState);
|
||||||
}
|
}
|
||||||
mSetupWizardApp = (SetupWizardApp) getApplication();
|
|
||||||
mBackground = findViewById(R.id.background);
|
|
||||||
setNextText(R.string.start);
|
setNextText(R.string.start);
|
||||||
|
|
||||||
// Edge-to-edge. Needed for the background view to fill the full screen.
|
// Edge-to-edge. Needed for the background view to fill the full screen.
|
||||||
@@ -126,15 +82,6 @@ public class FinishActivity extends BaseSetupWizardActivity {
|
|||||||
}
|
}
|
||||||
mIsFinishing = true;
|
mIsFinishing = true;
|
||||||
|
|
||||||
// Listen for completion from the exit service.
|
|
||||||
IntentFilter filter = new IntentFilter();
|
|
||||||
filter.addAction(ACTION_FINISHED);
|
|
||||||
registerReceiver(mIntentReceiver, filter, null, null);
|
|
||||||
|
|
||||||
Intent i = new Intent(ACTION_SETUP_COMPLETE);
|
|
||||||
i.setPackage(getPackageName());
|
|
||||||
sendBroadcastAsUser(i, getCallingUserHandle(), FINISH_SETUP);
|
|
||||||
|
|
||||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
|
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
|
||||||
hideNextButton();
|
hideNextButton();
|
||||||
|
|
||||||
@@ -163,77 +110,10 @@ public class FinishActivity extends BaseSetupWizardActivity {
|
|||||||
if (LOGV) {
|
if (LOGV) {
|
||||||
Log.v(TAG, "Animation ended");
|
Log.v(TAG, "Animation ended");
|
||||||
}
|
}
|
||||||
// Start exit procedures, including the exit service.
|
SetupWizardUtils.finishSetupWizard(FinishActivity.this);
|
||||||
SetupWizardUtils.startSetupWizardExitProcedure(FinishActivity.this);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
anim.start();
|
anim.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void completeSetup() {
|
|
||||||
handleEnableMetrics(mSetupWizardApp);
|
|
||||||
handleNavKeys(mSetupWizardApp);
|
|
||||||
handleRecoveryUpdate(mSetupWizardApp);
|
|
||||||
handleNavigationOption(mSetupWizardApp);
|
|
||||||
final WallpaperManager wallpaperManager =
|
|
||||||
WallpaperManager.getInstance(mSetupWizardApp);
|
|
||||||
wallpaperManager.forgetLoadedWallpaper();
|
|
||||||
finishAffinity();
|
|
||||||
nextAction(RESULT_OK);
|
|
||||||
SetupWizardUtils.enableStatusBar();
|
|
||||||
Log.i(TAG, "Setup complete!");
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleEnableMetrics(SetupWizardApp setupWizardApp) {
|
|
||||||
Bundle privacyData = setupWizardApp.getSettingsBundle();
|
|
||||||
if (privacyData != null
|
|
||||||
&& privacyData.containsKey(KEY_SEND_METRICS)) {
|
|
||||||
LineageSettings.Secure.putInt(setupWizardApp.getContentResolver(),
|
|
||||||
LineageSettings.Secure.STATS_COLLECTION,
|
|
||||||
privacyData.getBoolean(KEY_SEND_METRICS)
|
|
||||||
? 1 : 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleNavKeys(SetupWizardApp setupWizardApp) {
|
|
||||||
if (setupWizardApp.getSettingsBundle().containsKey(DISABLE_NAV_KEYS)) {
|
|
||||||
writeDisableNavkeysOption(setupWizardApp,
|
|
||||||
setupWizardApp.getSettingsBundle().getBoolean(DISABLE_NAV_KEYS));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleRecoveryUpdate(SetupWizardApp setupWizardApp) {
|
|
||||||
if (setupWizardApp.getSettingsBundle().containsKey(ENABLE_RECOVERY_UPDATE)) {
|
|
||||||
boolean update = setupWizardApp.getSettingsBundle()
|
|
||||||
.getBoolean(ENABLE_RECOVERY_UPDATE);
|
|
||||||
|
|
||||||
SystemProperties.set(UPDATE_RECOVERY_PROP, String.valueOf(update));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleNavigationOption(Context context) {
|
|
||||||
Bundle settingsBundle = mSetupWizardApp.getSettingsBundle();
|
|
||||||
if (settingsBundle.containsKey(NAVIGATION_OPTION_KEY)) {
|
|
||||||
IOverlayManager overlayManager = IOverlayManager.Stub.asInterface(
|
|
||||||
ServiceManager.getService(Context.OVERLAY_SERVICE));
|
|
||||||
String selectedNavMode = settingsBundle.getString(NAVIGATION_OPTION_KEY);
|
|
||||||
|
|
||||||
try {
|
|
||||||
overlayManager.setEnabledExclusiveInCategory(selectedNavMode, USER_CURRENT);
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void writeDisableNavkeysOption(Context context, boolean enabled) {
|
|
||||||
final boolean virtualKeysEnabled = LineageSettings.System.getIntForUser(
|
|
||||||
context.getContentResolver(), LineageSettings.System.FORCE_SHOW_NAVBAR, 0,
|
|
||||||
UserHandle.USER_CURRENT) != 0;
|
|
||||||
if (enabled != virtualKeysEnabled) {
|
|
||||||
LineageSettings.System.putIntForUser(context.getContentResolver(),
|
|
||||||
LineageSettings.System.FORCE_SHOW_NAVBAR, enabled ? 1 : 0,
|
|
||||||
UserHandle.USER_CURRENT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -22,9 +22,6 @@ public class SetupWizardApp extends Application {
|
|||||||
// Verbose logging
|
// Verbose logging
|
||||||
public static final boolean LOGV = Log.isLoggable(TAG, Log.VERBOSE);
|
public static final boolean LOGV = Log.isLoggable(TAG, Log.VERBOSE);
|
||||||
|
|
||||||
public static final String ACTION_FINISHED = "org.lineageos.setupwizard.SETUP_FINISHED";
|
|
||||||
public static final String ACTION_SETUP_COMPLETE =
|
|
||||||
"org.lineageos.setupwizard.LINEAGE_SETUP_COMPLETE";
|
|
||||||
public static final String ACTION_RESTORE_FROM_BACKUP =
|
public static final String ACTION_RESTORE_FROM_BACKUP =
|
||||||
"com.stevesoltys.seedvault.RESTORE_BACKUP";
|
"com.stevesoltys.seedvault.RESTORE_BACKUP";
|
||||||
public static final String ACTION_EMERGENCY_DIAL = "com.android.phone.EmergencyDialer.DIAL";
|
public static final String ACTION_EMERGENCY_DIAL = "com.android.phone.EmergencyDialer.DIAL";
|
||||||
@@ -53,7 +50,7 @@ public class SetupWizardApp extends Application {
|
|||||||
private boolean mIsRadioReady = false;
|
private boolean mIsRadioReady = false;
|
||||||
private boolean mIgnoreSimLocale = false;
|
private boolean mIgnoreSimLocale = false;
|
||||||
|
|
||||||
private final Bundle mSettingsBundle = new Bundle();
|
private static final Bundle mSettingsBundle = new Bundle();
|
||||||
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
||||||
|
|
||||||
private final Runnable mRadioTimeoutRunnable = () -> mIsRadioReady = true;
|
private final Runnable mRadioTimeoutRunnable = () -> mIsRadioReady = true;
|
||||||
@@ -88,7 +85,7 @@ public class SetupWizardApp extends Application {
|
|||||||
mIgnoreSimLocale = ignoreSimLocale;
|
mIgnoreSimLocale = ignoreSimLocale;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Bundle getSettingsBundle() {
|
public static Bundle getSettingsBundle() {
|
||||||
return mSettingsBundle;
|
return mSettingsBundle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,32 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2024 The LineageOS Project
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.lineageos.setupwizard;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.work.CoroutineWorker;
|
|
||||||
import androidx.work.WorkerParameters;
|
|
||||||
|
|
||||||
import org.lineageos.setupwizard.util.SetupWizardUtils;
|
|
||||||
|
|
||||||
import kotlin.coroutines.Continuation;
|
|
||||||
|
|
||||||
public class SetupWizardExitWorker extends CoroutineWorker {
|
|
||||||
|
|
||||||
public SetupWizardExitWorker(@NonNull Context appContext,
|
|
||||||
@NonNull WorkerParameters params) {
|
|
||||||
super(appContext, params);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public Object doWork(@NonNull Continuation<? super Result> continuation) {
|
|
||||||
SetupWizardUtils.finishSetupWizard(getApplicationContext());
|
|
||||||
return Result.success();
|
|
||||||
}
|
|
||||||
}
|
|
@@ -11,59 +11,58 @@ import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED
|
|||||||
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
|
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
|
||||||
import static android.content.pm.PackageManager.DONT_KILL_APP;
|
import static android.content.pm.PackageManager.DONT_KILL_APP;
|
||||||
import static android.content.pm.PackageManager.GET_ACTIVITIES;
|
import static android.content.pm.PackageManager.GET_ACTIVITIES;
|
||||||
import static android.content.pm.PackageManager.GET_RECEIVERS;
|
|
||||||
import static android.content.pm.PackageManager.GET_SERVICES;
|
|
||||||
import static android.telephony.TelephonyManager.PHONE_TYPE_GSM;
|
import static android.telephony.TelephonyManager.PHONE_TYPE_GSM;
|
||||||
import static android.telephony.TelephonyManager.SIM_STATE_ABSENT;
|
|
||||||
|
|
||||||
import static com.android.internal.telephony.PhoneConstants.LTE_ON_CDMA_TRUE;
|
import static com.android.internal.telephony.PhoneConstants.LTE_ON_CDMA_TRUE;
|
||||||
import static com.android.internal.telephony.PhoneConstants.LTE_ON_CDMA_UNKNOWN;
|
import static com.android.internal.telephony.PhoneConstants.LTE_ON_CDMA_UNKNOWN;
|
||||||
|
|
||||||
|
import static com.google.android.setupcompat.util.ResultCodes.RESULT_SKIP;
|
||||||
|
|
||||||
|
import static org.lineageos.setupwizard.SetupWizardApp.DISABLE_NAV_KEYS;
|
||||||
|
import static org.lineageos.setupwizard.SetupWizardApp.ENABLE_RECOVERY_UPDATE;
|
||||||
|
import static org.lineageos.setupwizard.SetupWizardApp.KEY_SEND_METRICS;
|
||||||
import static org.lineageos.setupwizard.SetupWizardApp.LOGV;
|
import static org.lineageos.setupwizard.SetupWizardApp.LOGV;
|
||||||
|
import static org.lineageos.setupwizard.SetupWizardApp.NAVIGATION_OPTION_KEY;
|
||||||
|
import static org.lineageos.setupwizard.SetupWizardApp.UPDATE_RECOVERY_PROP;
|
||||||
|
|
||||||
import android.app.StatusBarManager;
|
import android.app.StatusBarManager;
|
||||||
|
import android.app.WallpaperManager;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.pm.ComponentInfo;
|
import android.content.om.IOverlayManager;
|
||||||
import android.content.pm.PackageInfo;
|
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ServiceInfo;
|
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.hardware.biometrics.BiometricManager;
|
import android.hardware.biometrics.BiometricManager;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkCapabilities;
|
import android.net.NetworkCapabilities;
|
||||||
import android.os.Binder;
|
import android.os.Bundle;
|
||||||
|
import android.os.ServiceManager;
|
||||||
import android.os.SystemProperties;
|
import android.os.SystemProperties;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.sysprop.TelephonyProperties;
|
import android.sysprop.TelephonyProperties;
|
||||||
import android.telephony.ServiceState;
|
|
||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.work.OneTimeWorkRequest;
|
import org.lineageos.setupwizard.BaseSetupWizardActivity;
|
||||||
import androidx.work.OutOfQuotaPolicy;
|
|
||||||
import androidx.work.WorkManager;
|
|
||||||
|
|
||||||
import org.lineageos.internal.util.PackageManagerUtils;
|
|
||||||
import org.lineageos.setupwizard.BiometricActivity;
|
import org.lineageos.setupwizard.BiometricActivity;
|
||||||
import org.lineageos.setupwizard.BluetoothSetupActivity;
|
import org.lineageos.setupwizard.BluetoothSetupActivity;
|
||||||
import org.lineageos.setupwizard.NetworkSetupActivity;
|
import org.lineageos.setupwizard.NetworkSetupActivity;
|
||||||
import org.lineageos.setupwizard.ScreenLockActivity;
|
import org.lineageos.setupwizard.ScreenLockActivity;
|
||||||
import org.lineageos.setupwizard.SetupWizardApp;
|
import org.lineageos.setupwizard.SetupWizardApp;
|
||||||
import org.lineageos.setupwizard.SetupWizardExitWorker;
|
|
||||||
import org.lineageos.setupwizard.SimMissingActivity;
|
import org.lineageos.setupwizard.SimMissingActivity;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import lineageos.providers.LineageSettings;
|
||||||
|
|
||||||
public class SetupWizardUtils {
|
public class SetupWizardUtils {
|
||||||
|
|
||||||
private static final String TAG = SetupWizardUtils.class.getSimpleName();
|
private static final String TAG = SetupWizardUtils.class.getSimpleName();
|
||||||
@@ -153,8 +152,8 @@ public class SetupWizardUtils {
|
|||||||
public static boolean hasGMS(Context context) {
|
public static boolean hasGMS(Context context) {
|
||||||
String gmsSuwPackage = hasLeanback(context) ? GMS_TV_SUW_PACKAGE : GMS_SUW_PACKAGE;
|
String gmsSuwPackage = hasLeanback(context) ? GMS_TV_SUW_PACKAGE : GMS_SUW_PACKAGE;
|
||||||
|
|
||||||
if (PackageManagerUtils.isAppInstalled(context, GMS_PACKAGE) &&
|
if (isPackageInstalled(context, GMS_PACKAGE) &&
|
||||||
PackageManagerUtils.isAppInstalled(context, gmsSuwPackage)) {
|
isPackageInstalled(context, gmsSuwPackage)) {
|
||||||
PackageManager packageManager = context.getPackageManager();
|
PackageManager packageManager = context.getPackageManager();
|
||||||
if (LOGV) {
|
if (LOGV) {
|
||||||
Log.v(TAG, GMS_SUW_PACKAGE + " state = " +
|
Log.v(TAG, GMS_SUW_PACKAGE + " state = " +
|
||||||
@@ -176,21 +175,7 @@ public class SetupWizardUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void startSetupWizardExitProcedure(Context context) {
|
public static void finishSetupWizard(BaseSetupWizardActivity context) {
|
||||||
try {
|
|
||||||
WorkManager.getInstance(context).enqueue(new OneTimeWorkRequest.Builder(
|
|
||||||
SetupWizardExitWorker.class).setExpedited(
|
|
||||||
OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST).build());
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
// finishSetupWizard -- called by the exit worker -- disables components at the end,
|
|
||||||
// including the WorkManager component required here, so this is likely an error finding
|
|
||||||
// that component. The worker only needs to run once. We can assume it already has.
|
|
||||||
Log.w(TAG, "Could not start SetupWizardExitWorker. It has likely already run.", e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void finishSetupWizard(Context context) {
|
|
||||||
if (LOGV) {
|
if (LOGV) {
|
||||||
Log.v(TAG, "finishSetupWizard");
|
Log.v(TAG, "finishSetupWizard");
|
||||||
}
|
}
|
||||||
@@ -210,20 +195,16 @@ public class SetupWizardUtils {
|
|||||||
Settings.Secure.TV_USER_SETUP_COMPLETE, 1);
|
Settings.Secure.TV_USER_SETUP_COMPLETE, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
disableComponentsAndSendFinishedBroadcast(context);
|
handleEnableMetrics(context);
|
||||||
}
|
handleNavKeys(context);
|
||||||
|
handleRecoveryUpdate();
|
||||||
private static void disableComponentsAndSendFinishedBroadcast(Context context) {
|
handleNavigationOption();
|
||||||
if (LOGV) {
|
WallpaperManager.getInstance(context).forgetLoadedWallpaper();
|
||||||
Log.v(TAG, "Disabling Setup Wizard components and sending FINISHED broadcast.");
|
|
||||||
}
|
|
||||||
disableHome(context);
|
disableHome(context);
|
||||||
context.sendStickyBroadcastAsUser(
|
enableStatusBar();
|
||||||
new Intent(SetupWizardApp.ACTION_FINISHED),
|
context.finishAffinity();
|
||||||
Binder.getCallingUserHandle());
|
context.nextAction(RESULT_SKIP);
|
||||||
disableComponentSets(context, GET_RECEIVERS | GET_SERVICES);
|
Log.i(TAG, "Setup complete!");
|
||||||
// Note: The WizardManager component is disabled when the WizardManager exits,
|
|
||||||
// which happens when FinishActivity calls nextAction while completing.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isBluetoothDisabled() {
|
public static boolean isBluetoothDisabled() {
|
||||||
@@ -273,6 +254,9 @@ public class SetupWizardUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable the Home component, which is presumably SetupWizardActivity at this time.
|
||||||
|
*/
|
||||||
public static void disableHome(Context context) {
|
public static void disableHome(Context context) {
|
||||||
ComponentName homeComponent = getHomeComponent(context);
|
ComponentName homeComponent = getHomeComponent(context);
|
||||||
if (homeComponent != null) {
|
if (homeComponent != null) {
|
||||||
@@ -282,7 +266,7 @@ public class SetupWizardUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ComponentName getHomeComponent(Context context) {
|
private static ComponentName getHomeComponent(Context context) {
|
||||||
Intent intent = new Intent("android.intent.action.MAIN");
|
Intent intent = new Intent("android.intent.action.MAIN");
|
||||||
intent.addCategory("android.intent.category.HOME");
|
intent.addCategory("android.intent.category.HOME");
|
||||||
intent.setPackage(context.getPackageName());
|
intent.setPackage(context.getPackageName());
|
||||||
@@ -293,11 +277,6 @@ public class SetupWizardUtils {
|
|||||||
return comp;
|
return comp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void disableComponentSets(Context context, int flags) {
|
|
||||||
setComponentListEnabledState(context, getComponentSets(context, flags),
|
|
||||||
COMPONENT_ENABLED_STATE_DISABLED);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void disableComponent(Context context, Class<?> cls) {
|
public static void disableComponent(Context context, Class<?> cls) {
|
||||||
setComponentEnabledState(context, new ComponentName(context, cls),
|
setComponentEnabledState(context, new ComponentName(context, cls),
|
||||||
COMPONENT_ENABLED_STATE_DISABLED);
|
COMPONENT_ENABLED_STATE_DISABLED);
|
||||||
@@ -314,42 +293,57 @@ public class SetupWizardUtils {
|
|||||||
enabledState, DONT_KILL_APP);
|
enabledState, DONT_KILL_APP);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setComponentListEnabledState(Context context,
|
private static void handleEnableMetrics(Context context) {
|
||||||
List<ComponentName> componentNames, int enabledState) {
|
Bundle privacyData = SetupWizardApp.getSettingsBundle();
|
||||||
for (ComponentName componentName : componentNames) {
|
if (privacyData != null
|
||||||
setComponentEnabledState(context, componentName, enabledState);
|
&& privacyData.containsKey(KEY_SEND_METRICS)) {
|
||||||
|
LineageSettings.Secure.putInt(context.getContentResolver(),
|
||||||
|
LineageSettings.Secure.STATS_COLLECTION,
|
||||||
|
privacyData.getBoolean(KEY_SEND_METRICS)
|
||||||
|
? 1 : 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<ComponentName> getComponentSets(Context context, int flags) {
|
private static void handleNavKeys(Context context) {
|
||||||
int i = 0;
|
if (SetupWizardApp.getSettingsBundle().containsKey(DISABLE_NAV_KEYS)) {
|
||||||
List<ComponentName> componentNames = new ArrayList<>();
|
writeDisableNavkeysOption(context,
|
||||||
|
SetupWizardApp.getSettingsBundle().getBoolean(DISABLE_NAV_KEYS));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void handleRecoveryUpdate() {
|
||||||
|
if (SetupWizardApp.getSettingsBundle().containsKey(ENABLE_RECOVERY_UPDATE)) {
|
||||||
|
boolean update = SetupWizardApp.getSettingsBundle()
|
||||||
|
.getBoolean(ENABLE_RECOVERY_UPDATE);
|
||||||
|
|
||||||
|
SystemProperties.set(UPDATE_RECOVERY_PROP, String.valueOf(update));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void handleNavigationOption() {
|
||||||
|
Bundle settingsBundle = SetupWizardApp.getSettingsBundle();
|
||||||
|
if (settingsBundle.containsKey(NAVIGATION_OPTION_KEY)) {
|
||||||
|
IOverlayManager overlayManager = IOverlayManager.Stub.asInterface(
|
||||||
|
ServiceManager.getService(Context.OVERLAY_SERVICE));
|
||||||
|
String selectedNavMode = settingsBundle.getString(NAVIGATION_OPTION_KEY);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
PackageInfo allInfo = context.getPackageManager()
|
overlayManager.setEnabledExclusiveInCategory(selectedNavMode,
|
||||||
.getPackageInfo(context.getPackageName(), flags);
|
UserHandle.USER_CURRENT);
|
||||||
if (allInfo != null) {
|
} catch (Exception ignored) {
|
||||||
if (allInfo.activities != null && (flags & GET_ACTIVITIES) != 0) {
|
|
||||||
for (ComponentInfo info : allInfo.activities) {
|
|
||||||
componentNames.add(new ComponentName(context, info.name));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (allInfo.receivers != null && (flags & GET_RECEIVERS) != 0) {
|
|
||||||
for (ComponentInfo info2 : allInfo.receivers) {
|
|
||||||
componentNames.add(new ComponentName(context, info2.name));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (allInfo.services != null && (flags & GET_SERVICES) != 0) {
|
|
||||||
ServiceInfo[] serviceInfoArr = allInfo.services;
|
|
||||||
int length = serviceInfoArr.length;
|
|
||||||
while (i < length) {
|
|
||||||
componentNames.add(new ComponentName(context, serviceInfoArr[i].name));
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (PackageManager.NameNotFoundException ignored) {
|
|
||||||
|
private static void writeDisableNavkeysOption(Context context, boolean enabled) {
|
||||||
|
final boolean virtualKeysEnabled = LineageSettings.System.getIntForUser(
|
||||||
|
context.getContentResolver(), LineageSettings.System.FORCE_SHOW_NAVBAR, 0,
|
||||||
|
UserHandle.USER_CURRENT) != 0;
|
||||||
|
if (enabled != virtualKeysEnabled) {
|
||||||
|
LineageSettings.System.putIntForUser(context.getContentResolver(),
|
||||||
|
LineageSettings.System.FORCE_SHOW_NAVBAR, enabled ? 1 : 0,
|
||||||
|
UserHandle.USER_CURRENT);
|
||||||
}
|
}
|
||||||
return componentNames;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static long getBuildDateTimestamp() {
|
public static long getBuildDateTimestamp() {
|
||||||
|
@@ -23,7 +23,6 @@ import android.os.Bundle;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.google.android.setupcompat.util.ResultCodes;
|
import com.google.android.setupcompat.util.ResultCodes;
|
||||||
import com.google.android.setupcompat.util.WizardManagerHelper;
|
|
||||||
|
|
||||||
import org.lineageos.setupwizard.util.SetupWizardUtils;
|
import org.lineageos.setupwizard.util.SetupWizardUtils;
|
||||||
|
|
||||||
@@ -71,10 +70,6 @@ public class WizardManager extends Activity {
|
|||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addExtras(Intent intent) {
|
|
||||||
intent.putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void doAction(String scriptUri, WizardAction action, Intent extras) {
|
private void doAction(String scriptUri, WizardAction action, Intent extras) {
|
||||||
Intent intent = action.getIntent();
|
Intent intent = action.getIntent();
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||||
@@ -83,7 +78,6 @@ public class WizardManager extends Activity {
|
|||||||
+ " intent=" + intent + " extras2=" + intent.getExtras() + " action=" + action);
|
+ " intent=" + intent + " extras2=" + intent.getExtras() + " action=" + action);
|
||||||
}
|
}
|
||||||
|
|
||||||
addExtras(intent);
|
|
||||||
if (extras != null) {
|
if (extras != null) {
|
||||||
intent.putExtras(extras);
|
intent.putExtras(extras);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user