/*
* Copyright 2012 Javier Pérez Pacheco and Francisco Díaz Rodriguez
* TweetTopics 2.0
* javielinux@gmail.com
*
* 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.javielinux.preferences;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;
import android.widget.CompoundButton.OnCheckedChangeListener;
import com.android.dataframework.DataFramework;
import com.android.dataframework.Entity;
import com.javielinux.tweetprogrammed.OnAlarmReceiverTweetProgrammed;
import com.javielinux.tweettopics2.BaseActivity;
import com.javielinux.tweettopics2.R;
import com.javielinux.utils.ImageUtils;
import com.javielinux.utils.Utils;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
public class NewEditTweetProgrammed extends BaseActivity {
static final int TIME_DIALOG_ID = 0;
static final int DATE_DIALOG_ID = 1;
private long mCurrentId = -1;
private EditText mETText;
private EditText mETUserDirect;
private CheckBox mCBDirect;
private Button mBTSave;
private Button mBTCancel;
private Button mBTDate;
private Button mBTTime;
private Button mBTAddUser;
private long mDate;
private LinearLayout mLayoutUsers;
private long[] mUsersId;
private CharSequence[] mUserNames;
private boolean[] mUserChecks;
private int mYear;
private int mMonth;
private int mDay;
private int mHour;
private int mMinute;
private String mText = "";
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case TIME_DIALOG_ID:
return new TimePickerDialog(this,
mTimeSetListener, mHour, mMinute, false);
case DATE_DIALOG_ID:
return new DatePickerDialog(this,
mDateSetListener,
mYear, mMonth, mDay);
}
return null;
}
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
switch (id) {
case TIME_DIALOG_ID:
((TimePickerDialog) dialog).updateTime(mHour, mMinute);
break;
case DATE_DIALOG_ID:
((DatePickerDialog) dialog).updateDate(mYear, mMonth, mDay);
break;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
DataFramework.getInstance().open(this, Utils.packageName);
} catch (Exception e) {
e.printStackTrace();
}
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(DataFramework.KEY_ID)) mCurrentId = savedInstanceState.getLong(DataFramework.KEY_ID);
if (savedInstanceState.containsKey("text")) mText = savedInstanceState.getString("text");
} else {
Bundle extras = getIntent().getExtras();
if (extras != null) {
if (extras.containsKey(DataFramework.KEY_ID)) mCurrentId = extras.getLong(DataFramework.KEY_ID);
if (extras.containsKey("text")) mText = extras.getString("text");
}
}
setContentView(R.layout.new_tweet_programmed);
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE, 60);
mDate = calendar.getTimeInMillis();
mLayoutUsers = (LinearLayout) findViewById(R.id.users);
mETText = (EditText) findViewById(R.id.prog_text);
mETText.setText(mText);
mETUserDirect = (EditText) findViewById(R.id.prog_direct);
mCBDirect = (CheckBox) findViewById(R.id.cb_direct);
mCBDirect.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
mETUserDirect.setEnabled(isChecked);
}
});
mBTDate = (Button) findViewById(R.id.bt_programmed_date);
mBTDate.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
showDialog(DATE_DIALOG_ID);
}
});
mBTTime = (Button) findViewById(R.id.bt_programmed_time);
mBTTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
showDialog(TIME_DIALOG_ID);
}
});
mBTAddUser = (Button) findViewById(R.id.bt_add_user);
mBTAddUser.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
selectUsers();
}
});
mBTSave = (Button) findViewById(R.id.bt_save);
mBTSave.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
save();
}
});
mBTCancel = (Button) findViewById(R.id.bt_cancel);
mBTCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
setResult(RESULT_OK);
finish();
}
});
populateFields();
}
private void selectUsers() {
AlertDialog builder = new AlertDialog.Builder(this)
.setCancelable(false)
.setTitle(R.string.users)
.setMultiChoiceItems(mUserNames, mUserChecks,
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) {
}
})
.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
refreshUsers();
}
})
.create();
builder.show();
}
private void refreshUsers() {
mLayoutUsers.removeAllViews();
int count = 0;
for (int i=0; i<mUsersId.length; i++) {
if (mUserChecks[i]) {
count++;
ImageView im = new ImageView(this);
im.setPadding(10, 0, 0, 0);
im.setLayoutParams(new LinearLayout.LayoutParams(40,40));
im.setAdjustViewBounds(true);
try {
im.setImageBitmap(ImageUtils.getBitmapAvatar(mUsersId[i], Utils.AVATAR_LARGE));
} catch (Exception ex) {
ex.printStackTrace();
im.setImageResource(R.drawable.avatar);
}
mLayoutUsers.addView(im);
TextView txt = new TextView(this);
txt.setPadding(5, 0, 0, 0);
txt.setText(mUserNames[i]);
mLayoutUsers.addView(txt);
}
}
}
private void populateFields() {
List<Entity> users = DataFramework.getInstance().getEntityList("users");
mUsersId = new long[users.size()];
mUserNames = new CharSequence[users.size()];
mUserChecks = new boolean[users.size()];
if (mCurrentId != -1) {
Entity ent = new Entity("tweets_programmed", mCurrentId);
String txt_users = ent.getString("users");
ArrayList<Long> usersId = new ArrayList<Long>();
for (String user : txt_users.split(",")) {
usersId.add(Long.parseLong(user));
}
mETText.setText(ent.getString("text"));
int count = 0;
for (Entity user : users) {
mUsersId[count] = user.getId();
mUserNames[count] = user.getString("name");
if (usersId.contains(user.getId())) {
mUserChecks[count] = true;
} else {
mUserChecks[count] = false;
}
count++;
}
//mSpUsers.setSelection(mAdapterUsers.getPosition(ent.getEntity("user_tt_id")));
mDate = Long.parseLong(ent.getString("date"));
if (ent.getInt("type_id")==2) {
mCBDirect.setChecked(true);
mETUserDirect.setEnabled(true);
mETUserDirect.setText(ent.getString("username_direct"));
}
} else {
int count = 0;
for (Entity user : users) {
mUsersId[count] = user.getId();
mUserNames[count] = user.getString("name");
if (user.getInt("active")==1) {
mUserChecks[count] = true;
} else {
mUserChecks[count] = false;
}
count++;
}
}
refreshUsers();
writeDate();
}
private void writeDate() {
//Date date = new Date(mDate);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(mDate);
//calendar.setTime(date);
mYear = calendar.get(Calendar.YEAR);
mMonth = calendar.get(Calendar.MONTH);
mDay = calendar.get(Calendar.DATE);
mHour = calendar.get(Calendar.HOUR_OF_DAY);
mMinute = calendar.get(Calendar.MINUTE);
mBTDate.setText(mYear+"-"+(mMonth+1)+"-"+mDay);
String hour = mHour+"";
if (mHour<10) hour = "0"+mHour;
if (mMinute<10) {
hour += ":0"+mMinute;
} else {
hour += ":"+mMinute;
}
mBTTime.setText(hour);
//printDate();
}
/*
private void printDate() {
Log.d(Utils.TAG, "=================>>>> "+mYear+"-"+(mMonth+1)+"-"+mDay+" "+mHour+":"+mMinute);
}
*/
private void save() {
if (mETText.getText().toString().equals("")) {
Utils.showMessage(this, this.getString(R.string.need_text));
} else {
String users = "";
for (int i=0; i<mUsersId.length; i++) {
if (mUserChecks[i]) users += mUsersId[i] + ",";
}
Entity ent = new Entity("tweets_programmed", mCurrentId);
ent.setValue("users", users);
ent.setValue("text", mETText.getText().toString());
ent.setValue("date", mDate);
if (mCBDirect.isChecked()) {
ent.setValue("type_id", 2);
mCBDirect.setChecked(true);
ent.setValue("username_direct", mETUserDirect.getText().toString());
} else {
ent.setValue("type_id", 1);
}
ent.setValue("is_sent", 0);
ent.save();
OnAlarmReceiverTweetProgrammed.callNextAlarm(this);
Utils.showMessage(this, this.getString(R.string.programmed_save));
setResult(RESULT_OK);
finish();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
DataFramework.getInstance().close();
}
private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mYear = year;
mMonth = monthOfYear;
mDay = dayOfMonth;
/*Date d = new Date(mDate);
Date date = new Date(mYear-1900, mMonth, mDay, d.getHours(), d.getMinutes(), 0) ;*/
Calendar calendar = Calendar.getInstance();
//calendar.setTime(date);
calendar.set(mYear, mMonth, mDay, mHour, mMinute);
mDate = calendar.getTimeInMillis();
writeDate();
}
};
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mHour = hourOfDay;
mMinute = minute;
/*Date d = new Date(mDate);
Date date = new Date(d.getYear(), d.getMonth(), d.getDate(), mHour, mMinute, 0) ;
*/
Calendar calendar = Calendar.getInstance();
//calendar.setTime(date);
calendar.set(mYear, mMonth, mDay, mHour, mMinute);
mDate = calendar.getTimeInMillis();
writeDate();
}
};
}