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

Commit adb3d1f1 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Migrate the Legal Info page to Catalyst" into main

parents c51a7601 e060aeb1
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -17,8 +17,13 @@
package com.android.settings;

import android.app.settings.SettingsEnums;
import android.content.Context;

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

import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.deviceinfo.legal.LegalSettingsScreen;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.search.SearchIndexable;

@@ -44,4 +49,10 @@ public class LegalSettings extends DashboardFragment {

    public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
            new BaseSearchIndexProvider(R.xml.about_legal);

    @Nullable
    @Override
    public String getPreferenceScreenBindingKey(@NonNull Context context) {
        return LegalSettingsScreen.KEY;
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ package com.android.settings.deviceinfo.legal;
import android.content.Context;
import android.content.Intent;

// LINT.IfChange
public class CopyrightPreferenceController extends LegalPreferenceController {

    private static final Intent INTENT = new Intent("android.settings.COPYRIGHT");
@@ -30,3 +31,4 @@ public class CopyrightPreferenceController extends LegalPreferenceController {
        return INTENT;
    }
}
// LINT.ThenChange(LegalPreference.kt)
+58 −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.deviceinfo.legal

import android.content.Context
import android.content.Intent
import android.content.pm.ApplicationInfo
import android.content.pm.ResolveInfo
import androidx.annotation.StringRes
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceTitleProvider

// LINT.IfChange
class LegalPreference(
    override val key: String,
    @StringRes val defaultTitle: Int = 0,
    val intentAction: String,
) : PreferenceMetadata, PreferenceTitleProvider, PreferenceAvailabilityProvider {

    override fun getTitle(context: Context): CharSequence? {
        val resolveInfo =
            findMatchingSpecificActivity(context) ?: return context.getText(defaultTitle)
        return resolveInfo.loadLabel(context.packageManager)
    }

    override fun isAvailable(context: Context) = (findMatchingSpecificActivity(context) != null)

    override fun intent(context: Context) =
        findMatchingSpecificActivity(context)?.let {
            Intent()
                .setClassName(it.activityInfo.packageName, it.activityInfo.name)
                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        }

    private fun findMatchingSpecificActivity(context: Context): ResolveInfo? {
        val intent = Intent(intentAction)
        // Find the activity that is in the system image
        val list: List<ResolveInfo> = context.packageManager.queryIntentActivities(intent, 0)
        return list.firstOrNull {
            (it.activityInfo.applicationInfo.flags and ApplicationInfo.FLAG_SYSTEM) != 0
        }
    }
}
// LINT.ThenChange(LegalPreferenceController.java)
+2 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.settings.core.BasePreferenceController;

import java.util.List;

// LINT.IfChange
public abstract class LegalPreferenceController extends BasePreferenceController {
    private final PackageManager mPackageManager;
    private Preference mPreference;
@@ -94,3 +95,4 @@ public abstract class LegalPreferenceController extends BasePreferenceController
        mPreference.setTitle(resolveInfo.loadLabel(mPackageManager));
    }
}
// LINT.ThenChange(LegalPreference.kt)
+55 −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.deviceinfo.legal

import android.content.Context
import com.android.settings.LegalSettings
import com.android.settings.R
import com.android.settings.flags.Flags
import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator

@ProvidePreferenceScreen
open class LegalSettingsScreen : PreferenceScreenCreator {
    override val key: String
        get() = KEY

    override val title: Int
        get() = R.string.legal_information

    override fun isFlagEnabled(context: Context) = Flags.catalystLegalInformation()

    override fun fragmentClass() = LegalSettings::class.java

    override fun getPreferenceHierarchy(context: Context) =
        preferenceHierarchy(this) {
            +LegalPreference("copyright", R.string.copyright_title, "android.settings.COPYRIGHT")
            +LegalPreference("license", R.string.license_title, "android.settings.LICENSE")
            +LegalPreference("terms", R.string.terms_title, "android.settings.TERMS")
            +ModuleLicensesScreen.KEY // Use screen key in case it is overlaid.
            +LegalPreference(
                "webview_license",
                R.string.webview_license_title,
                "android.settings.WEBVIEW_LICENSE",
            )
            +WallpaperAttributionsPreference()
        }

    companion object {
        const val KEY = "legal_information"
    }
}
Loading