/*******************************************************************************
* Software Name : RCS IMS Stack
*
* Copyright (C) 2010 France Telecom S.A.
*
* 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.orangelabs.rcs.ri.capabilities;
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.orangelabs.rcs.ri.R;
import com.orangelabs.rcs.service.api.client.contacts.ContactsApi;
/**
* Block/unblock contact for chat features
*/
public class BlockCapablities extends ListActivity implements OnItemClickListener {
/**
* List of contacts supporting the chat feature
*/
private List<ContactElement> contactCapables = new ArrayList<ContactElement>();
/**
* Layout
*/
private LayoutInflater layoutInflater;
/**
* Contacts API
*/
private ContactsApi contactsApi;
/**
* List adapter
*/
private ContactListAdapter contactListAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set layout
layoutInflater = LayoutInflater.from(getApplicationContext());
// Set UI title
setTitle(getString(R.string.menu_block_capabilities));
// Instantiate contacts API
contactsApi = new ContactsApi(getApplicationContext());
// Set list adapter
contactListAdapter = new ContactListAdapter();
setListAdapter(contactListAdapter);
getListView().setOnItemClickListener(this);
// Update data list
updateDataSet();
}
/**
* Contact list adapter
*/
private class ContactListAdapter extends BaseAdapter {
@Override
public int getCount() {
return contactCapables.size();
}
@Override
public Object getItem(int position) {
return contactCapables.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = (TextView)layoutInflater.inflate(android.R.layout.simple_list_item_1, null);
}
((TextView)convertView).setText(contactCapables.get(position).contact);
return convertView;
}
}
/**
* Update data
*/
private void updateDataSet(){
// Reset lists
contactCapables.clear();
List<String> contacts = contactsApi.getRcsContacts();
for (String contact : contacts) {
boolean[] blockedItem = {
contactsApi.isContactImBlocked(contact),
contactsApi.isContactFtBlocked(contact)
};
contactCapables.add(new ContactElement(contact, blockedItem));
}
// Notify list adapter
contactListAdapter.notifyDataSetChanged();
}
@Override
public void onItemClick(AdapterView<?> parentView, View view, int position, long id) {
final ContactElement contact = (ContactElement) getListView().getItemAtPosition(position);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.menu_block_capabilities);
builder.setCancelable(false);
builder.setMultiChoiceItems(R.array.blocked_capabilities, contact.blockedCapabilities, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
switch(which) {
case 0:
contact.blockedCapabilities[0]=isChecked;
break;
case 1:
contact.blockedCapabilities[1]=isChecked;
break;
}
}
});
builder.setPositiveButton(getString(R.string.label_ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
contactsApi.setImBlockedForContact(contact.contact, contact.blockedCapabilities[0]);
contactsApi.setFtBlockedForContact(contact.contact, contact.blockedCapabilities[1]);
}
});
builder.setNegativeButton(getString(R.string.label_cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog alert = builder.create();
alert.show();
}
/**
* Contact list element
*/
private class ContactElement{
private String contact;
private boolean[] blockedCapabilities;
public ContactElement(String contact, boolean[] blockedCapabilities) {
this.contact = contact;
this.blockedCapabilities = blockedCapabilities;
}
}
}