Files
app_Settings/src/com/android/settings/applications/appinfo/ExternalSourceDetailPreferenceController.java
Doris Ling c3e4619af1 Fix crash in ExternalSourceDetailPreferenceController.
- Add null check for the package info when trying to retrieve the
install app state. During package update, the package info might becomes
null. The App info activity will finish in that case, but this method
might be called before the activity actually finishes.

Change-Id: I18ff448666dfb403bb6693fccd3e54276db36f37
Fixes: 78257414
Test: make RunSettingsRoboTests
2018-04-30 17:38:29 -07:00

75 lines
2.5 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.applications.appinfo;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.os.UserManager;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.applications.AppStateInstallAppsBridge;
public class ExternalSourceDetailPreferenceController extends AppInfoPreferenceControllerBase {
private String mPackageName;
public ExternalSourceDetailPreferenceController(Context context, String key) {
super(context, key);
}
@Override
public int getAvailabilityStatus() {
if (UserManager.get(mContext).isManagedProfile()) {
return DISABLED_FOR_USER;
}
return isPotentialAppSource() ? AVAILABLE : DISABLED_FOR_USER;
}
@Override
public void updateState(Preference preference) {
preference.setSummary(getPreferenceSummary());
}
@Override
protected Class<? extends SettingsPreferenceFragment> getDetailFragmentClass() {
return ExternalSourcesDetails.class;
}
@VisibleForTesting
CharSequence getPreferenceSummary() {
return ExternalSourcesDetails.getPreferenceSummary(mContext, mParent.getAppEntry());
}
@VisibleForTesting
boolean isPotentialAppSource() {
final PackageInfo packageInfo = mParent.getPackageInfo();
if (packageInfo == null) {
return false;
}
AppStateInstallAppsBridge.InstallAppsState appState =
new AppStateInstallAppsBridge(mContext, null, null).createInstallAppsStateFor(
mPackageName, packageInfo.applicationInfo.uid);
return appState.isPotentialAppSource();
}
public void setPackageName(String packageName) {
mPackageName = packageName;
}
}