Merge "FRP bypass defense in the settings app"

This commit is contained in:
TreeHugger Robot
2022-01-05 05:37:51 +00:00
committed by Android (Google) Code Review
10 changed files with 170 additions and 1 deletions

View File

@@ -54,6 +54,7 @@ import com.android.settingslib.search.Indexable;
import com.android.settingslib.widget.LayoutPreference;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.setupcompat.util.WizardManagerHelper;
import java.util.UUID;
@@ -63,7 +64,7 @@ import java.util.UUID;
public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceFragment
implements DialogCreatable, HelpResourceProvider, Indexable {
private static final String TAG = "SettingsPreference";
private static final String TAG = "SettingsPreferenceFragment";
private static final String SAVE_HIGHLIGHTED_KEY = "android:preference_highlighted";
@@ -121,6 +122,15 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
public HighlightablePreferenceGroupAdapter mAdapter;
private boolean mPreferenceHighlighted = false;
@Override
public void onAttach(Context context) {
if (shouldSkipForInitialSUW() && !WizardManagerHelper.isDeviceProvisioned(getContext())) {
Log.w(TAG, "Skip " + getClass().getSimpleName() + " before SUW completed.");
finish();
}
super.onAttach(context);
}
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -267,6 +277,16 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
|| (mAdapter.getPreferenceAdapterPosition(preference) != RecyclerView.NO_POSITION));
}
/**
* Whether UI should be skipped in the initial SUW flow.
*
* @return {@code true} when UI should be skipped in the initial SUW flow.
* {@code false} when UI should not be skipped in the initial SUW flow.
*/
protected boolean shouldSkipForInitialSUW() {
return false;
}
protected void onDataSetChanged() {
highlightPreferenceIfNeeded();
updateEmptyView();

View File

@@ -84,6 +84,11 @@ public class AccountDashboardFragment extends DashboardFragment {
return controllers;
}
@Override
protected boolean shouldSkipForInitialSUW() {
return true;
}
static void buildAutofillPreferenceControllers(
Context context, List<AbstractPreferenceController> controllers) {
controllers.add(new DefaultAutofillPreferenceController(context));

View File

@@ -507,6 +507,11 @@ public class AppInfoDashboardFragment extends DashboardFragment
return true;
}
@Override
protected boolean shouldSkipForInitialSUW() {
return true;
}
private void uninstallPkg(String packageName, boolean allUsers, boolean andDisable) {
stopListeningToPackageRemove();
// Create new intent to launch Uninstaller activity

View File

@@ -215,6 +215,11 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
}
}
@Override
protected boolean shouldSkipForInitialSUW() {
return true;
}
/**
* Long-pressing a developer options quick settings tile will by default (see
* QS_TILE_PREFERENCES in the manifest) take you to the developer options page.

View File

@@ -64,6 +64,11 @@ public class ResetDashboardFragment extends DashboardFragment {
use(EraseEuiccDataController.class).setFragment(this);
}
@Override
protected boolean shouldSkipForInitialSUW() {
return true;
}
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
Lifecycle lifecycle) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();