blob: d7fd47cb1c19be12a3d024ef8a6d1c553cc551cd [file] [log] [blame]
/*
* Copyright (C) 2014 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.supportv7.graphics;
import com.example.android.supportv7.R;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.graphics.Palette;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
import java.util.List;
/**
* Activity which displays the more details about a generated {@link Palette} for a specific
* {@link android.provider.MediaStore} image.
*
* Displays the full generated palette of colors in a grid, which allows clicking on an palette item
* to display more information in a {@link Toast}.
*
* Also allows the customization of the number of colors used in the palette generation for
* demonstration purposes.
*/
public class PaletteDetailActivity extends AppCompatActivity {
private ImageView mImageView;
private GridView mGridView;
private SwatchesPalette mSwatchesPalette;
private Uri mImageUri;
private Toast mCurrentToast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.palette_activity_detail);
mImageUri = getIntent().getData();
mImageView = (ImageView) findViewById(R.id.image);
mGridView = (GridView) findViewById(R.id.palette);
mSwatchesPalette = new SwatchesPalette();
mGridView.setAdapter(mSwatchesPalette);
// Set an OnItemClickListener to display a information Toast when a Palette item is clicked
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {
// Cancel the current Toast if there is already one being displayed
if (mCurrentToast != null) {
mCurrentToast.cancel();
}
final Palette.Swatch item = (Palette.Swatch) adapterView.getItemAtPosition(pos);
mCurrentToast = Toast.makeText(PaletteDetailActivity.this,
item.toString(), Toast.LENGTH_LONG);
mCurrentToast.show();
}
});
// Load the image with a default number of colors
loadImage(16);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.sample_palette_actions, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_num_colors_8:
loadImage(8);
item.setChecked(true);
return true;
case R.id.menu_num_colors_12:
loadImage(12);
item.setChecked(true);
return true;
case R.id.menu_num_colors_16:
loadImage(16);
item.setChecked(true);
return true;
case R.id.menu_num_colors_24:
loadImage(24);
item.setChecked(true);
return true;
case R.id.menu_num_colors_32:
loadImage(32);
item.setChecked(true);
return true;
}
return super.onOptionsItemSelected(item);
}
private void loadImage(final int numColors) {
final int id = Integer.parseInt(mImageUri.getLastPathSegment());
ImageLoader.loadMediaStoreThumbnail(mImageView, id, new ImageLoader.Listener() {
@Override
public void onImageLoaded(Bitmap bitmap) {
Palette.generateAsync(bitmap, numColors, new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
populatePalette(palette);
}
});
}
});
}
private class SwatchesPalette extends BaseAdapter {
private List<Palette.Swatch> mSwatches;
@Override
public int getCount() {
return mSwatches != null ? mSwatches.size() : 0;
}
@Override
public Palette.Swatch getItem(int position) {
return mSwatches.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
void setSwatches(List<Palette.Swatch> palette) {
mSwatches = palette;
notifyDataSetChanged();
}
@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null) {
view = getLayoutInflater().inflate(R.layout.palette_grid_item, parent, false);
}
setBackgroundColor(view, getItem(position));
return view;
}
}
private void populatePalette(Palette palette) {
mSwatchesPalette.setSwatches(palette.getSwatches());
setBackgroundColor(findViewById(R.id.text_vibrant), palette.getVibrantSwatch());
setBackgroundColor(findViewById(R.id.text_muted), palette.getMutedSwatch());
setBackgroundColor(findViewById(R.id.text_light_vibrant), palette.getLightVibrantSwatch());
setBackgroundColor(findViewById(R.id.text_light_muted), palette.getLightMutedSwatch());
setBackgroundColor(findViewById(R.id.text_dark_vibrant), palette.getDarkVibrantSwatch());
setBackgroundColor(findViewById(R.id.text_dark_muted), palette.getDarkMutedSwatch());
}
private void setBackgroundColor(View view, Palette.Swatch swatch) {
if (view != null && swatch != null) {
view.setBackgroundColor(swatch.getRgb());
}
}
}