/*
* 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 android.app.AlertDialog;
import android.app.Fragment;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.cyanogenmod.QuickSettingsUtil.TileInfo;
import java.util.ArrayList;
public class QuickSettingsTiles extends Fragment {
private static final int MENU_RESET = Menu.FIRST;
DraggableGridView mDragView;
private ViewGroup mContainer;
LayoutInflater mInflater;
Resources mSystemUiResources;
TileAdapter mTileAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mDragView = new DraggableGridView(getActivity(), null);
mContainer = container;
mInflater = inflater;
PackageManager pm = getActivity().getPackageManager();
if (pm != null) {
try {
mSystemUiResources = pm.getResourcesForApplication("com.android.systemui");
} catch (Exception e) {
mSystemUiResources = null;
}
}
mTileAdapter = new TileAdapter(getActivity(), 0);
return mDragView;
}
void genTiles() {
mDragView.removeAllViews();
ArrayList<String> tiles = QuickSettingsUtil.getTileListFromString(QuickSettingsUtil.getCurrentTiles(getActivity()));
for (String tileindex : tiles) {
QuickSettingsUtil.TileInfo tile = QuickSettingsUtil.TILES.get(tileindex);
if (tile != null) {
addTile(tile.getTitleResId(), tile.getIcon(), 0, false);
}
}
addTile(R.string.profiles_add, null, R.drawable.ic_menu_add, false);
}
/**
* Adds a tile to the dragview
* @param titleId - string id for tile text in systemui
* @param iconSysId - resource id for icon in systemui
* @param iconRegId - resource id for icon in local package
* @param newTile - whether a new tile is being added by user
*/
void addTile(int titleId, String iconSysId, int iconRegId, boolean newTile) {
View v = (View) mInflater.inflate(R.layout.qs_tile, null, false);
final TextView name = (TextView) v.findViewById(R.id.qs_text);
name.setText(titleId);
if (mSystemUiResources != null && iconSysId != null) {
int resId = mSystemUiResources.getIdentifier(iconSysId, null, null);
if (resId > 0) {
try {
Drawable d = mSystemUiResources.getDrawable(resId);
name.setCompoundDrawablesRelativeWithIntrinsicBounds(null, d, null, null);
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
name.setCompoundDrawablesRelativeWithIntrinsicBounds(0, iconRegId, 0, 0);
}
mDragView.addView(v, newTile ? mDragView.getChildCount() - 1 : mDragView.getChildCount());
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
genTiles();
mDragView.setOnRearrangeListener(new OnRearrangeListener() {
public void onRearrange(int oldIndex, int newIndex) {
ArrayList<String> tiles = QuickSettingsUtil.getTileListFromString(QuickSettingsUtil.getCurrentTiles(getActivity()));
String oldTile = tiles.get(oldIndex);
tiles.remove(oldIndex);
tiles.add(newIndex, oldTile);
QuickSettingsUtil.saveCurrentTiles(getActivity(), QuickSettingsUtil.getTileStringFromList(tiles));
}
@Override
public void onDelete(int index) {
ArrayList<String> tiles = QuickSettingsUtil.getTileListFromString(QuickSettingsUtil.getCurrentTiles(getActivity()));
tiles.remove(index);
QuickSettingsUtil.saveCurrentTiles(getActivity(), QuickSettingsUtil.getTileStringFromList(tiles));
}
});
mDragView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
if (arg2 != mDragView.getChildCount() - 1) return;
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.tile_choose_title)
.setAdapter(mTileAdapter, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, final int position) {
new Thread(new Runnable() {
@Override
public void run() {
ArrayList<String> curr = QuickSettingsUtil.getTileListFromString(QuickSettingsUtil.getCurrentTiles(getActivity()));
curr.add(mTileAdapter.getTileId(position));
QuickSettingsUtil.saveCurrentTiles(getActivity(), QuickSettingsUtil.getTileStringFromList(curr));
}
}).start();
TileInfo info = QuickSettingsUtil.TILES.get(mTileAdapter.getTileId(position));
addTile(info.getTitleResId(), info.getIcon(), 0, true);
}
});
builder.create().show();
}
});
setHasOptionsMenu(true);
}
@Override
public void onResume() {
super.onResume();
if (Utils.isPhone(getActivity())) {
mContainer.setPadding(20, 0, 0, 0);
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.add(0, MENU_RESET, 0, R.string.profile_reset_title)
.setIcon(R.drawable.ic_settings_backup) // use the backup icon
.setAlphabeticShortcut('r')
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |
MenuItem.SHOW_AS_ACTION_WITH_TEXT);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_RESET:
resetTiles();
return true;
default:
return false;
}
}
private void resetTiles() {
AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
alert.setTitle(R.string.tiles_reset_title);
alert.setMessage(R.string.tiles_reset_message);
alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
QuickSettingsUtil.resetTiles(getActivity());
genTiles();
}
});
alert.setNegativeButton(R.string.cancel, null);
alert.create().show();
}
@SuppressWarnings("rawtypes")
static class TileAdapter extends ArrayAdapter {
String[] mTileKeys;
Resources mResources;
public TileAdapter(Context context, int textViewResourceId) {
super(context, android.R.layout.simple_list_item_1);
mTileKeys = new String[getCount()];
QuickSettingsUtil.TILES.keySet().toArray(mTileKeys);
mResources = context.getResources();
}
@Override
public int getCount() {
return QuickSettingsUtil.TILES.size();
}
@Override
public Object getItem(int position) {
int resid = QuickSettingsUtil.TILES.get(mTileKeys[position])
.getTitleResId();
return mResources.getString(resid);
}
public String getTileId(int position) {
return QuickSettingsUtil.TILES.get(mTileKeys[position])
.getId();
}
}
public interface OnRearrangeListener {
public abstract void onRearrange(int oldIndex, int newIndex);
public abstract void onDelete(int index);
}
}