1efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang/* 2efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang * Copyright (C) 2017 The Android Open Source Project 3efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang * 4efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang * Licensed under the Apache License, Version 2.0 (the "License"); 5efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang * you may not use this file except in compliance with the License. 6efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang * You may obtain a copy of the License at 7efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang * 8efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang * http://www.apache.org/licenses/LICENSE-2.0 9efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang * 10efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang * Unless required by applicable law or agreed to in writing, software 11efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang * distributed under the License is distributed on an "AS IS" BASIS, 12efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang * See the License for the specific language governing permissions and 14efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang * limitations under the License. 15efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang */ 16efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangpackage com.android.settings.deviceinfo; 17efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang 18efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport android.content.Context; 19efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport android.content.pm.PackageManager; 20efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport android.support.v7.preference.Preference; 21efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport android.support.v7.preference.PreferenceScreen; 22efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport android.text.TextUtils; 23efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport android.util.Log; 24efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang 251d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport com.android.settings.core.PreferenceControllerMixin; 26efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhangimport com.android.settingslib.DeviceInfoUtils; 271d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerimport com.android.settingslib.core.AbstractPreferenceController; 28efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang 291d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantlerpublic class SecurityPatchPreferenceController extends AbstractPreferenceController implements 301d583e125faf3ae4c9cd82636d8f3ecf1cdec3aaTony Mantler PreferenceControllerMixin { 31efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang 32efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang private static final String KEY_SECURITY_PATCH = "security_patch"; 33efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang private static final String TAG = "SecurityPatchPref"; 34efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang 35efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang private final String mPatch; 36efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang private final PackageManager mPackageManager; 37efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang 38efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang public SecurityPatchPreferenceController(Context context) { 39efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang super(context); 40efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang mPackageManager = mContext.getPackageManager(); 41efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang mPatch = DeviceInfoUtils.getSecurityPatch(); 42efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang } 43efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang 44efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang @Override 45efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang public boolean isAvailable() { 46efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang return !TextUtils.isEmpty(mPatch); 47efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang } 48efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang 49efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang @Override 50efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang public String getPreferenceKey() { 51efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang return KEY_SECURITY_PATCH; 52efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang } 53efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang 54efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang @Override 55efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang public void displayPreference(PreferenceScreen screen) { 56efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang super.displayPreference(screen); 57efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang final Preference pref = screen.findPreference(KEY_SECURITY_PATCH); 58efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang if (pref != null) { 59efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang pref.setSummary(mPatch); 60efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang } 61efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang } 62efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang 63efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang @Override 64efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang public boolean handlePreferenceTreeClick(Preference preference) { 65efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang if (!TextUtils.equals(preference.getKey(), KEY_SECURITY_PATCH)) { 66efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang return false; 67efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang } 68efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang if (mPackageManager.queryIntentActivities(preference.getIntent(), 0).isEmpty()) { 69efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang // Don't send out the intent to stop crash 70efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang Log.w(TAG, "Stop click action on " + KEY_SECURITY_PATCH + ": " 71efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang + "queryIntentActivities() returns empty"); 72efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang return true; 73efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang } 74efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang return false; 75efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang } 76efb8d625a21125bf3d9dabb849380cb41d476edeFan Zhang} 77