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

Commit 132e7341 authored by paulzhchen's avatar paulzhchen
Browse files

Add FeatureProvider for SyncAcrossDevices Settings integration.

Bug: 330498032
Test: FakeFeatureFactory
Change-Id: Iccf7ca4411a03d29e9eeba6c1544ccbd95b97654
parent ea89a3cb
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.notification.syncacrossdevices;

import androidx.annotation.Nullable;
import androidx.preference.Preference;

/** Callback to add or remove {@link Preference} in Sync Across Devices feature. */
public interface SyncAcrossDevicesFeatureCallback {

    /**
     * Called when a sync across devices feature is added
     *
     * @param preference present the feature
     */
    void onFeatureAdded(@Nullable Preference preference);

    /**
     * Called when a sync across devices feature is removed
     *
     * @param preference present the feature
     */
    void onFeatureRemoved(@Nullable Preference preference);
}
+32 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.notification.syncacrossdevices;

import android.content.Context;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

/** Feature provider for the Sync Across Devices. */
public interface SyncAcrossDevicesFeatureProvider {

    /** Returns the SyncAcrossDevicesFeatureUpdater of the Sync Across Devices feature */
    @Nullable
    SyncAcrossDevicesFeatureUpdater getSyncAcrossDevicesFeatureUpdater(
            @NonNull Context context,
            @NonNull SyncAcrossDevicesFeatureCallback featurePreferenceCallback);
}
+34 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.notification.syncacrossdevices;

import android.content.Context;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

/** Default implementation for {@link SyncAcrossDevicesFeatureProvider} */
public class SyncAcrossDevicesFeatureProviderImpl implements SyncAcrossDevicesFeatureProvider {

    @Override
    @Nullable
    public SyncAcrossDevicesFeatureUpdater getSyncAcrossDevicesFeatureUpdater(
            @NonNull Context context,
            @NonNull SyncAcrossDevicesFeatureCallback featurePreferenceCallback) {
        return new SyncAcrossDevicesFeatureUpdater() {};
    }
}
+34 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.notification.syncacrossdevices;

import android.content.Context;

import androidx.annotation.Nullable;

/**
 * Updates the sync across devices feature state. It notifies the upper level whether to add/remove
 * the preference through {@link SyncAcrossDevicesFeatureCallback}
 */
public interface SyncAcrossDevicesFeatureUpdater {

    /** Forces to update the list of the Sync Across Devices feature. */
    default void forceUpdate() {}

    /** Sets the context to generate the {@link Preference}, so it could get the correct theme. */
    default void setPreferenceContext(@Nullable Context preferenceContext) {}
}
+6 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import com.android.settings.fuelgauge.PowerUsageFeatureProvider
import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider
import com.android.settings.inputmethod.KeyboardSettingsFeatureProvider
import com.android.settings.localepicker.LocaleFeatureProvider
import com.android.settings.notification.syncacrossdevices.SyncAcrossDevicesFeatureProvider
import com.android.settings.onboarding.OnboardingFeatureProvider
import com.android.settings.overlay.FeatureFactory.Companion.setFactory
import com.android.settings.panel.PanelFeatureProvider
@@ -188,6 +189,11 @@ abstract class FeatureFactory {
     */
    abstract val audioSharingFeatureProvider: AudioSharingFeatureProvider

    /**
     * Gets implementation for sync across devices related feature.
     */
    abstract val syncAcrossDevicesFeatureProvider: SyncAcrossDevicesFeatureProvider

    companion object {
        private var _factory: FeatureFactory? = null

Loading