package com.fruit.launcher;
import java.io.UnsupportedEncodingException;
import com.fruit.launcher.LauncherSettings.Applications;
import com.fruit.launcher.LauncherSettings.BaseLauncherColumns;
import com.fruit.launcher.LauncherSettings.Favorites;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.text.InputFilter;
import android.text.Spanned;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class NewFolderDialog extends Activity {
private static final int MAX_LENGTH = 24;
private int mCurrentScreen;
private int mPerCount;
private int style;
private long mContainer;
private String mTitle;
private int mID;
private int mPosition;
private EditText mFolderNameEditText;
private InputFilter mInputFilter;
static final String TAG = "NewFolderDialog";
public static final String STYLE = "style";
public static final String CONTAINER = "container";
public static final String PAGE = "page";
public static final String PERPAGECOUNT = "perpagecount";
public static final String TITLE = "title";
public static final String ID = "id";
public static final String POSITION = "position";
public static final int RENAME = 1;
public static final int NEW = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Intent intent = this.getIntent();
style = intent.getIntExtra(STYLE, NEW);
mContainer = intent
.getLongExtra(CONTAINER, Favorites.CONTAINER_DESKTOP);
if (style == NEW) {
mCurrentScreen = intent.getIntExtra(PAGE, 0);
mPerCount = intent.getIntExtra(PERPAGECOUNT, 0);
} else {
mTitle = intent.getStringExtra(TITLE);
mID = intent.getIntExtra(ID, -1);
mPosition = intent.getIntExtra(POSITION, -1);
}
requestWindowFeature(Window.FEATURE_NO_TITLE);
// setTitle(R.string.new_folder_title);
setContentView(R.layout.newfolderdialog);
getWindow().setBackgroundDrawableResource(R.drawable.dialog_folder_bg);
TextView tvTitle = (TextView) findViewById(R.id.folder_dialog_title);
mFolderNameEditText = (EditText) findViewById(R.id.folder_dialog_name);
mInputFilter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
// TODO Auto-generated method stub
try {
// int destLen = dest.toString().getBytes("GB18030").length;
// int sourceLen =
// source.toString().getBytes("GB18030").length;
int destLen = dest.toString().getBytes("UTF-8").length;
int sourceLen = source.toString().getBytes("UTF-8").length;
Log.d("inputfilter", String.valueOf(destLen + sourceLen));
if ((sourceLen + destLen) > MAX_LENGTH) {
Toast.makeText(getBaseContext(),
R.string.folder_name_is_full,
Toast.LENGTH_SHORT).show();
return "";
}
return source;
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "";
}
}
};
mFolderNameEditText.setFilters(new InputFilter[] { mInputFilter });
if (style != NEW) {
tvTitle.setText(R.string.rename_folder_title);
mFolderNameEditText.setText(mTitle);
}
((Button) findViewById(R.id.btnYes))
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int nStart = mCurrentScreen * mPerCount;
if (!mFolderNameEditText.getText().toString()
.equals("")) {
final ContentResolver cr = getContentResolver();
if (style == NEW) {
Intent createFolder = new Intent();
if (mContainer == Applications.CONTAINER_APPS) {
final Uri updateUri = Applications
.getCustomUri("/addfolder");
if (getResources().getBoolean(
R.bool.config_lock_apps)) {
final int lockappNum = getResources()
.getInteger(
R.integer.config_lock_apps_num);
nStart = nStart == 0 ? lockappNum
: nStart;
}
// update position from POSITION >= nStart
cr.update(updateUri, null, null,
new String[] { String
.valueOf(nStart) });
// insert new folder
ContentValues values = new ContentValues();
values.put(BaseLauncherColumns.TITLE,
mFolderNameEditText.getText()
.toString());
values.put(Applications.CONTAINER,
mContainer);
values.put(Applications.POSITION, nStart);
values.put(BaseLauncherColumns.ORDERID, 0);
values.put(BaseLauncherColumns.ITEM_TYPE,
Applications.APPS_TYPE_FOLDER);
Uri uri = cr.insert(
Applications.CONTENT_URI, values);
String folderId = uri.getPathSegments()
.get(1);
createFolder.putExtra(POSITION, nStart);
createFolder.putExtra(ID,
Integer.parseInt(folderId));
}
createFolder.putExtra(STYLE,
NewFolderDialog.NEW);
createFolder.putExtra(CONTAINER, mContainer);
createFolder.putExtra(TITLE,
mFolderNameEditText.getText()
.toString());
setResult(RESULT_OK, createFolder);
} else {
if (mContainer == Applications.CONTAINER_APPS) {
ContentValues values = new ContentValues();
values.put(BaseLauncherColumns.TITLE,
mFolderNameEditText.getText()
.toString());
cr.update(
Applications.CONTENT_URI,
values,
BaseColumns._ID + "=?",
new String[] { String.valueOf(mID) });
}
Intent renameFolder = new Intent();
renameFolder.putExtra(STYLE,
NewFolderDialog.RENAME);
renameFolder.putExtra(CONTAINER, mContainer);
renameFolder.putExtra(TITLE,
mFolderNameEditText.getText()
.toString());
if (mPosition != -1) {
renameFolder.putExtra(POSITION, mPosition);
}
setResult(RESULT_OK, renameFolder);
}
} else {
Toast.makeText(getBaseContext(),
R.string.folder_name_is_empty,
Toast.LENGTH_SHORT).show();
return;
}
Log.d(TAG, "set result RESULT_OK");
finish();
}
});
((Button) findViewById(R.id.btnNo))
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
setResult(RESULT_CANCELED, null);
finish();
}
});
// Delayed 100ms to display soft keyboard
mFolderNameEditText.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
InputMethodManager im = (InputMethodManager) mFolderNameEditText
.getContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
im.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}
}, 100);
}
}