1ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes/*
2ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes * Copyright (C) 2014 The Android Open Source Project
3ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes *
4ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes * Licensed under the Apache License, Version 2.0 (the "License");
5ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes * you may not use this file except in compliance with the License.
6ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes * You may obtain a copy of the License at
7ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes *
8ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes *      http://www.apache.org/licenses/LICENSE-2.0
9ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes *
10ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes * Unless required by applicable law or agreed to in writing, software
11ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes * distributed under the License is distributed on an "AS IS" BASIS,
12ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes * See the License for the specific language governing permissions and
14ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes * limitations under the License.
15ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes */
16ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
17ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banespackage com.example.android.supportv7.graphics;
18ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
19ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banesimport android.content.Context;
20ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banesimport android.content.Intent;
21ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banesimport android.database.Cursor;
22ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banesimport android.graphics.Bitmap;
23ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banesimport android.net.Uri;
24ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banesimport android.os.Bundle;
25ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banesimport android.provider.MediaStore;
26ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banesimport android.view.Menu;
27ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banesimport android.view.MenuInflater;
28ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banesimport android.view.MenuItem;
29ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banesimport android.view.View;
30ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banesimport android.widget.ImageView;
31ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banesimport android.widget.ListView;
32ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
33def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.annotation.NonNull;
34def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.appcompat.app.AppCompatActivity;
35def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.core.view.ViewCompat;
36def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.cursoradapter.widget.ResourceCursorAdapter;
37def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.fragment.app.ListFragment;
38def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.loader.app.LoaderManager;
39def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.loader.content.CursorLoader;
40def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.loader.content.Loader;
41def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.palette.graphics.Palette;
42def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas
43e8e0eae2600001c8b1e9d5a9f0331cf045193746Aurimas Liutikasimport com.example.android.supportv7.R;
44e8e0eae2600001c8b1e9d5a9f0331cf045193746Aurimas Liutikas
45ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes/**
46ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes * Activity which displays the images from the device's {@link MediaStore}, alongside the generated
47ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * {@link androidx.palette.graphics.Palette} results.
48ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes *
49ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes * Allows the customization of the number of colors used in the palette generation, to demonstrate
50ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes * the difference in results for different types of images.
51ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes */
5244d25261c2a38c81f1eea123de3986b453b9afeeChris Banespublic class PaletteActivity extends AppCompatActivity {
53ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
54ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes    @Override
55ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes    protected void onCreate(Bundle savedInstanceState) {
56ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        super.onCreate(savedInstanceState);
57ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
58ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        getSupportFragmentManager()
59ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                .beginTransaction()
60ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                .replace(android.R.id.content, new PaletteMediaStoreListFragment())
61ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                .commit();
62ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes    }
63ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
64ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes    /**
65ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas     * The {@link androidx.fragment.app.ListFragment} which does all of the hard work.
66ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes     */
67ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes    public static class PaletteMediaStoreListFragment extends ListFragment
68ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            implements LoaderManager.LoaderCallbacks<Cursor> {
69ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
70ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        /**
71ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes         * Projection used for querying the {@link android.provider.MediaStore}.
72ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes         */
73ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        static final String[] PROJECTION = {
74ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                MediaStore.Images.ImageColumns._ID,
75ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                MediaStore.Images.ImageColumns.DATE_ADDED
76ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        };
77ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
78ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        private PhotosCursorAdapter mAdapter;
79ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
80ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        @Override
81ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        public void onCreate(Bundle savedInstanceState) {
82ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            super.onCreate(savedInstanceState);
83ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            setHasOptionsMenu(true);
84ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        }
85ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
86ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        @Override
87ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        public void onViewCreated(View view, Bundle savedInstanceState) {
88ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            super.onViewCreated(view, savedInstanceState);
89ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
90ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            // Enable fast scroll to make it easier to navigate large number of images
91ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            getListView().setFastScrollEnabled(true);
92ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        }
93ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
94ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        @Override
95ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        public void onActivityCreated(Bundle savedInstanceState) {
96ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            super.onActivityCreated(savedInstanceState);
97ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
98ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            // Create an Adapter and use a new Adapter
99ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            mAdapter = new PhotosCursorAdapter(getActivity(), null);
100ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            mAdapter.setNumColors(16);
101ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            setListAdapter(mAdapter);
102ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
103ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            // Start the loader manager to create our CursorLoader
104ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            getLoaderManager().initLoader(0, null, this);
105ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        }
106ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
107ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        @Override
108ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
109ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            inflater.inflate(R.menu.sample_palette_actions, menu);
110ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        }
111ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
112ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        @Override
113ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        public boolean onOptionsItemSelected(MenuItem item) {
114ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            switch (item.getItemId()) {
115ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                case R.id.menu_num_colors_8:
116ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    mAdapter.setNumColors(8);
117ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    item.setChecked(true);
118ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    return true;
119ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                case R.id.menu_num_colors_12:
120ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    mAdapter.setNumColors(12);
121ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    item.setChecked(true);
122ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    return true;
123ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                case R.id.menu_num_colors_16:
124ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    mAdapter.setNumColors(16);
125ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    item.setChecked(true);
126ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    return true;
127ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                case R.id.menu_num_colors_24:
128ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    mAdapter.setNumColors(24);
129ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    item.setChecked(true);
130ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    return true;
131ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                case R.id.menu_num_colors_32:
132ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    mAdapter.setNumColors(32);
133ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    item.setChecked(true);
134ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    return true;
135ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            }
136ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
137ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            return super.onOptionsItemSelected(item);
138ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        }
139ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
140ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        @Override
141ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        public void onListItemClick(ListView l, View v, int position, long id) {
142ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            final Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon()
143ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    .appendEncodedPath(String.valueOf(id)).build();
144ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
145ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            // Start the Detail Activity
146ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            Intent intent = new Intent(getActivity(), PaletteDetailActivity.class);
147ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            intent.setData(uri);
148ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            startActivity(intent);
149ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        }
150ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
151aa5a52bbe93c585f50d5521c65c2df6f18960c20Ian Lake        @NonNull
152ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        @Override
153ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        public Loader<Cursor> onCreateLoader(int id, Bundle bundle) {
154ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            return new CursorLoader(
155ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    getActivity(),
156ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
157ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    PROJECTION,
158ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    null,
159ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    null,
160ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    MediaStore.Images.ImageColumns.DATE_ADDED + " DESC");
161ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        }
162ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
163ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        @Override
164aa5a52bbe93c585f50d5521c65c2df6f18960c20Ian Lake        public void onLoadFinished(@NonNull Loader<Cursor> cursorLoader, Cursor cursor) {
165ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            mAdapter.swapCursor(cursor);
166ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        }
167ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
168ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        @Override
169aa5a52bbe93c585f50d5521c65c2df6f18960c20Ian Lake        public void onLoaderReset(@NonNull Loader<Cursor> cursorLoader) {
170ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            mAdapter.swapCursor(null);
171ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        }
172ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
173ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        private static class PhotosCursorAdapter extends ResourceCursorAdapter {
174ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
175ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            private int mNumColors;
176ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
177ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            public PhotosCursorAdapter(Context context, Cursor c) {
178ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                super(context, R.layout.palette_list_item, c, false);
179ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                mContext = context;
180ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            }
181ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
182ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            /**
183ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes             * Set the number of colors used for {@link Palette} generation.
184ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes             */
185ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            void setNumColors(int numColors) {
186ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                mNumColors = numColors;
187ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                notifyDataSetChanged();
188ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            }
189ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
190ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            @Override
191ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            public void bindView(final View view, Context context, Cursor cursor) {
192ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                // Let's reset the view, clearing the ImageView and resetting the background colors
193ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                // of the Palette UI
194ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                ImageView imageView = (ImageView) view.findViewById(R.id.image);
195ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                imageView.setImageDrawable(null);
196ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
19747082c30c630c34829439a9eecd1cf7e8d255a86Aurimas Liutikas                ViewCompat.setBackground(view.findViewById(R.id.text_vibrant), null);
19847082c30c630c34829439a9eecd1cf7e8d255a86Aurimas Liutikas                ViewCompat.setBackground(view.findViewById(R.id.text_muted), null);
19947082c30c630c34829439a9eecd1cf7e8d255a86Aurimas Liutikas                ViewCompat.setBackground(view.findViewById(R.id.text_light_vibrant), null);
20047082c30c630c34829439a9eecd1cf7e8d255a86Aurimas Liutikas                ViewCompat.setBackground(view.findViewById(R.id.text_light_muted), null);
20147082c30c630c34829439a9eecd1cf7e8d255a86Aurimas Liutikas                ViewCompat.setBackground(view.findViewById(R.id.text_dark_vibrant), null);
20247082c30c630c34829439a9eecd1cf7e8d255a86Aurimas Liutikas                ViewCompat.setBackground(view.findViewById(R.id.text_dark_muted), null);
203ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
204ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                final long id = cursor.getLong(
205ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                        cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns._ID));
206ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
207ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                ImageLoader.loadMediaStoreThumbnail(imageView, id, new ImageLoader.Listener() {
208ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    @Override
209ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    public void onImageLoaded(Bitmap bitmap) {
210e8e0eae2600001c8b1e9d5a9f0331cf045193746Aurimas Liutikas                        new Palette.Builder(bitmap).maximumColorCount(mNumColors).generate(
211ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                new Palette.PaletteAsyncListener() {
212ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                    @Override
213ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                    public void onGenerated(Palette palette) {
214ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                        setBackgroundColor(
215ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                                view.findViewById(R.id.text_vibrant),
216ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                                palette.getVibrantSwatch());
217ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                        setBackgroundColor(
218ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                                view.findViewById(R.id.text_muted),
219ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                                palette.getMutedSwatch());
220ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                        setBackgroundColor(
221ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                                view.findViewById(R.id.text_light_vibrant),
222ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                                palette.getLightVibrantSwatch());
223ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                        setBackgroundColor(
224ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                                view.findViewById(R.id.text_light_muted),
225ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                                palette.getLightMutedSwatch());
226ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                        setBackgroundColor(
227ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                                view.findViewById(R.id.text_dark_vibrant),
228ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                                palette.getDarkVibrantSwatch());
229ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                        setBackgroundColor(
230ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                                view.findViewById(R.id.text_dark_muted),
231ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                                palette.getDarkMutedSwatch());
232ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                    }
233ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                                });
234ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                    }
235ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                });
236ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            }
237ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        }
238ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
239ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        static void setBackgroundColor(View view, Palette.Swatch swatch) {
240ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            if (view != null && swatch != null) {
241ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes                view.setBackgroundColor(swatch.getRgb());
242ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes            }
243ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes        }
244ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
245ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes    }
246ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes
247ef3b66039ff877b61bbc823921f6033d777cd3c8Chris Banes}