| /* |
| * Copyright (C) 2014 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.tv.settings; |
| |
| import android.content.Context; |
| import android.content.Intent; |
| import android.content.pm.ApplicationInfo; |
| import android.content.pm.PackageManager; |
| import android.content.pm.ResolveInfo; |
| |
| import androidx.preference.Preference; |
| import androidx.preference.PreferenceGroup; |
| |
| import java.util.List; |
| |
| /** |
| * Utilities for saving and loading shared prefs. |
| */ |
| public final class PreferenceUtils { |
| |
| public static final int FLAG_SET_TITLE = 1; |
| |
| public static void resolveSystemActivityOrRemove(Context context, PreferenceGroup parent, |
| Preference preference, int flags) { |
| if (preference == null) { |
| return; |
| } |
| |
| Intent intent = preference.getIntent(); |
| if (intent != null) { |
| // Find the activity that is in the system image |
| PackageManager pm = context.getPackageManager(); |
| List<ResolveInfo> list = pm.queryIntentActivities(intent, 0); |
| for (final ResolveInfo resolveInfo : list) { |
| if ((resolveInfo.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) |
| != 0) { |
| |
| // Replace the intent with this specific activity |
| preference.setIntent(new Intent().setClassName( |
| resolveInfo.activityInfo.packageName, |
| resolveInfo.activityInfo.name)); |
| |
| if ((flags & FLAG_SET_TITLE) != 0) { |
| // Set the preference title to the activity's label |
| preference.setTitle(resolveInfo.loadLabel(pm)); |
| } |
| |
| return; |
| } |
| } |
| } |
| |
| // Did not find a matching activity, so remove the preference |
| parent.removePreference(preference); |
| } |
| } |