Existing implementation of power menu bugreporting flow works only for the primary user. In HSUM(Headless system user mode) there is going to be more than one admin users who are allowed to trigger bug report from the power menu, below refactorings has been done do handle this case. Configurations for custom_bugreport_handler_app and custom_bugreport_handler_user are moved from Global to Secure settings so that each user can save them. The current context user will be the fallback default user in the absence of a correctly configured handlerApp or handlerUser. Retrieval of the current bug report handler apps are refactored to add shell as user's default preferences for any user(current user). Test: manually tested the bugreport is working for multiple admin with different combination of handlerApp and handlerUser Bug: 261184202 Change-Id: I3110c1f9619ede2edeb744daf37521318f0ff6e7
82 lines
2.8 KiB
Java
82 lines
2.8 KiB
Java
/*
|
|
* 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.development;
|
|
|
|
import android.content.Context;
|
|
import android.os.UserManager;
|
|
import android.provider.Settings;
|
|
|
|
import androidx.annotation.VisibleForTesting;
|
|
import androidx.preference.Preference;
|
|
import androidx.preference.SwitchPreference;
|
|
|
|
import com.android.settings.core.PreferenceControllerMixin;
|
|
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
|
|
|
|
public class BugReportInPowerPreferenceController extends
|
|
DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
|
|
PreferenceControllerMixin {
|
|
|
|
private static final String KEY_BUGREPORT_IN_POWER = "bugreport_in_power";
|
|
|
|
@VisibleForTesting
|
|
static int SETTING_VALUE_ON = 1;
|
|
@VisibleForTesting
|
|
static int SETTING_VALUE_OFF = 0;
|
|
|
|
private final UserManager mUserManager;
|
|
|
|
public BugReportInPowerPreferenceController(Context context) {
|
|
super(context);
|
|
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
|
}
|
|
|
|
@Override
|
|
public boolean isAvailable() {
|
|
return !mUserManager.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES);
|
|
}
|
|
|
|
@Override
|
|
public String getPreferenceKey() {
|
|
return KEY_BUGREPORT_IN_POWER;
|
|
}
|
|
|
|
@Override
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
final boolean isEnabled = (Boolean) newValue;
|
|
Settings.Secure.putInt(mContext.getContentResolver(),
|
|
Settings.Secure.BUGREPORT_IN_POWER_MENU,
|
|
isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void updateState(Preference preference) {
|
|
final int mode = Settings.Secure.getInt(mContext.getContentResolver(),
|
|
Settings.Secure.BUGREPORT_IN_POWER_MENU, SETTING_VALUE_OFF);
|
|
((SwitchPreference) mPreference).setChecked(mode != SETTING_VALUE_OFF);
|
|
}
|
|
|
|
@Override
|
|
protected void onDeveloperOptionsSwitchDisabled() {
|
|
super.onDeveloperOptionsSwitchDisabled();
|
|
Settings.Secure.putInt(mContext.getContentResolver(),
|
|
Settings.Secure.BUGREPORT_IN_POWER_MENU, SETTING_VALUE_OFF);
|
|
((SwitchPreference) mPreference).setChecked(false);
|
|
}
|
|
}
|