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

Commit 0bfef638 authored by Chandan Nath's avatar Chandan Nath
Browse files

[Multi-user] Change Backup Settings page to support multi-user.

With multi-user backup, backup will be available or secondary users and profiles too.

1. When there are profile users, this CL changes UI flow A to B
A. Settings Homepage -> System -> Google Backup Settings for primary user
to
B. Settings Homepage -> System -> Profile Select Dialog -> Google Backup Settings for chosen profile.
Change done as per https://g3doc.corp.google.com/company/teams/apps-android-settings/howto/ia.md?cl=head
2. Functionality remains the same when there are no profiles (BackupSettingsHelper, BackupSettingsContentProvider)
3.  Also, enabled Backup Settings for secondary users. (Previously, backup settings were only shown for
system user).(SettingsGateway)

Bug: 121198738

Test: 1) System -> Backup -> shows Profile Select Dialog -> Backup page for selected profile
2) On secondary user without profile, System -> Backup (with summary) -> Backup page for secondary user.

Change-Id: I6e21279978a5dfc6eca6f5a34bbfc15a34eac68b
parent d3be3630
Loading
Loading
Loading
Loading
+18 −8
Original line number Original line Diff line number Diff line
@@ -2777,13 +2777,17 @@
                android:value="com.android.settings.webview.WebViewAppPicker" />
                android:value="com.android.settings.webview.WebViewAppPicker" />
        </activity-alias>
        </activity-alias>


        <activity android:name=".backup.BackupSettingsActivity"
        <provider
            android:name=".backup.BackupSettingsContentProvider"
            android:authorities="com.android.settings.backup.BackupSettingsContentProvider"
	    android:exported="true">
        </provider>

        <activity android:name=".backup.UserBackupSettingsActivity"
                  android:label="@string/privacy_settings_title"
                  android:label="@string/privacy_settings_title"
                  android:icon="@drawable/ic_settings_backup"
                  android:icon="@drawable/ic_settings_backup">
                  android:parentActivityName="Settings">
            <intent-filter android:priority="1">
            <intent-filter android:priority="1">
                <action android:name="android.settings.PRIVACY_SETTINGS" />
                <action android:name="android.settings.PRIVACY_SETTINGS" />
                <action android:name="android.settings.BACKUP_AND_RESET_SETTINGS" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            </intent-filter>
            <intent-filter>
            <intent-filter>
@@ -2791,10 +2795,16 @@
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.VOICE_LAUNCH" />
                <category android:name="android.intent.category.VOICE_LAUNCH" />
            </intent-filter>
            </intent-filter>
            <meta-data android:name="com.android.settings.summary"
            <!-- Mark the activity as a dynamic setting -->
                       android:resource="@string/summary_empty"/>
            <intent-filter>
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                <action android:name="com.android.settings.action.IA_SETTINGS" />
                       android:value="true" />
            </intent-filter>
            <!-- Tell Settings app which category it belongs to -->
            <meta-data android:name="com.android.settings.category"
                       android:value="com.android.settings.category.ia.system" />
            <meta-data android:name="com.android.settings.summary_uri"
		       android:value="content://com.android.settings.backup.BackupSettingsContentProvider/summary" />
            <meta-data android:name="com.android.settings.order" android:value="-60"/>
        </activity>
        </activity>


        <activity
        <activity
+0 −11
Original line number Original line Diff line number Diff line
@@ -29,17 +29,6 @@
        android:fragment="com.android.settings.gestures.GestureSettings"
        android:fragment="com.android.settings.gestures.GestureSettings"
        settings:controller="com.android.settings.gestures.GesturesSettingPreferenceController"/>
        settings:controller="com.android.settings.gestures.GesturesSettingPreferenceController"/>


    <!-- Backup -->
    <Preference
        android:key="backup_settings"
        android:title="@string/privacy_settings_title"
        android:summary="@string/summary_placeholder"
        android:icon="@drawable/ic_settings_backup"
        android:order="-60"
        settings:controller="com.android.settings.backup.BackupSettingsActivityPreferenceController">
        <intent android:action="android.settings.BACKUP_AND_RESET_SETTINGS" />
    </Preference>

    <Preference
    <Preference
        android:key="reset_dashboard"
        android:key="reset_dashboard"
        android:title="@string/reset_dashboard_title"
        android:title="@string/reset_dashboard_title"
+0 −6
Original line number Original line Diff line number Diff line
@@ -52,7 +52,6 @@ import androidx.preference.PreferenceManager;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.ArrayUtils;
import com.android.settings.Settings.WifiSettingsActivity;
import com.android.settings.Settings.WifiSettingsActivity;
import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.backup.BackupSettingsActivity;
import com.android.settings.core.OnActivityResultListener;
import com.android.settings.core.OnActivityResultListener;
import com.android.settings.core.SettingsBaseActivity;
import com.android.settings.core.SettingsBaseActivity;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.core.SubSettingLauncher;
@@ -661,11 +660,6 @@ public class SettingsActivity extends SettingsBaseActivity
                showDev, isAdmin)
                showDev, isAdmin)
                || somethingChanged;
                || somethingChanged;


        // Enable/disable backup settings depending on whether the user is admin.
        somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
                BackupSettingsActivity.class.getName()), true, isAdmin)
                || somethingChanged;

        somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
        somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
                        Settings.WifiDisplaySettingsActivity.class.getName()),
                        Settings.WifiDisplaySettingsActivity.class.getName()),
                WifiDisplaySettings.isAvailable(this), isAdmin)
                WifiDisplaySettings.isAvailable(this), isAdmin)
+0 −54
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source 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 com.android.settings.backup;

import android.app.backup.BackupManager;
import android.content.Context;
import android.os.UserManager;

import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;

public class BackupSettingsActivityPreferenceController extends BasePreferenceController {
    private static final String TAG = "BackupSettingActivityPC";


    private final UserManager mUm;
    private final BackupManager mBackupManager;

    public BackupSettingsActivityPreferenceController(Context context, String key) {
        super(context, key);
        mUm = (UserManager) context.getSystemService(Context.USER_SERVICE);
        mBackupManager = new BackupManager(context);
    }

    @Override
    public int getAvailabilityStatus() {
        return mUm.isAdminUser()
                ? AVAILABLE_UNSEARCHABLE
                : UNSUPPORTED_ON_DEVICE;
    }

    @Override
    public CharSequence getSummary() {
        final boolean backupEnabled = mBackupManager.isBackupEnabled();

        return backupEnabled
                ? mContext.getText(R.string.backup_summary_state_on)
                : mContext.getText(R.string.backup_summary_state_off);
    }
}
 No newline at end of file
+78 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2019 The Android Open Source 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 com.android.settings.backup;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;

import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY;

/** Provider stores and manages user interaction feedback for homepage contextual cards. */
public class BackupSettingsContentProvider extends ContentProvider {
    private static final String AUTHORITY =
        "com.android.settings.backup.BackupSettingsContentProvider";
    private static final String SUMMARY = "summary";
    private static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
    static {
        URI_MATCHER.addURI(AUTHORITY, SUMMARY, 1);
    }

    @Override
    public Bundle call(String method, String uri, Bundle extras) {
        if (!SUMMARY.equals(method)) {
            return null;
        }
        Bundle bundle = new Bundle();
        bundle.putString(META_DATA_PREFERENCE_SUMMARY,
            new BackupSettingsHelper(getContext()).getSummary());
        return bundle;
    }

    @Override
    public boolean onCreate() {
        return true;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        throw new UnsupportedOperationException();
    }

    @Override
    public String getType(Uri uri) {
        throw new UnsupportedOperationException();
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        throw new UnsupportedOperationException();
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        throw new UnsupportedOperationException();
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        throw new UnsupportedOperationException();
    }
}
Loading