package com.yuji.ef;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
-import android.content.res.Resources;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
-import android.graphics.Point;
-import android.graphics.Rect;
import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
-import android.view.animation.Animation;
-import android.view.animation.Animation.AnimationListener;
-import android.view.animation.AnimationUtils;
+import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import com.yuji.ef.common.CommonUtil;
+import com.yuji.ef.common.Constant;
+import com.yuji.ef.dao.DatabaseHelper;
import com.yuji.ef.dao.DirNode;
import com.yuji.ef.dao.FileNode;
+import com.yuji.ef.dao.LockDao;
import com.yuji.ef.dao.Node;
+import com.yuji.ef.dao.Node.Status;
+import com.yuji.ef.dao.NodeCacheDao;
+import com.yuji.ef.dao.NodeComparator;
import com.yuji.ef.dao.NodeDao;
+import com.yuji.ef.dao.NodeDaoImpl;
+import com.yuji.ef.dao.RootNode;
+import com.yuji.ef.exception.EfError;
+import com.yuji.ef.exception.EfException;
+import com.yuji.ef.pref.EditPrefUtil;
import com.yuji.ef.utility.BaseActivity;
+import com.yuji.ef.utility.BitmapCacheFactory;
+import com.yuji.ef.utility.EvernoteIntentUtil;
+import com.yuji.ef.utility.FolderUtil;
+import com.yuji.ef.utility.LockHandler;
+import com.yuji.ef.utility.LockListener;
+import com.yuji.ef.utility.ScaleUtil;
+
+public class EverFolderActivity extends BaseActivity implements LockListener {
+ private enum ScreenStatus {
+ Normal, AddNode, DeleteNode, RenameNode
+ };
+
+ private EditPrefUtil pref = new EditPrefUtil(this);
+
+ private LinearLayout msgLayout;
+ private LinearLayout msgButtonLayout;
+ private Button msgOkButton;
+ private Button msgCancelButton;
+ private EditText msgEditText;
-public class EverFolderActivity extends BaseActivity /*
- * implements OnTouchListener,
- * OnLongClickListener
- */{
private IconFrameLayout layout;
+ private TextView confirmMsg;
private IconScrollView scrollView;
+ private LinearLayout buttonLayout;
private Button leftButton;
private Button rightButton;
- private IconImageView target = null;
- private IconImageView dest = null;
-
+ private ScreenStatus status;
+ private NodeComparator nodeComparator = new NodeComparator();
+ private BitmapCacheFactory bitmapFactory = BitmapCacheFactory.getInstance();
private Node top = null;
private int indent = 0;
-
- private Animation anime;
- private int startX;
- private int startY;
- private int currentX;
- private int currentY;
- private int offsetX;
- private int offsetY;
- private boolean longClickFlg = false;
+ private int bmpPaddingLeft;
+ private int bmpWidth;
+ private int viewY;
+ private boolean lock = false;
+ private boolean isInit = true;
+ private boolean isInCycle = false;
+ private boolean isResult = false;
+ private LockHandler lockHandler = null;
+
+ private BroadcastReceiver receiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+
+ if (action.equals(Constant.ACTION_MESSAGE)) {
+ String msg = intent
+ .getStringExtra(Constant.ACTION_MESSAGE_MESSAGE);
+ EfException.msg(EverFolderActivity.this, msg);
+ } else if (action.equals(Constant.ACTION_UPDATE)) {
+ if (isInCycle && !lock) {
+ LockDao lockDao = (LockDao) LockDao.getInstance();
+ lock = lockDao.lock(EverFolderActivity.this,
+ Constant.LOCK_UPDATE_NOTE);
+ if (lock) {
+ updateList();
+ // ほんとは、setStatus()に入れたい
+ layout.setVisibility(View.VISIBLE);
+ }
+ setStatus();
+ }
+ }
+ }
+ };
@Override
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.main);
try {
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(Constant.ACTION_UPDATE);
+ intentFilter.addAction(Constant.ACTION_MESSAGE);
+ registerReceiver(receiver, intentFilter);
+
scrollView = (IconScrollView) findViewById(R.id.scrollView);
layout = (IconFrameLayout) findViewById(R.id.frameLayout);
layout.setActivity(this);
layout.setScrollView(scrollView);
- // layout.setClickable(false);
- // layout = new FrameLayout(this);
- // setContentView(layout);
+ buttonLayout = (LinearLayout) findViewById(R.id.mainButtonLayout);
leftButton = (Button) findViewById(R.id.leftButton);
rightButton = (Button) findViewById(R.id.rightButton);
+ msgLayout = (LinearLayout) findViewById(R.id.mainMsgLayout);
+ confirmMsg = (TextView) findViewById(R.id.mainConfirmMsg);
+ msgEditText = (EditText) findViewById(R.id.mainMsgEditText);
+ msgButtonLayout = (LinearLayout) findViewById(R.id.mainMsgButtonLayout);
+ msgOkButton = (Button) findViewById(R.id.mainMsgOkButton);
+ msgCancelButton = (Button) findViewById(R.id.mainMsgCancelButton);
+
leftButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
- Resources r = getResources();
- Bitmap bmp1 = BitmapFactory.decodeResource(r, R.drawable.android);
- Bitmap bmp2 = BitmapFactory.decodeResource(r, R.drawable.test2);
+ msgEditText.addTextChangedListener(new TextWatcher() {
+ public void afterTextChanged(Editable s) {
+ if (status != ScreenStatus.DeleteNode) {
+ String text = s.toString();
+ msgOkButton.setEnabled(text.length() > 0);
+ } else {
+ msgOkButton.setEnabled(true);
+ }
+ }
+
+ public void beforeTextChanged(CharSequence s, int start,
+ int count, int after) {
- anime = AnimationUtils.loadAnimation(this, R.anim.sample);
- anime.setAnimationListener(new AnimationListener() {
- public void onAnimationStart(Animation animation) {
}
- public void onAnimationRepeat(Animation animation) {
+ public void onTextChanged(CharSequence s, int start,
+ int before, int count) {
+
}
+ });
- public void onAnimationEnd(Animation animation) {
- // if (isBt2Click) {
- // bt2.performClick();
- // isBt2Click = false;
- // }
- target = null;
- dest = null;
+ msgOkButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ msgOkButtonOnClick(v);
+ }
+ });
+ msgCancelButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ msgCancelOnClick(v);
}
});
- // target = (ImageView) findViewById(R.id.ImageView01);
- // target.setImageBitmap(bmp);
- // this.target.setOnTouchListener(this);
-
- // int x;
- // int y;
- // int N = 200;
- //
- // x = 100;
- // y = 0;
- // for (int i = 0; i < 4; i++) {
- // Bitmap bmp = (i % 2 == 0) ? bmp1 : bmp2;
- // //createIconImageView(bmp, x, y);
- // createIconImageView(bmp, "TEXT" + i, x, y);
- // y += N;
- // }
- //
- // layout.setMinimumHeight(y * 2 + N);
-
- // TODO
-// top = new DirNode(null, null);
-// top.setStatus(Node.Status.OPEN);
-//
-// Node node;
-// node = new DirNode("ディレクトリ", null);
-// top.add(node);
-// node.add(new FileNode("ファイルaaa", null));
-// node.add(new FileNode("ファイルbb", null));
-// node.add(new FileNode("ファイルc", null));
-//
-// node = new DirNode("ディレクトリAAA", null);
-// top.add(node);
-// node.add(new DirNode("directory qqqq", null));
-// node.add(new FileNode("ファイルdddddddd", null));
-// node.add(new FileNode("ファイルeee", null));
-//
-// node = new FileNode("ファイルzzz", null);
-// top.add(node);
-
- NodeDao dao = (NodeDao) NodeDao.getInstance();
- List<Node> tmp = dao.search();
- System.out.println(tmp.toString());
- top = dao.searchRoot();
- if (top == null){
- // TODO
- }
-
- updateList(top);
+ ScaleUtil scaleUtil = ScaleUtil.getInstance();
+ scaleUtil.init(this);
+
+ bitmapFactory.init(this);
+ Node node = new DirNode(null, null);
+ Bitmap bmp = null;
+ bmp = bitmapFactory.get(node.getStatusIconId());
+ bmpPaddingLeft = bmp.getWidth();
+ bmp = bitmapFactory.get(node.getIconId());
+ bmpWidth = bmp.getWidth();
+
+ float fSize = 48 * (1 / 2.0f);
+ leftButton.setTextSize(fSize);
+ rightButton.setTextSize(fSize);
+ } catch (Exception e) {
+ EfException.msg(R.string.ErrorSystem, e);
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ boolean ret = super.onCreateOptionsMenu(menu);
+ int index = 0;
+
+ menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE,
+ getString(R.string.MenuCut));
+ menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE,
+ getString(R.string.MenuPaste));
+ menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE,
+ getString(R.string.MenuAdd));
+ menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE,
+ getString(R.string.MenuDelete));
+ menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE,
+ getString(R.string.MenuRename));
+ menu.add(Menu.NONE, Menu.FIRST + index++, Menu.NONE,
+ getString(R.string.MenuSetting));
+ return ret;
+ }
+
+ @Override
+ public boolean onMenuOpened(int featureId, Menu menu) {
+ boolean ret = super.onMenuOpened(featureId, menu);
+
+ // #29304
+ if (menu == null) {
+ return false;
+ }
+
+ MenuItem item;
+
+ boolean cutButtonFlag = false;
+ boolean pastButtonFlag = false;
+ boolean addButtonFlag = false;
+ boolean deleteButtonFlag = false;
+ boolean renameButtonFlag = false;
+ boolean confButtonFlag = true;
+
+ if (status == ScreenStatus.Normal) {
+ LabelIconView target = layout.getSelectedTarget();
+ NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+ long id = -1;
+ Node node = null;
+ if (target != null) {
+ id = target.getNodeId();
+ node = dao.searchById(id);
+ }
+
+ if (isDirNode(target, node, false) || isFileNode(node)) {
+ cutButtonFlag = true;
+ }
+ if (isDirNode(target, node, true) && isCut()) {
+ pastButtonFlag = true;
+ }
+ if (isDirNode(target, node, true)) {
+ addButtonFlag = true;
+ }
+ if (isDirNode(target, node, false) && !isNoteBook(node)
+ && CommonUtil.isNull(node.getChildrenString())) {
+ deleteButtonFlag = true;
+ }
+ if (isDirNode(target, node, false) && !isNoteBook(node)) {
+ renameButtonFlag = true;
+ }
+ }
+
+ int index = 0;
+ item = menu.getItem(index++);
+ item.setVisible(cutButtonFlag);
+ item = menu.getItem(index++);
+ item.setVisible(pastButtonFlag);
+ item = menu.getItem(index++);
+ item.setVisible(addButtonFlag);
+ item = menu.getItem(index++);
+ item.setVisible(deleteButtonFlag);
+ item = menu.getItem(index++);
+ item.setVisible(renameButtonFlag);
+ item = menu.getItem(index++);
+ item.setVisible(confButtonFlag);
+
+ return ret;
+ }
+
+ private boolean isFileNode(Node node) {
+ if (node == null || !(node instanceof FileNode)) {
+ return false;
+ }
+ return true;
+ }
+
+ private boolean isDirNode(LabelIconView target, Node node,
+ boolean containRoot) {
+ if (target == null) {
+ return false;
+ }
+ if (node == null) {
+ return false;
+ }
+ if (!containRoot && (node instanceof RootNode)) {
+ return false;
+ }
+ if (!(node instanceof DirNode)) {
+ return false;
+ }
+ return true;
+ }
+
+ private boolean isNoteBook(Node node) {
+ if (node == null) {
+ return false;
+ }
+ if (CommonUtil.isNull(node.getGuid())) {
+ return false;
+ }
+ return true;
+ }
+
+ private boolean isCut() {
+ LabelIconView srcTarget = layout.getCutTarget();
+ if (srcTarget == null) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ Intent intent;
+ try {
+ switch (item.getItemId()) {
+ case Menu.FIRST + 0:
+ selectMenuCut();
+ break;
+ case Menu.FIRST + 1:
+ selectMenuPast();
+ break;
+ case Menu.FIRST + 2:
+ selectMenuAdd();
+ break;
+ case Menu.FIRST + 3:
+ selectMenuDelete();
+ break;
+ case Menu.FIRST + 4:
+ selectMenuRename();
+ break;
+ case Menu.FIRST + 5:
+ // dummy();
+ // dummy2();
+ intent = new Intent(this, (Class<?>) SettingActivity.class);
+ startActivityForResult(intent, 0);
+ break;
+ default:
+ break;
+ }
+ } catch (Exception e) {
+ terminate(e);
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ private void dummy() {
+ NodeDaoImpl dao = (NodeDaoImpl) NodeCacheDao.getInstance();
+ List<Node> list = dao.search();
+ for (Node node : list) {
+ System.out.println(node.toString());
+ }
+ }
+
+ private void dummy2() {
+ LockDao dao = (LockDao) LockDao.getInstance();
+ boolean b;
+
+ try {
+ b = dao.lock(this, "key");
+ b = dao.lock(this, "key");
+ b = dao.lock(new Object(), "key");
+ dao.unlock(this, "key");
+ b = dao.lock(new Object(), "key");
+ b = dao.lock(this, "key");
+ b = dao.lock(this, "key");
+ b = dao.lock(this, "key");
+ dao.unlock(new Object(), "key");
+
} catch (Exception e) {
- // TODO
e.printStackTrace();
}
+
}
- private int viewY;
+ private void selectMenuAdd() {
+ setStatus(ScreenStatus.AddNode);
+ }
+
+ private void selectMenuDelete() {
+ setStatus(ScreenStatus.DeleteNode);
+ }
+
+ private void selectMenuRename() {
+ LabelIconView target = layout.getSelectedTarget();
+ if (target == null) {
+ return;
+ }
+
+ long id = target.getNodeId();
+ NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+ Node node = dao.searchById(id);
+ if (node != null) {
+ String text = node.getName();
+ msgEditText.setText(text);
+ setStatus(ScreenStatus.RenameNode);
+ }
+ }
+
+ private void selectMenuCut() {
+ LabelIconView target = layout.getSelectedTarget();
+ if (target == null) {
+ return;
+ }
+
+ layout.setCutTarget(target);
+ layout.refresh();
+ }
+
+ private void selectMenuPast() {
+ LabelIconView srcTarget = layout.getCutTarget();
+ if (srcTarget == null) {
+ return;
+ }
+
+ LabelIconView dstTarget = layout.getSelectedTarget();
+ if (dstTarget == null) {
+ return;
+ }
+
+ layout.setCutTarget(null);
+
+ long srcId = srcTarget.getNodeId();
+ long dstId = dstTarget.getNodeId();
+ execute(srcId, dstId);
+ }
+
+ private void updateList() {
+ NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+ top = dao.searchRoot();
+ if (top == null) {
+ // データ0件(データ未更新)
+ return;
+ }
+ updateList(top);
+ }
private void updateList(Node parent) {
- viewY = 30;
+ viewY = 10;
- // List<Node> list = parent.getChildren();
- // for (Node node : list){
- // updateList(node, x);
- // }
+ scrollView.setVisibility(View.GONE);
+ layout.removeAllViews();
updateList(parent, 0);
layout.setMinimumHeight(viewY);
- layout.invalidate();
+ scrollView.setVisibility(View.VISIBLE);
+ layout.refresh();
+
+ scrollView.invalidate();
}
private void updateList(Node node, int depth) {
- int N = 100;
- int M = 120;
- int x = N * (depth - indent) + 50;
+ int N = (int) (bmpWidth * 0.6);
+ int M = (int) (bmpWidth * 1.2);
+ int x = N * (depth - indent);
if (depth - indent >= 0
&& !(depth - indent == 0 && node instanceof FileNode)) {
LabelIconView view = new LabelIconView(this);
node.setView(view);
- Resources r = getResources();
Bitmap bmp1 = null;
int id = node.getStatusIconId();
if (id >= 0) {
- bmp1 = BitmapFactory.decodeResource(r, node.getStatusIconId());
+ // DirNode
+ bmp1 = bitmapFactory.get(node.getStatusIconId());
+ } else {
+ // FileNode
+ x += bmpPaddingLeft;
}
- Bitmap bmp2 = BitmapFactory.decodeResource(r, node.getIconId());
+ Bitmap bmp2 = bitmapFactory.get(node.getIconId());
createIconImageView(view, bmp1, bmp2, node.getName(), x, viewY);
- LabelIconView s = view.getStatusImageView();
- if (s != null) {
- s.setNode(node);
- }
+ // LabelIconView s = view.getStatusImageView();
+ // if (s != null) {
+ // s.setNodeId(node.getId());
+ // }
+ view.setNodeId(node.getId());
}
viewY += M;
if (node.getStatus() != Node.Status.OPEN) {
return;
}
- List<Long> list = node.getChildren();
- if (list == null) {
+ List<Long> idList = node.getChildren();
+ if (idList == null) {
return;
}
-
- NodeDao dao = (NodeDao) NodeDao.getInstance();
- for (Long id : list) {
+
+ List<Node> list = new ArrayList<Node>();
+ NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+ for (Long id : idList) {
Node n = dao.searchById(id);
+ if (n == null) {
+ // ERROR
+ continue;
+ }
+ if (n instanceof DirNode) {
+ DirNode d = (DirNode) n;
+ if (isNoteBook(d) && !d.isSelected()) {
+ continue;
+ }
+ }
+ list.add(n);
+ }
+ Collections.sort(list, nodeComparator);
+ for (Node n : list) {
updateList(n, depth + 1);
}
}
layout.addView(v);
v.layout(x, y, x + v.getWidth(), y + v.getHeight());
+ }
+
+ @Override
+ public void sendLockResult(boolean b) {
+ lock = b;
+ NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+ pref.put(Constant.PREF_UPDATE_DATA, Constant.OFF);
+ pref.update();
- LabelIconView siv = v.getStatusImageView();
- if (siv != null) {
- createIconImageView(siv, null, bmp1, null, x - 50, y);
+ if (isResult) {
+ if (dao.isEmpty()) {
+ finish();
+ return;
+ }
+ }
+ isResult = false;
+
+ if (dao.isEmpty()) {
+ if (isInit) {
+ Intent intent = new Intent(this,
+ (Class<?>) SettingActivity.class);
+ startActivityForResult(intent, 0);
+
+ isInit = false;
+ } else {
+ finish();
+ isInit = true;
+ }
+ }
+
+ if (isInCycle) {
+ if (isInit) {
+ status = ScreenStatus.Normal;
+
+ if (lock) {
+ layout.setVisibility(View.VISIBLE);
+ updateList();
+ } else {
+ layout.removeAllViews();
+ }
+ setStatus();
+ isInit = false;
+ } else {
+ if (lock) {
+ layout.setVisibility(View.VISIBLE);
+ updateList();
+ }
+ setStatus();
+ }
+ } else {
+ LockDao lockDao = (LockDao) LockDao.getInstance();
+ lockDao.unlock(EverFolderActivity.this, Constant.LOCK_UPDATE_NOTE);
+ lock = false;
}
}
@Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ isResult = true;
+ isInit = true;
+ }
+
+ @Override
protected void onStart() {
super.onStart();
}
- public void onClickShowButton(View v) {
- // int size = layout.getChildCount();
- // for (int i = 0; i < size; i++){
- // View vv = layout.getChildAt(i);
- // vv.setVisibility(View.VISIBLE);
- // }
- if (target == null) {
- return;
+ @Override
+ protected void onResume() {
+ super.onResume();
+ isInCycle = true;
+
+ // #29573
+ // 「強制的のロックを削除するためのフラグ」をOFFに
+ // →起動時の初回のみ削除を試みるため
+ boolean isUnlock = pref.getInt(Constant.PREF_DELETE_LOCK)== Constant.ON;
+ if (isUnlock){
+ pref.put(Constant.PREF_DELETE_LOCK, Constant.OFF);
+ pref.update();
}
+
+ lockHandler = new LockHandler();
+ lockHandler.lock(this, Constant.LOCK_UPDATE_NOTE, true, isUnlock);
+ lock = false;
- Rect rect = new Rect();
- Point globalOffset = new Point();
- target.getGlobalVisibleRect(rect, globalOffset);
- // currentX = startX;
- // currentY = startY;
- currentX = 50;
- currentY = 50;
- target.layout(currentX, currentY, currentX + target.getWidth(),
- currentY + target.getHeight());
-
- // TODO
- target.setAlpha(64);
- // layout.removeView(target);
- // layout.addView(target);
- target.setSelected(true);
- IconImageView iv = (IconImageView) target;
- iv.init(currentX, currentY);
-
- target = null;
+ if (isInit) {
+ layout.setVisibility(View.INVISIBLE);
+ setStatus();
+ } else {
+ // #29589
+ //// #29421
+ //updateList();
+ layout.setVisibility(View.INVISIBLE);
+ setStatus();
+ }
}
- public void onClickButton02(View v) {
- // TODO
- // Toast.makeText(this, "click", Toast.LENGTH_SHORT).show();
- // Intent intent = new Intent(DDSampleActivity.this, Next.class);
- // startActivity(intent);
+ @Override
+ protected void onPause() {
+ // ロック未取得でも解除する(ゴミ掃除)
+ LockDao lockDao = (LockDao) LockDao.getInstance();
+ lockDao.unlock(this, Constant.LOCK_UPDATE_NOTE);
+ lock = false;
+
+ if (lockHandler != null){
+ lockHandler.cancel();
+ lockHandler = null;
+ }
+
+ super.onPause();
+ isInCycle = false;
}
private void leftButtonOnClick() {
moveButtonOnClick(-1);
+ setStatus();
}
private void rightButtonOnClick() {
- moveButtonOnClick(1);
+ moveButtonOnClick(1);
+ setStatus();
}
private void moveButtonOnClick(int dx) {
if (mx != 0) {
indent += mx;
removeAllNodeView();
- updateList(top);
+ updateList();
}
}
- public void execute(Node src, Node dst) {
- removeAllNodeView();
+ private void msgOkButtonOnClick(View v) {
+ FolderUtil util = FolderUtil.getInstance();
+ LabelIconView target = layout.getSelectedTarget();
+ NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+ if (status == ScreenStatus.AddNode) {
+ long id = target.getNodeId();
+ Node parent = dao.searchById(id);
+ if (parent != null) {
+ String text = msgEditText.getText().toString();
+ DirNode node = new DirNode(text, null);
+ util.addDirNode(parent, node);
+ }
+ layout.setCutTarget(null, false);
+ } else if (status == ScreenStatus.DeleteNode) {
+ long id = target.getNodeId();
+ Node node = dao.searchById(id);
+ if (node != null) {
+ util.deleteNode(node);
+ layout.removeView(target);
+ }
+ layout.setCutTarget(null, false);
+ } else if (status == ScreenStatus.RenameNode) {
+ long id = target.getNodeId();
+ Node node = dao.searchById(id);
+ if (node != null) {
+ String text = msgEditText.getText().toString();
+
+ dao.updateName(node, text);
+ }
+ layout.setCutTarget(null, false);
+ }
+
+ closeIME(v);
+
+ layout.clearTarget();
+ updateList();
+ setStatus(ScreenStatus.Normal);
+ }
+
+ private void msgCancelOnClick(View v) {
+ closeIME(v);
+
+ setStatus(ScreenStatus.Normal);
+ }
+
+ private void closeIME(View v) {
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
+ }
+
+ public void execute(long srcId, long dstId) {
+ try {
+ removeAllNodeView();
+
+ NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+ if (srcId < 0) {
+ throw new EfException(EfError.NOT_FOUND);
+ }
+ if (dstId < 0) {
+ throw new EfException(EfError.NOT_FOUND);
+ }
- // TODO
-// if (dst instanceof DirNode) {
-// src.getParent().remove(src);
-// dst.add(src);
-// } else if (dst instanceof FileNode) {
-// src.getParent().remove(src);
-// dst.getParent().add(src);
-// }
- NodeDao dao = (NodeDao) NodeDao.getInstance();
- Node sp = dao.searchById(src.getParent());
- if (sp == null){
- // TODO
+ Node src = dao.searchById(srcId);
+ Node dst = null;
+ if (srcId == dstId) {
+ dst = src;
+ } else {
+ dst = dao.searchById(dstId);
+ }
+
+ if (dstId == src.getParent()) {
+ // 同じ場所に移動
+ return;
+ }
+ if (!isFileNode(src) && !isMovable(srcId, dstId)) {
+ // 再帰的な移動
+ return;
+ }
+
+ Node sp = dao.searchById(src.getParent());
+ if (sp == null) {
+ throw new EfException(EfError.NOT_FOUND);
+ }
+ Node dp = null;
+ if (src.getParent() == dst.getParent() || dst.getParent() < 0) {
+ dp = sp;
+ } else {
+ dp = dao.searchById(dst.getParent());
+ }
+ if (dp == null) {
+ throw new EfException(EfError.NOT_FOUND);
+ }
+
+ SQLiteDatabase db = DatabaseHelper.getInstance()
+ .getSQLiteDatabase();
+ db.beginTransaction();
+ try {
+ dao.removeChildrenIdNT(sp, src.getId());
+ if (dst instanceof DirNode) {
+ dao.updateParentNT(src, dst.getId());
+ dao.addChildrenIdNT(dst, src.getId());
+ } else if (dst instanceof FileNode) {
+ dao.updateParentNT(src, dp.getId());
+ dao.addChildrenIdNT(dp, src.getId());
+ }
+
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ }
+ } catch (EfException e) {
+ EfException.msg(R.string.ErrorSystem, e);
+ } finally {
+ updateList();
}
- Node dp = dao.searchById(dst.getParent());
- if (dp == null){
- // TODO
+ }
+
+ private boolean isMovable(long srcId, long dstId) {
+ NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+ while (dstId >= 0) {
+ if (srcId == dstId) {
+ return false;
+ }
+ Node node = dao.searchById(dstId);
+ if (node == null) {
+ // ERROR
+ return false;
+ }
+ if (!(node instanceof DirNode)) {
+ return true;
+ }
+ dstId = node.getParent();
}
-
- // TODO DBへのアクセス
- if (dst instanceof DirNode) {
- sp.remove(src.getId());
- dst.add(src.getId());
- } else if (dst instanceof FileNode) {
- sp.remove(src.getId());
- dp.add(src.getId());
+ return true;
+ }
+
+ public void execute(long id) {
+ try {
+ NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+ Node node = dao.searchById(id);
+ if (node == null) {
+ throw new EfException(EfError.NOT_FOUND);
+ }
+ node.toggleStatus();
+ Status status = node.getStatus();
+
+ dao.updateStatus(node, status);
+
+ updateList();
+ } catch (EfException e) {
+ EfException.msg(R.string.ErrorSystem, e);
}
+ }
- updateList(top);
+ public void executeView(long id) {
+ NodeDao dao = (NodeDao) NodeCacheDao.getInstance();
+
+ Node node = dao.searchById(id);
+ if (!isFileNode(node)) {
+ return;
+ }
+ String guid = node.getGuid();
+
+ EvernoteIntentUtil util = EvernoteIntentUtil.getInstance();
+ util.viewNote(this, guid);
}
- public void execute(Node node) {
- removeAllNodeView();
- updateList(top);
+ public void targetSelectedChanged(boolean status) {
+ setStatus();
}
public void removeAllNodeView() {
layout.removeAllViews();
}
- // @Override
- // public boolean onTouch(View v, MotionEvent event) {
- // int x = (int) event.getRawX();
- // int y = (int) event.getRawY();
- //
- // // FOO
- // if (!(v instanceof IconImageView)) {
- // return true;
- // }
- // IconImageView obj = (IconImageView) v;
- //
- // if (target == null) {
- // target = obj;
- //
- // // scrollView.setOnTouchListener(new OnTouchListener() {
- // // @Override
- // // public boolean onTouch(View v, MotionEvent event) {
- // // return true;
- // // }
- // // });
- // } else if (target != obj) {
- // return true;
- // }
- // if (event.getAction() == MotionEvent.ACTION_MOVE) {
- // if (!longClickFlg) {
- // return false;
- // }
- // int diffX = offsetX - x;
- // int diffY = offsetY - y;
- //
- // currentX -= diffX;
- // currentY -= diffY;
- // // currentX = x;;
- // // currentY = y;
- // obj.layout(currentX, currentY, currentX + obj.getWidth(), currentY
- // + obj.getHeight());
- //
- // offsetX = x;
- // offsetY = y;
- //
- // if (dest == null) {
- // Rect rect = new Rect();
- // int size = layout.getChildCount();
- // for (int i = 0; i < size; i++) {
- // IconImageView vv = (IconImageView) layout.getChildAt(i);
- // vv.getHitRect(rect);
- // if (rect.contains(x - layout.getLeft(),
- // y - layout.getLeft())) {
- // dest = vv;
- // dest.setAlpha(32);
- // break;
- // }
- // }
- // } else {
- // Rect rect = new Rect();
- //
- // dest.getHitRect(rect);
- // if (!rect.contains(x - layout.getLeft(), y - layout.getLeft())) {
- // dest.setAlpha(255);
- // dest = null;
- // }
- // }
- // } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
- // offsetX = x;
- // offsetY = y;
- // // TODO
- // currentX = obj.getLeft();
- // currentY = obj.getTop();
- //
- // target.setColorFilter(Color.RED, Mode.LIGHTEN);
- //
- // scrollView.setScrollable(false);
- // return false;
- // } else if (event.getAction() == MotionEvent.ACTION_UP) {
- // if (!longClickFlg) {
- // return false;
- // }
- // obj.setAnimation(anime);
- // obj.startAnimation(anime);
- // // obj.setVisibility(View.GONE);
- // if (dest == null) {
- // // 消す場合
- // // layout.removeView(obj);
- //
- // // キャンセル
- // int srcX = target.getInitX();
- // int srcY = target.getInitY();
- // target.layout(srcX, srcY, srcX + target.getWidth(), srcY
- // + target.getHeight());
- // target.setAlpha(255);
- // } else {
- // int srcX = target.getInitX();
- // int srcY = target.getInitY();
- // int dstX = dest.getInitX();
- // int dstY = dest.getInitY();
- //
- // target.layout(dstX, dstY, dstX + target.getWidth(), dstY
- // + target.getHeight());
- // target.init(dstX, dstY);
- // target.setAlpha(255);
- // dest.layout(srcX, srcY, srcX + dest.getWidth(),
- // srcY + dest.getHeight());
- // dest.init(srcX, srcY);
- // dest.setAlpha(255);
- // }
- //
- // // bt2.getHitRect(rect);
- // // if (rect.contains(x, y)) {
- // // isBt2Click = true;
- // // }
- // longClickFlg = false;
- // }
- //
- // return true;
- // }
- //
- // @Override
- // public boolean onLongClick(View view) {
- // if (!(view instanceof IconImageView)) {
- // return true;
- // }
- // IconImageView v = (IconImageView) view;
- // v.setAlpha(128);
- // v.clearColorFilter();
- //
- // longClickFlg = true;
- // return true;
- // }
+ private void setStatus() {
+ setStatus(status);
+ }
+
+ private void setStatus(ScreenStatus status) {
+ try {
+ if (this.status != status) {
+ this.status = status;
+ }
+
+ if (!lock) {
+ int update = pref.getInt(Constant.PREF_UPDATE_DATA);
+
+ if (update == Constant.ON) {
+ msgLayout.setVisibility(View.VISIBLE);
+ confirmMsg.setText(getString(R.string.mainUpdateMsg));
+ } else {
+ msgLayout.setVisibility(View.GONE);
+ }
+ msgEditText.setVisibility(View.GONE);
+ msgButtonLayout.setVisibility(View.GONE);
+
+ leftButton.setEnabled(false);
+ rightButton.setEnabled(false);
+
+ status = ScreenStatus.Normal;
+ return;
+ }
+
+ if (status == ScreenStatus.Normal) {
+ msgLayout.setVisibility(View.GONE);
+
+ boolean leftButtonFlag = true;
+ boolean rightButtonFlag = true;
+
+ if (indent <= 0) {
+ leftButtonFlag = false;
+ }
+
+ layout.setElabledTouchEvent(true);
+
+ leftButton.setEnabled(leftButtonFlag);
+ rightButton.setEnabled(rightButtonFlag);
+ } else if (status == ScreenStatus.AddNode) {
+ msgLayout.setVisibility(View.VISIBLE);
+ msgEditText.setVisibility(View.VISIBLE);
+ msgButtonLayout.setVisibility(View.VISIBLE);
+ confirmMsg.setText(getString(R.string.mainAddMsg));
+ msgEditText.setText("");
+
+ layout.setElabledTouchEvent(false);
+
+ leftButton.setEnabled(false);
+ rightButton.setEnabled(false);
+ } else if (status == ScreenStatus.DeleteNode) {
+ msgLayout.setVisibility(View.VISIBLE);
+ msgEditText.setVisibility(View.GONE);
+ msgButtonLayout.setVisibility(View.VISIBLE);
+ confirmMsg.setText(getString(R.string.mainDeleteMsg));
+
+ layout.setElabledTouchEvent(false);
+
+ leftButton.setEnabled(false);
+ rightButton.setEnabled(false);
+ } else if (status == ScreenStatus.RenameNode) {
+ msgLayout.setVisibility(View.VISIBLE);
+ msgEditText.setVisibility(View.VISIBLE);
+ msgButtonLayout.setVisibility(View.VISIBLE);
+ confirmMsg.setText(getString(R.string.mainRenameMsg));
+
+ layout.setElabledTouchEvent(false);
+
+ leftButton.setEnabled(false);
+ rightButton.setEnabled(false);
+ }
+ } catch (Exception e) {
+ EfException.msg(R.string.ErrorSystem, e);
+ }
+ }
+
}
\ No newline at end of file