summaryrefslogtreecommitdiff
path: root/sdl_android/src/main/java/com/smartdevicelink/proxy/LockScreenManager.java
blob: 1188d28b9d019ca0651a513015ea2f868d342de3 (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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package com.smartdevicelink.proxy;

import java.io.IOException;

import android.graphics.Bitmap;

import com.smartdevicelink.proxy.rpc.OnLockScreenStatus;
import com.smartdevicelink.proxy.rpc.enums.HMILevel;
import com.smartdevicelink.proxy.rpc.enums.LockScreenStatus;
import com.smartdevicelink.util.HttpUtils;

public class LockScreenManager {
	
    public interface OnLockScreenIconDownloadedListener{
        public void onLockScreenIconDownloaded(Bitmap icon);
        public void onLockScreenIconDownloadError(Exception e);
    }
    
    private Bitmap lockScreenIcon;
	private Boolean bUserSelected = false;
	private Boolean bDriverDistStatus = null;
	private HMILevel  hmiLevel = null;
	@SuppressWarnings("unused")
    private int iSessionID;

	public synchronized void setSessionID(int iVal)
	{
			iSessionID = iVal;
	}
	
	private synchronized void setUserSelectedStatus(boolean bVal)
	{
			bUserSelected = bVal;
	}	

	public synchronized void setDriverDistStatus(boolean bVal)
	{
			bDriverDistStatus = bVal;	
	}

	public synchronized void setHMILevel(HMILevel hmiVal)
	{		
		hmiLevel = hmiVal;
		
		if ( (hmiVal.equals(HMILevel.HMI_FULL)) || (hmiVal.equals(HMILevel.HMI_LIMITED)) )
			setUserSelectedStatus(true);
		else if (hmiVal.equals(HMILevel.HMI_NONE))
			setUserSelectedStatus(false);				
	}
	
	public synchronized OnLockScreenStatus getLockObj(/*int SessionID*/)
	{
		//int iSessionID = SessionID;
		OnLockScreenStatus myLock = new OnLockScreenStatus();
		myLock.setDriverDistractionStatus(bDriverDistStatus);
		myLock.setHMILevel(hmiLevel);
		myLock.setUserSelected(bUserSelected);
		myLock.setShowLockScreen(getLockScreenStatus());
		
		return myLock;
	}
	
	private synchronized LockScreenStatus getLockScreenStatus() 
	{
		
		if ( (hmiLevel == null) || (hmiLevel.equals(HMILevel.HMI_NONE)) )
		{
			return LockScreenStatus.OFF;
		}
		else if ( hmiLevel.equals(HMILevel.HMI_BACKGROUND) )
		{
			if (bDriverDistStatus == null)
			{
				//we don't have driver distraction, lockscreen is entirely based on userselection
				if (bUserSelected)
					return LockScreenStatus.REQUIRED;
				else
					return LockScreenStatus.OFF;
			}
			else if (bDriverDistStatus && bUserSelected)
			{
				return LockScreenStatus.REQUIRED;
			}
			else if (!bDriverDistStatus && bUserSelected)
			{
				return LockScreenStatus.OPTIONAL;
			}
			else
			{
				return LockScreenStatus.OFF;
			}
		}
		else if ( (hmiLevel.equals(HMILevel.HMI_FULL)) || (hmiLevel.equals(HMILevel.HMI_LIMITED)) )
		{
			if ( (bDriverDistStatus != null) && (!bDriverDistStatus) )
			{
				return LockScreenStatus.OPTIONAL;
			}
			else
				return LockScreenStatus.REQUIRED;
		}
		return LockScreenStatus.OFF;
	}

    public void downloadLockScreenIcon(final String url, final OnLockScreenIconDownloadedListener l){
        new Thread(new Runnable(){
            @Override
            public void run(){
                try{
                    lockScreenIcon = HttpUtils.downloadImage(url);
                    if(l != null){
                        l.onLockScreenIconDownloaded(lockScreenIcon);
                    }
                }catch(IOException e){
                    if(l != null){
                        l.onLockScreenIconDownloadError(e);
                    }
                }
            }
        }).start();
    }

    public Bitmap getLockScreenIcon(){
        return this.lockScreenIcon;
    }
}