1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.DeviceAsWebcam.utils;
18 
19 import android.annotation.Nullable;
20 import android.content.Context;
21 import android.content.SharedPreferences;
22 
23 import com.android.DeviceAsWebcam.R;
24 
25 /**
26  * Utility class for reading/writing user preferences from/to SharedPreferences.
27  */
28 public class UserPrefs {
29     private final Context mContext;
30     private final SharedPreferences mPrefs;
31     private final SharedPreferences.Editor mPrefsEditor;
32 
UserPrefs(Context context)33     public UserPrefs(Context context) {
34         mContext = context;
35         mPrefs = context.getSharedPreferences(context.getString(R.string.prefs_file_name),
36                 Context.MODE_PRIVATE);
37         mPrefsEditor = mPrefs.edit();
38     }
39 
40     /**
41      * Read the stored zoom ratio for the given cameraId. Returns {@code defaultZoom} if no entry
42      * is found.
43      */
fetchZoomRatio(String cameraId, float defaultZoom)44     public synchronized float fetchZoomRatio(String cameraId, float defaultZoom) {
45         return mPrefs.getFloat(mContext.getString(R.string.prefs_zoom_ratio_key, cameraId),
46                 defaultZoom);
47     }
48 
49     /**
50      * Write the provided zoom ratio for the given cameraId to SharedPrefs.
51      */
storeZoomRatio(String cameraId, float zoom)52     public synchronized void storeZoomRatio(String cameraId, float zoom) {
53         mPrefsEditor.putFloat(mContext.getString(R.string.prefs_zoom_ratio_key, cameraId), zoom);
54         mPrefsEditor.apply();
55     }
56 
57     /**
58      * Read and return the stored cameraId, or return {@code defaultCameraId} if no cameraId is
59      * stored.
60      */
61     @Nullable
fetchCameraId(@ullable String defaultCameraId)62     public synchronized String fetchCameraId(@Nullable String defaultCameraId) {
63         return mPrefs.getString(mContext.getString(R.string.prefs_camera_id_key), defaultCameraId);
64     }
65 
66     /**
67      * Write cameraId to SharedPrefs.
68      */
storeCameraId(String cameraId)69     public synchronized void storeCameraId(String cameraId) {
70         mPrefsEditor.putString(mContext.getString(R.string.prefs_camera_id_key), cameraId);
71         mPrefsEditor.apply();
72     }
73 
74     /**
75      * Read and return the stored back cameraId, or return {@code defaultCameraId} if no cameraId]
76      * is stored.
77      */
78     @Nullable
fetchBackCameraId(@ullable String defaultCameraId)79     public synchronized String fetchBackCameraId(@Nullable String defaultCameraId) {
80         return mPrefs.getString(mContext.getString(R.string.prefs_back_camera_id_key),
81                 defaultCameraId);
82     }
83 
84     /**
85      * Write back cameraId to SharedPrefs.
86      */
storeBackCameraId(String cameraId)87     public synchronized void storeBackCameraId(String cameraId) {
88         mPrefsEditor.putString(mContext.getString(R.string.prefs_back_camera_id_key), cameraId);
89         mPrefsEditor.apply();
90     }
91 
92     /**
93      * Read and return the stored front cameraId, or return {@code defaultCameraId} if no cameraId]
94      * is stored.
95      */
96     @Nullable
fetchFrontCameraId(@ullable String defaultCameraId)97     public synchronized String fetchFrontCameraId(@Nullable String defaultCameraId) {
98         return mPrefs.getString(mContext.getString(R.string.prefs_front_camera_id_key),
99                 defaultCameraId);
100     }
101 
102     /**
103      * Write front cameraId to SharedPrefs.
104      */
storeFrontCameraId(String cameraId)105     public synchronized void storeFrontCameraId(String cameraId) {
106         mPrefsEditor.putString(mContext.getString(R.string.prefs_front_camera_id_key), cameraId);
107         mPrefsEditor.apply();
108     }
109 
110     /**
111      * Read and return the stored HighQualityMode preference, or return {@code defaultValue} if
112      * not set.
113      */
fetchHighQualityModeEnabled(boolean defaultValue)114     public synchronized boolean fetchHighQualityModeEnabled(boolean defaultValue) {
115         return mPrefs.getBoolean(mContext.getString(R.string.prefs_high_quality_mode_enabled),
116                 defaultValue);
117     }
118 
119     /**
120      * Write preferred HighQualityMode to SharedPrefs.
121      */
storeHighQualityModeEnabled(boolean enabled)122     public synchronized void storeHighQualityModeEnabled(boolean enabled) {
123         mPrefsEditor.putBoolean(mContext.getString(R.string.prefs_high_quality_mode_enabled),
124                 enabled);
125         mPrefsEditor.apply();
126     }
127 
fetchHighQualityWarningEnabled(boolean defaultValue)128     public synchronized boolean fetchHighQualityWarningEnabled(boolean defaultValue) {
129         return mPrefs.getBoolean(mContext.getString(R.string.prefs_high_quality_warning_enabled),
130                 defaultValue);
131     }
132 
storeHighQualityWarningEnabled(boolean value)133     public synchronized void storeHighQualityWarningEnabled(boolean value) {
134         mPrefsEditor.putBoolean(mContext.getString(R.string.prefs_high_quality_warning_enabled),
135                 value);
136         mPrefsEditor.apply();
137     }
138 }
139