/*
* Copyright (C) 2012 The CyanogenMod 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.android.settings.cyanogenmod;
import java.io.File;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.Fragment;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.provider.MediaStore;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.android.settings.R;
public class IconPicker {
private Activity mParent;
private Resources mResources;
private OnIconPickListener mIconListener;
private static final String ICON_ACTION = "com.cyanogenmod.ACTION_PICK_ICON";
public static final String RESOURCE_NAME = "resource_name";
public static final String PACKAGE_NAME = "package_name";
public static final int REQUEST_PICK_SYSTEM = 0;
public static final int REQUEST_PICK_GALLERY = 1;
public static final int REQUEST_PICK_ICON_PACK = 2;
public interface OnIconPickListener {
void iconPicked(int requestCode, int resultCode, Intent in);
}
public IconPicker(Activity parent, OnIconPickListener listener) {
mParent = parent;
mResources = parent.getResources();
mIconListener = listener;
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
mIconListener.iconPicked(requestCode, resultCode, data);
}
public void pickIcon(final int fragmentId, final File image) {
Intent iconPack = new Intent(ICON_ACTION);
ArrayList<String> items = new ArrayList<String>();
items.add(mResources.getString(R.string.icon_picker_system_icons_title));
items.add(mResources.getString(R.string.icon_picker_gallery_title));
ComponentName aInfo = iconPack.resolveActivity(mParent.getPackageManager());
if (aInfo != null) {
items.add(mResources.getString(R.string.icon_picker_pack_title));
}
new AlertDialog.Builder(mParent)
.setTitle(R.string.icon_picker_title)
.setItems(items.toArray(new String[items.size()]), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
showChosen(item, image, fragmentId);
}
}).show();
}
private void startFragmentOrActivityForResult(Intent pickIntent, int requestCode, int fragmentId) {
if (fragmentId == 0) {
mParent.startActivityForResult(pickIntent, requestCode);
} else {
Fragment cFrag = mParent.getFragmentManager().findFragmentById(fragmentId);
if (cFrag != null) {
mParent.startActivityFromFragment(cFrag, pickIntent, requestCode);
}
}
}
private void showChosen(final int type, File image, int fragmentId) {
if (type == REQUEST_PICK_SYSTEM) {
ListView listie = new ListView(mParent);
listie.setAdapter(new IconAdapter());
final Dialog dialog = new Dialog(mParent);
dialog.setTitle(R.string.icon_picker_choose_icon_title);
dialog.setContentView(listie);
listie.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent in = new Intent();
in.putExtra("resource_name", ((IconAdapter) parent.getAdapter()).getItemReference(position));
mIconListener.iconPicked(type, Activity.RESULT_OK, in);
dialog.dismiss();
}
});
dialog.show();
} else if (type == REQUEST_PICK_GALLERY) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("scale", true);
intent.putExtra("scaleUpIfNeeded", false);
intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 162);
intent.putExtra("outputY", 162);
try {
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(image));
intent.putExtra("return-data", false);
startFragmentOrActivityForResult(intent, type, fragmentId);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
}
} else if (type == REQUEST_PICK_ICON_PACK) {
Intent iconPack = new Intent(ICON_ACTION);
startFragmentOrActivityForResult(iconPack, type, fragmentId);
}
}
class IconAdapter extends BaseAdapter {
String[] labels;
TypedArray icons;
public IconAdapter() {
labels = mResources.getStringArray(R.array.lockscreen_icon_picker_labels);
icons = mResources.obtainTypedArray(R.array.lockscreen_icon_picker_icons);
}
@Override
public int getCount() {
return labels.length;
}
@Override
public Object getItem(int position) {
return icons.getDrawable(position);
}
public String getItemReference(int position) {
String name = icons.getString(position);
int separatorIndex = name.lastIndexOf(File.separator);
int periodIndex = name.lastIndexOf('.');
return name.substring(separatorIndex + 1, periodIndex);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View iView = convertView;
if (convertView == null) {
iView = View.inflate(mParent, android.R.layout.simple_list_item_1, null);
}
TextView tt = (TextView) iView.findViewById(android.R.id.text1);
tt.setText(labels[position]);
Drawable ic = ((Drawable) getItem(position)).mutate();
int bound = mParent.getResources().getDimensionPixelSize(R.dimen.shortcut_picker_left_padding);
ic.setBounds(0, 0, bound, bound);
tt.setCompoundDrawables(ic, null, null, null);
return iView;
}
}
class IconItem {
String label;
int id;
IconItem(String l, int i) {
label = l;
id = i;
}
}
}