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
|
package invalid.lena.scrcpy;
import android.content.Context;
import android.content.SharedPreferences;
// Thin wrapper around SharedPreferences for the small set of user
// choices the app exposes. No reactivity, no DataStore - the values
// are read once when a Session starts and applied to the scrcpy
// server command line.
public final class Settings {
private static final String FILE = "scrcpy-android";
public static final String VIDEO_CODEC = "video_codec";
public static final String AUDIO_CODEC = "audio_codec";
public static final String MAX_SIZE = "max_size"; // px, long edge; 0 = no cap
public static final String VIDEO_BIT_RATE = "video_bit_rate"; // bits/sec
public static final String MAX_FPS = "max_fps"; // fps; 0 = unlimited
public static final String HINT_BACK_SHOWN = "hint_back_shown"; // first-run UI hint
public static final String STATUS_BAR = "status_bar"; // show status bar while mirroring
public static final String DEFAULT_VIDEO_CODEC = "h264";
public static final String DEFAULT_AUDIO_CODEC = "raw";
public static final int DEFAULT_MAX_SIZE = 0;
public static final int DEFAULT_VIDEO_BIT_RATE = 8_000_000;
public static final int DEFAULT_MAX_FPS = 0;
// Hidden while mirroring by default: an always-on bar over the video
// is intrusive. It still auto-shows when not CONNECTED so Reconnect
// stays reachable. Record lives in the bar, so enable this to keep it.
public static final boolean DEFAULT_STATUS_BAR = false;
private Settings() {}
public static SharedPreferences prefs(Context ctx) {
return ctx.getApplicationContext().getSharedPreferences(FILE, Context.MODE_PRIVATE);
}
public static String videoCodec(Context ctx) {
return prefs(ctx).getString(VIDEO_CODEC, DEFAULT_VIDEO_CODEC);
}
public static String audioCodec(Context ctx) {
return prefs(ctx).getString(AUDIO_CODEC, DEFAULT_AUDIO_CODEC);
}
public static int maxSize(Context ctx) {
return prefs(ctx).getInt(MAX_SIZE, DEFAULT_MAX_SIZE);
}
public static int videoBitRate(Context ctx) {
return prefs(ctx).getInt(VIDEO_BIT_RATE, DEFAULT_VIDEO_BIT_RATE);
}
public static int maxFps(Context ctx) {
return prefs(ctx).getInt(MAX_FPS, DEFAULT_MAX_FPS);
}
public static void setVideoCodec(Context ctx, String v) {
prefs(ctx).edit().putString(VIDEO_CODEC, v).apply();
}
public static void setAudioCodec(Context ctx, String a) {
prefs(ctx).edit().putString(AUDIO_CODEC, a).apply();
}
public static void setMaxSize(Context ctx, int v) {
prefs(ctx).edit().putInt(MAX_SIZE, v).apply();
}
public static void setVideoBitRate(Context ctx, int v) {
prefs(ctx).edit().putInt(VIDEO_BIT_RATE, v).apply();
}
public static void setMaxFps(Context ctx, int v) {
prefs(ctx).edit().putInt(MAX_FPS, v).apply();
}
public static boolean hintBackShown(Context ctx) {
return prefs(ctx).getBoolean(HINT_BACK_SHOWN, false);
}
public static void setHintBackShown(Context ctx, boolean v) {
prefs(ctx).edit().putBoolean(HINT_BACK_SHOWN, v).apply();
}
public static boolean showStatusBar(Context ctx) {
return prefs(ctx).getBoolean(STATUS_BAR, DEFAULT_STATUS_BAR);
}
public static void setShowStatusBar(Context ctx, boolean v) {
prefs(ctx).edit().putBoolean(STATUS_BAR, v).apply();
}
}
|