• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package io.flutter.embedding.engine.systemchannels;
2 
3 import android.support.annotation.NonNull;
4 
5 import io.flutter.Log;
6 import io.flutter.embedding.engine.dart.DartExecutor;
7 import io.flutter.plugin.common.BasicMessageChannel;
8 import io.flutter.plugin.common.JSONMessageCodec;
9 
10 import java.util.HashMap;
11 import java.util.Map;
12 
13 public class SettingsChannel {
14   private static final String TAG = "SettingsChannel";
15 
16   public static final String CHANNEL_NAME = "flutter/settings";
17   private static final String TEXT_SCALE_FACTOR = "textScaleFactor";
18   private static final String ALWAYS_USE_24_HOUR_FORMAT = "alwaysUse24HourFormat";
19   private static final String PLATFORM_BRIGHTNESS = "platformBrightness";
20 
21   @NonNull
22   public final BasicMessageChannel<Object> channel;
23 
SettingsChannel(@onNull DartExecutor dartExecutor)24   public SettingsChannel(@NonNull DartExecutor dartExecutor) {
25     this.channel = new BasicMessageChannel<>(dartExecutor, CHANNEL_NAME, JSONMessageCodec.INSTANCE);
26   }
27 
28   @NonNull
startMessage()29   public MessageBuilder startMessage() {
30     return new MessageBuilder(channel);
31   }
32 
33   public static class MessageBuilder {
34     @NonNull
35     private final BasicMessageChannel<Object> channel;
36     @NonNull
37     private Map<String, Object> message = new HashMap<>();
38 
MessageBuilder(@onNull BasicMessageChannel<Object> channel)39     MessageBuilder(@NonNull BasicMessageChannel<Object> channel) {
40       this.channel = channel;
41     }
42 
43     @NonNull
setTextScaleFactor(float textScaleFactor)44     public MessageBuilder setTextScaleFactor(float textScaleFactor) {
45       message.put(TEXT_SCALE_FACTOR, textScaleFactor);
46       return this;
47     }
48 
49     @NonNull
setUse24HourFormat(boolean use24HourFormat)50     public MessageBuilder setUse24HourFormat(boolean use24HourFormat) {
51       message.put(ALWAYS_USE_24_HOUR_FORMAT, use24HourFormat);
52       return this;
53     }
54 
55     @NonNull
setPlatformBrightness(@onNull PlatformBrightness brightness)56     public MessageBuilder setPlatformBrightness(@NonNull PlatformBrightness brightness) {
57       message.put(PLATFORM_BRIGHTNESS, brightness.name);
58       return this;
59     }
60 
send()61     public void send() {
62       Log.v(TAG, "Sending message: \n"
63         + "textScaleFactor: " + message.get(TEXT_SCALE_FACTOR) + "\n"
64         + "alwaysUse24HourFormat: " + message.get(ALWAYS_USE_24_HOUR_FORMAT) + "\n"
65         + "platformBrightness: " + message.get(PLATFORM_BRIGHTNESS));
66       channel.send(message);
67     }
68   }
69 
70   /**
71    * The brightness mode of the host platform.
72    *
73    * The {@code name} property is the serialized representation of each
74    * brightness mode when communicated via message channel.
75    */
76   public enum PlatformBrightness {
77     light("light"),
78     dark("dark");
79 
80     @NonNull
81     public String name;
82 
PlatformBrightness(@onNull String name)83     PlatformBrightness(@NonNull String name) {
84       this.name = name;
85     }
86   }
87 }