blob: 324fe82f563516eef2fffbb90b374265005ff2b6 [file] [log] [blame]
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.android.wearable.watchface.model;
import android.content.Context;
import android.graphics.Color;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
import com.example.android.wearable.watchface.R;
import com.example.android.wearable.watchface.config.AnalogComplicationConfigActivity;
import com.example.android.wearable.watchface.config.AnalogComplicationConfigRecyclerViewAdapter;
import com.example.android.wearable.watchface.config.ColorSelectionActivity;
import com.example.android.wearable.watchface.watchface.AnalogComplicationWatchFaceService;
import java.util.ArrayList;
/**
* Data represents different views for configuring the
* {@link AnalogComplicationWatchFaceService} watch face's appearance and complications
* via {@link AnalogComplicationConfigActivity}.
*/
public class AnalogComplicationConfigData {
/**
* Interface all ConfigItems must implement so the {@link RecyclerView}'s Adapter associated
* with the configuration activity knows what type of ViewHolder to inflate.
*/
public interface ConfigItemType {
int getConfigType();
}
/**
* Returns Watch Face Service class associated with configuration Activity.
*/
public static Class getWatchFaceServiceClass() {
return AnalogComplicationWatchFaceService.class;
}
/**
* Returns Material Design color options.
*/
public static ArrayList<Integer> getColorOptionsDataSet() {
ArrayList<Integer> colorOptionsDataSet = new ArrayList<>();
colorOptionsDataSet.add(Color.parseColor("#FFFFFF")); // White
colorOptionsDataSet.add(Color.parseColor("#FFEB3B")); // Yellow
colorOptionsDataSet.add(Color.parseColor("#FFC107")); // Amber
colorOptionsDataSet.add(Color.parseColor("#FF9800")); // Orange
colorOptionsDataSet.add(Color.parseColor("#FF5722")); // Deep Orange
colorOptionsDataSet.add(Color.parseColor("#F44336")); // Red
colorOptionsDataSet.add(Color.parseColor("#E91E63")); // Pink
colorOptionsDataSet.add(Color.parseColor("#9C27B0")); // Purple
colorOptionsDataSet.add(Color.parseColor("#673AB7")); // Deep Purple
colorOptionsDataSet.add(Color.parseColor("#3F51B5")); // Indigo
colorOptionsDataSet.add(Color.parseColor("#2196F3")); // Blue
colorOptionsDataSet.add(Color.parseColor("#03A9F4")); // Light Blue
colorOptionsDataSet.add(Color.parseColor("#00BCD4")); // Cyan
colorOptionsDataSet.add(Color.parseColor("#009688")); // Teal
colorOptionsDataSet.add(Color.parseColor("#4CAF50")); // Green
colorOptionsDataSet.add(Color.parseColor("#8BC34A")); // Lime Green
colorOptionsDataSet.add(Color.parseColor("#CDDC39")); // Lime
colorOptionsDataSet.add(Color.parseColor("#607D8B")); // Blue Grey
colorOptionsDataSet.add(Color.parseColor("#9E9E9E")); // Grey
colorOptionsDataSet.add(Color.parseColor("#795548")); // Brown
colorOptionsDataSet.add(Color.parseColor("#000000")); // Black
return colorOptionsDataSet;
}
/**
* Includes all data to populate each of the 5 different custom
* {@link ViewHolder} types in {@link AnalogComplicationConfigRecyclerViewAdapter}.
*/
public static ArrayList<ConfigItemType> getDataToPopulateAdapter(Context context) {
ArrayList<ConfigItemType> settingsConfigData = new ArrayList<>();
// Data for watch face preview and complications UX in settings Activity.
ConfigItemType complicationConfigItem =
new PreviewAndComplicationsConfigItem(R.drawable.add_complication);
settingsConfigData.add(complicationConfigItem);
// Data for "more options" UX in settings Activity.
ConfigItemType moreOptionsConfigItem =
new MoreOptionsConfigItem(R.drawable.ic_expand_more_white_18dp);
settingsConfigData.add(moreOptionsConfigItem);
// Data for highlight/marker (second hand) color UX in settings Activity.
ConfigItemType markerColorConfigItem =
new ColorConfigItem(
context.getString(R.string.config_marker_color_label),
R.drawable.icn_styles,
context.getString(R.string.saved_marker_color),
ColorSelectionActivity.class);
settingsConfigData.add(markerColorConfigItem);
// Data for Background color UX in settings Activity.
ConfigItemType backgroundColorConfigItem =
new ColorConfigItem(
context.getString(R.string.config_background_color_label),
R.drawable.icn_styles,
context.getString(R.string.saved_background_color),
ColorSelectionActivity.class);
settingsConfigData.add(backgroundColorConfigItem);
// Data for 'Unread Notifications' UX (toggle) in settings Activity.
ConfigItemType unreadNotificationsConfigItem =
new UnreadNotificationConfigItem(
context.getString(R.string.config_unread_notifications_label),
R.drawable.ic_notifications_white_24dp,
R.drawable.ic_notifications_off_white_24dp,
R.string.saved_unread_notifications_pref);
settingsConfigData.add(unreadNotificationsConfigItem);
// Data for background complications UX in settings Activity.
ConfigItemType backgroundImageComplicationConfigItem =
// TODO (jewalker): Revised in another CL to support background complication.
new BackgroundComplicationConfigItem(
context.getString(R.string.config_background_image_complication_label),
R.drawable.ic_landscape_white);
settingsConfigData.add(backgroundImageComplicationConfigItem);
return settingsConfigData;
}
/**
* Data for Watch Face Preview with Complications Preview item in RecyclerView.
*/
public static class PreviewAndComplicationsConfigItem implements ConfigItemType {
private int defaultComplicationResourceId;
PreviewAndComplicationsConfigItem(int defaultComplicationResourceId) {
this.defaultComplicationResourceId = defaultComplicationResourceId;
}
public int getDefaultComplicationResourceId() {
return defaultComplicationResourceId;
}
@Override
public int getConfigType() {
return AnalogComplicationConfigRecyclerViewAdapter.TYPE_PREVIEW_AND_COMPLICATIONS_CONFIG;
}
}
/**
* Data for "more options" item in RecyclerView.
*/
public static class MoreOptionsConfigItem implements ConfigItemType {
private int iconResourceId;
MoreOptionsConfigItem(int iconResourceId) {
this.iconResourceId = iconResourceId;
}
public int getIconResourceId() {
return iconResourceId;
}
@Override
public int getConfigType() {
return AnalogComplicationConfigRecyclerViewAdapter.TYPE_MORE_OPTIONS;
}
}
/**
* Data for color picker item in RecyclerView.
*/
public static class ColorConfigItem implements ConfigItemType {
private String name;
private int iconResourceId;
private String sharedPrefString;
private Class<ColorSelectionActivity> activityToChoosePreference;
ColorConfigItem(
String name,
int iconResourceId,
String sharedPrefString,
Class<ColorSelectionActivity> activity) {
this.name = name;
this.iconResourceId = iconResourceId;
this.sharedPrefString = sharedPrefString;
this.activityToChoosePreference = activity;
}
public String getName() {
return name;
}
public int getIconResourceId() {
return iconResourceId;
}
public String getSharedPrefString() {
return sharedPrefString;
}
public Class<ColorSelectionActivity> getActivityToChoosePreference() {
return activityToChoosePreference;
}
@Override
public int getConfigType() {
return AnalogComplicationConfigRecyclerViewAdapter.TYPE_COLOR_CONFIG;
}
}
/**
* Data for Unread Notification preference picker item in RecyclerView.
*/
public static class UnreadNotificationConfigItem implements ConfigItemType {
private String name;
private int iconEnabledResourceId;
private int iconDisabledResourceId;
private int sharedPrefId;
UnreadNotificationConfigItem(
String name,
int iconEnabledResourceId,
int iconDisabledResourceId,
int sharedPrefId) {
this.name = name;
this.iconEnabledResourceId = iconEnabledResourceId;
this.iconDisabledResourceId = iconDisabledResourceId;
this.sharedPrefId = sharedPrefId;
}
public String getName() {
return name;
}
public int getIconEnabledResourceId() {
return iconEnabledResourceId;
}
public int getIconDisabledResourceId() {
return iconDisabledResourceId;
}
public int getSharedPrefId() {
return sharedPrefId;
}
@Override
public int getConfigType() {
return AnalogComplicationConfigRecyclerViewAdapter.TYPE_UNREAD_NOTIFICATION_CONFIG;
}
}
/**
* Data for background image complication picker item in RecyclerView.
*/
public static class BackgroundComplicationConfigItem implements ConfigItemType {
private String name;
private int iconResourceId;
BackgroundComplicationConfigItem(
String name,
int iconResourceId) {
this.name = name;
this.iconResourceId = iconResourceId;
}
public String getName() {
return name;
}
public int getIconResourceId() {
return iconResourceId;
}
@Override
public int getConfigType() {
return AnalogComplicationConfigRecyclerViewAdapter.TYPE_BACKGROUND_COMPLICATION_IMAGE_CONFIG;
}
}
}