/*******************************************************************************
* 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.presence;
import java.io.ByteArrayOutputStream;
import java.util.Vector;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import com.orangelabs.rcs.service.api.client.presence.PhotoIcon;
import com.orangelabs.rcs.service.api.client.presence.PresenceInfo;
import com.orangelabs.rcs.provider.settings.RcsSettings;
import com.orangelabs.rcs.ri.R;
import com.orangelabs.rcs.ri.utils.Utils;
import com.orangelabs.rcs.ri.utils.bookmark.BrowserBookmarksPage;
import com.orangelabs.rcs.service.api.client.presence.PresenceApi;
/**
* Publish my presence info
*
* @author jexa7410
*/
public class PublishPresenceInfo extends Activity {
/**
* Activity result constants
*/
private final static int SELECT_PHOTO = 0;
private final static int SELECT_LINK = 1;
/**
* Presence info
*/
private PresenceInfo presenceInfo;
/**
* Presence API
*/
private PresenceApi presenceApi;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set layout
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.presence_edit_info);
// Set title
setTitle(R.string.menu_presence_info);
// Instanciate presence API
presenceApi = new PresenceApi(getApplicationContext());
presenceApi.connectApi();
// Display the current presence info from the RCS contacts API
presenceInfo = presenceApi.getMyPresenceInfo();
Spinner statusList = (Spinner)findViewById(R.id.availability);
if (presenceInfo.isOnline()) {
statusList.setSelection(0);
} else {
statusList.setSelection(1);
}
EditText freetextEdit = (EditText)findViewById(R.id.freetext);
freetextEdit.setText(presenceInfo.getFreetext());
freetextEdit.setOnLongClickListener(new FreetextLongClickListener());
EditText favoritelinkEdit = (EditText)findViewById(R.id.favoritelink);
favoritelinkEdit.setText(presenceInfo.getFavoriteLinkUrl());
favoritelinkEdit.setOnLongClickListener(new BookmarkLongClickListener());
ImageView photoView = (ImageView)findViewById(R.id.photo);
if (presenceInfo.getPhotoIcon() != null) {
byte[] data = presenceInfo.getPhotoIcon().getContent();
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
photoView.setImageBitmap(bmp);
} else {
photoView.setImageResource(R.drawable.ri_default_portrait_icon);
}
// Set buttons callback
Button btn = (Button)findViewById(R.id.publish_btn);
btn.setOnClickListener(btnPublishPresenceListener);
btn = (Button)findViewById(R.id.select_btn);
btn.setOnClickListener(btnSelectPhotoListener);
btn = (Button)findViewById(R.id.delete_btn);
btn.setOnClickListener(btnDeletePhotoListener);
}
@Override
public void onDestroy() {
super.onDestroy();
// Disconnect presence API
presenceApi.disconnectApi();
}
/**
* Publish button listener
*/
private OnClickListener btnPublishPresenceListener = new OnClickListener() {
public void onClick(View v) {
try {
// Get the new presence info to be published
Spinner statusList = (Spinner)findViewById(R.id.availability);
if (statusList.getSelectedItemId() == 0) {
presenceInfo.setPresenceStatus(PresenceInfo.ONLINE);
} else {
presenceInfo.setPresenceStatus(PresenceInfo.OFFLINE);
}
EditText freetextEdit = (EditText)findViewById(R.id.freetext);
presenceInfo.setFreetext(freetextEdit.getText().toString());
EditText favoritelinkEdit = (EditText)findViewById(R.id.favoritelink);
presenceInfo.setFavoriteLinkUrl(favoritelinkEdit.getText().toString());
// Publish the new presence info
if (presenceApi.setMyPresenceInfo(presenceInfo)) {
Utils.displayToast(PublishPresenceInfo.this, getString(R.string.label_publish_ok));
} else {
Utils.showMessageAndExit(PublishPresenceInfo.this, getString(R.string.label_publish_ko));
}
} catch(Exception e) {
Utils.showMessageAndExit(PublishPresenceInfo.this, getString(R.string.label_publish_ko));
}
}
};
/**
* Delete photo button listener
*/
private OnClickListener btnDeletePhotoListener = new OnClickListener() {
public void onClick(View v) {
ImageView photoView = (ImageView)findViewById(R.id.photo);
photoView.setImageResource(R.drawable.ri_default_portrait_icon);
presenceInfo.setPhotoIcon(null);
}
};
/**
* Select photo button listener
*/
private OnClickListener btnSelectPhotoListener = new OnClickListener() {
public void onClick(View v) {
// Select a photo from the gallery
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 96);
intent.putExtra("outputY", 96);
intent.putExtra("return-data", true);
startActivityForResult(intent, SELECT_PHOTO);
}
};
/**
* On activity result
*
* @param requestCode Request code
* @param resultCode Result code
* @param data Data
*/
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
return;
}
switch(requestCode) {
case SELECT_PHOTO: {
if (data != null) {
// Display the selected photo
Bundle extras = data.getExtras();
Bitmap bmp = extras.getParcelable("data");
ImageView photoView = (ImageView)findViewById(R.id.photo);
photoView.setImageBitmap(bmp);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 75, stream);
byte[] content = stream.toByteArray();
PhotoIcon photoIcon = new PhotoIcon(content, bmp.getWidth(), bmp.getHeight());
presenceInfo.setPhotoIcon(photoIcon);
}
}
break;
case SELECT_LINK: {
String link = data.getStringExtra("bookmarkWebLink");
EditText favoritelinkEdit = (EditText)findViewById(R.id.favoritelink);
favoritelinkEdit.setText(link);
}
break;
}
}
/**
* Select a predefined freetext
*/
private class FreetextLongClickListener implements OnLongClickListener{
public boolean onLongClick(View view) {
Vector<String> freeTexts = new Vector<String>();
// Read predefined free texts
String freeText = RcsSettings.getInstance().getPredefinedFreetext1();
if ((freeText != null) && (freeText.trim().length()>0)) {
freeTexts.addElement(freeText);
}
freeText = RcsSettings.getInstance().getPredefinedFreetext2();
if ((freeText != null) && (freeText.trim().length()>0)) {
freeTexts.addElement(freeText);
}
freeText = RcsSettings.getInstance().getPredefinedFreetext3();
if ((freeText != null) && (freeText.trim().length()>0)) {
freeTexts.addElement(freeText);
}
freeText = RcsSettings.getInstance().getPredefinedFreetext4();
if ((freeText != null) && (freeText.trim().length()>0)) {
freeTexts.addElement(freeText);
}
final CharSequence[] items = new CharSequence[freeTexts.size()];
for (int i=0;i<freeTexts.size();i++){
items[i] = freeTexts.elementAt(i);
}
AlertDialog.Builder builder = new AlertDialog.Builder(PublishPresenceInfo.this);
builder.setTitle(getString(R.string.label_predefined_freetext));
builder.setItems(items, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int item){
EditText freetextEdit = (EditText)findViewById(R.id.freetext);
freetextEdit.setText(items[item].toString());
}
});
AlertDialog alert = builder.create();
alert.show();
return true;
}
}
/**
* Select a web link from the browser bookmark
*/
private class BookmarkLongClickListener implements OnLongClickListener{
public boolean onLongClick(View view) {
Intent intent = new Intent(PublishPresenceInfo.this, BrowserBookmarksPage.class);
startActivityForResult(intent, SELECT_LINK);
return true;
}
}
}