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}