aboutsummaryrefslogtreecommitdiffstats
path: root/sdk/src/java/org/cyanogenmod/internal/util/CmLockPatternUtils.java
blob: 75ab0b3e5f746e3cfbdf87e907b9ea349c0b0699 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
 * Copyright (C) 2015 The CyanogenMod 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 org.cyanogenmod.internal.util;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.UserHandle;
import android.text.TextUtils;

import com.android.internal.widget.LockPatternUtils;

import cyanogenmod.platform.Manifest;
import cyanogenmod.providers.CMSettings;

public class CmLockPatternUtils extends LockPatternUtils {

    /**
     * Third party keyguard component to be displayed within the keyguard
     */
    public static final String THIRD_PARTY_KEYGUARD_COMPONENT = "lockscreen.third_party";

    /**
     * Action to be broadcasted when the third party keyguard component has been changed
     */
    public static final String ACTION_THIRD_PARTY_KEYGUARD_COMPONENT_CHANGED =
            "org.cyanogenmod.internal.action.THIRD_PARTY_KEYGUARD_COMPONENT_CHANGED";

    private Context mContext;

    public CmLockPatternUtils(Context context) {
        super(context);
        mContext = context;
    }

    /**
     * Sets a third party lock screen.
     * @param component
     */
    public void setThirdPartyKeyguard(ComponentName component)
            throws PackageManager.NameNotFoundException {
        if (component != null) {
            // Check that the package this component belongs to has the third party keyguard perm
            final PackageManager pm = mContext.getPackageManager();
            final boolean hasThirdPartyKeyguardPermission = pm.checkPermission(
                    Manifest.permission.THIRD_PARTY_KEYGUARD, component.getPackageName()) ==
                        PackageManager.PERMISSION_GRANTED;
            if (!hasThirdPartyKeyguardPermission) {
                throw new SecurityException("Package " + component.getPackageName() + " does not" +
                        "have " + Manifest.permission.THIRD_PARTY_KEYGUARD);
            }
        }

        setString(THIRD_PARTY_KEYGUARD_COMPONENT,
                component != null ? component.flattenToString() : "", getCurrentUser());

        // notify systemui, or whatever other process needs to know, that the third party keyguard
        // component has changed.  What it changed to is up to the receiver to figure out using
        // the methods provided in this class.
        mContext.sendOrderedBroadcast(new Intent(ACTION_THIRD_PARTY_KEYGUARD_COMPONENT_CHANGED),
                null);
    }

    /**
     * Get the currently applied 3rd party keyguard component
     * @return
     */
    public ComponentName getThirdPartyKeyguardComponent() {
        String component = getString(THIRD_PARTY_KEYGUARD_COMPONENT, getCurrentUser());
        return component != null ? ComponentName.unflattenFromString(component) : null;
    }

    /**
     * @return Whether a third party keyguard is set
     */
    public boolean isThirdPartyKeyguardEnabled() {
        String component = getString(THIRD_PARTY_KEYGUARD_COMPONENT, getCurrentUser());
        return !TextUtils.isEmpty(component);
    }

    private int getCurrentUser() {
        return UserHandle.USER_CURRENT;
    }

    public boolean shouldPassToSecurityView(int userId) {
        return getBoolean(CMSettings.Secure.LOCK_PASS_TO_SECURITY_VIEW, false, userId);
    }

    public void setPassToSecurityView(boolean enabled, int userId) {
        setBoolean(CMSettings.Secure.LOCK_PASS_TO_SECURITY_VIEW, enabled, userId);
    }
}