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