Change global transcode enable toggle preference to global disable toggle preference. Change app slection for skipping transcode to app selection for enabling transcode, by default transcoding would be disabled for all apps. Test: Manual, Roboelectric unit tests Change-Id: I44f4d1b24fac70a4560e8b3a12d505bd2da26f20
98 lines
3.4 KiB
Java
98 lines
3.4 KiB
Java
/*
|
|
* Copyright (C) 2020 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.development.transcode;
|
|
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.pm.PackageManager;
|
|
import android.content.pm.ResolveInfo;
|
|
import android.os.SystemProperties;
|
|
|
|
import androidx.preference.Preference;
|
|
import androidx.preference.PreferenceScreen;
|
|
import androidx.preference.SwitchPreference;
|
|
|
|
import com.android.settings.core.BasePreferenceController;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* The controller for the "Enable transcoding for apps" section on the transcode settings
|
|
* screen.
|
|
*/
|
|
public class TranscodeAppsPreferenceController extends BasePreferenceController implements
|
|
Preference.OnPreferenceChangeListener {
|
|
|
|
private static final String TRANSCODE_SELECTED_APPS_PROP_KEY =
|
|
"persist.sys.fuse.transcode_uids";
|
|
|
|
private final PackageManager mPackageManager;
|
|
private final List<String> mUids = new ArrayList<>();
|
|
|
|
public TranscodeAppsPreferenceController(Context context,
|
|
String preferenceKey) {
|
|
super(context, preferenceKey);
|
|
mPackageManager = context.getPackageManager();
|
|
}
|
|
|
|
@Override
|
|
public int getAvailabilityStatus() {
|
|
return AVAILABLE;
|
|
}
|
|
|
|
@Override
|
|
public void displayPreference(PreferenceScreen screen) {
|
|
super.displayPreference(screen);
|
|
final Context context = screen.getContext();
|
|
mUids.addAll(Arrays.asList(
|
|
SystemProperties.get(TRANSCODE_SELECTED_APPS_PROP_KEY).split(",")));
|
|
Intent launcherIntent = new Intent(Intent.ACTION_MAIN);
|
|
launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER);
|
|
List<ResolveInfo> apps = mPackageManager.queryIntentActivities(launcherIntent, 0);
|
|
for (ResolveInfo app : apps) {
|
|
String uid = String.valueOf(app.activityInfo.applicationInfo.uid);
|
|
SwitchPreference preference = new SwitchPreference(context);
|
|
preference.setTitle(app.loadLabel(mPackageManager));
|
|
preference.setIcon(app.loadIcon(mPackageManager));
|
|
preference.setKey(uid);
|
|
preference.setChecked(isSelectedForTranscoding(uid));
|
|
preference.setOnPreferenceChangeListener(this);
|
|
|
|
screen.addPreference(preference);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean onPreferenceChange(Preference preference, Object o) {
|
|
boolean value = (Boolean) o;
|
|
String uidStr = preference.getKey();
|
|
if (value) {
|
|
mUids.add(uidStr);
|
|
} else {
|
|
mUids.remove(uidStr);
|
|
}
|
|
SystemProperties.set(TRANSCODE_SELECTED_APPS_PROP_KEY, String.join(",", mUids));
|
|
return true;
|
|
}
|
|
|
|
private boolean isSelectedForTranscoding(String uid) {
|
|
return mUids.contains(uid);
|
|
}
|
|
}
|