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 }