diff --git a/app/AndroidManifest.xml b/app/AndroidManifest.xml index 4359f42..73e36bb 100644 --- a/app/AndroidManifest.xml +++ b/app/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionName="20220526" + android:versionCode="20220526"> diff --git a/app/res/drawable/ic_audio.png b/app/res/drawable/ic_audio.png new file mode 100644 index 0000000..f72c92f Binary files /dev/null and b/app/res/drawable/ic_audio.png differ diff --git a/app/res/drawable/ic_audiotrack_grey600_24dp.png b/app/res/drawable/ica.png similarity index 100% rename from app/res/drawable/ic_audiotrack_grey600_24dp.png rename to app/res/drawable/ica.png diff --git a/app/res/layout/act_texteditor.xml b/app/res/layout/act_texteditor.xml index e14355f..b4f207d 100644 --- a/app/res/layout/act_texteditor.xml +++ b/app/res/layout/act_texteditor.xml @@ -16,11 +16,14 @@ android:gravity="center_vertical"> @@ -37,26 +40,31 @@ android:layout_height="match_parent"> - - + android:layout_marginLeft="5dp" + android:layout_marginRight="5dp" + android:textSize="14sp" + android:visibility="visible" + android:enabled="false"/> + + + + + diff --git a/app/res/layout/adapteritem_fileitem.xml b/app/res/layout/adapteritem_fileitem.xml index 09ad67e..9a26483 100644 --- a/app/res/layout/adapteritem_fileitem.xml +++ b/app/res/layout/adapteritem_fileitem.xml @@ -6,6 +6,7 @@ android:layout_height="wrap_content"> - - - + + + + + android:scaleType="fitXY" + android:src="@drawable/ic_close"/> diff --git a/app/res/layout/emptyfolder.xml b/app/res/layout/emptyfolder.xml new file mode 100644 index 0000000..63785a2 --- /dev/null +++ b/app/res/layout/emptyfolder.xml @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/app/res/layout/text_view.xml b/app/res/layout/text_view.xml index 8f37046..8293db7 100644 --- a/app/res/layout/text_view.xml +++ b/app/res/layout/text_view.xml @@ -10,7 +10,6 @@ android:layout_marginBottom="5dp" android:textSize="16sp" android:textColor="#000000" - android:background="#ffffff" android:text="" android:padding="10dp"/> diff --git a/app/res/values/colors.xml b/app/res/values/colors.xml index 94ffcaf..225485a 100644 --- a/app/res/values/colors.xml +++ b/app/res/values/colors.xml @@ -11,6 +11,6 @@ #dcdcdc #000000 - #ffffff + #00748E diff --git a/app/src/sleepchild/fimi/FIMI.java b/app/src/sleepchild/fimi/FIMI.java index ae0aa6f..b25801d 100644 --- a/app/src/sleepchild/fimi/FIMI.java +++ b/app/src/sleepchild/fimi/FIMI.java @@ -5,7 +5,6 @@ import android.content.*; import android.graphics.*; import android.os.*; -import sleepchild.fimi.io.*; public class FIMI { @@ -87,7 +86,7 @@ private static Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) { public static int getIcon(MFile file){ if(isAudio(file)){ - return R.drawable.ic_audiotrack_grey600_24dp; + return R.drawable.ic_audio; }else if(isImage(file)){ return R.drawable.ic_image_grey600_24dp; }else if(isVideo(file)){ @@ -160,7 +159,6 @@ public static void copyFile(String frompath, String topath){ FileInputStream in = null; FileOutputStream out = null; new File(topath).getParentFile().mkdirs(); - Buffer buffer = new Buffer(); try { diff --git a/app/src/sleepchild/fimi/FileUtils.java b/app/src/sleepchild/fimi/FileUtils.java deleted file mode 100644 index 0bfb15b..0000000 --- a/app/src/sleepchild/fimi/FileUtils.java +++ /dev/null @@ -1,10 +0,0 @@ -package sleepchild.fimi; -import java.io.*; - -public class FileUtils -{ - - public static void getExt(File fl){ - // - } -} diff --git a/app/src/sleepchild/fimi/TabSpooler.java b/app/src/sleepchild/fimi/TabSpooler.java index 51c87b2..89355c9 100644 --- a/app/src/sleepchild/fimi/TabSpooler.java +++ b/app/src/sleepchild/fimi/TabSpooler.java @@ -25,7 +25,6 @@ private TabSpooler(){ private enum K{ ID, LAST_PATH, - BACKSTACK, LAST_SHOWN_TAB, } @@ -59,15 +58,6 @@ public synchronized void saveTab(Tab tab){ o.put(k(K.ID), tab.getId()); o.put(k(K.LAST_PATH), tab.getDir().getAbsolutePath()); - if(!tab.getBackHistory().isEmpty()){ - JSONArray bs = new JSONArray(); - for(String s : tab.getBackHistory()){ - bs.put(s); - } - o.put(k(K.BACKSTACK),bs); - - } - _write(fname, o.toString().getBytes()); }catch (JSONException e){} @@ -98,7 +88,6 @@ public List getPreviousTabs(TabManager tmgr){ } - ///////////// private Tab fileToTab(TabManager tmgr ,File fl){ @@ -112,25 +101,6 @@ private Tab fileToTab(TabManager tmgr ,File fl){ String path = o.getString(k(K.LAST_PATH)); long id = o.getLong(k(K.ID)); - - if(o.has(k(K.BACKSTACK))){ - List bs = new ArrayList<>(); - JSONArray ar = o.getJSONArray(k(K.BACKSTACK)); - if(ar!=null){ - int l = ar.length(); - for(int i = 0;i pendingTasksQueue = new ArrayList<>(); //List completedTaskQueue = new ArrayList<>(); - public TaskMang(){ + public TaskManager(){ worker = Executors.newFixedThreadPool(3); // } diff --git a/app/src/sleepchild/fimi/ThemeManager.java b/app/src/sleepchild/fimi/ThemeManager.java index 6c7129b..abe96c4 100644 --- a/app/src/sleepchild/fimi/ThemeManager.java +++ b/app/src/sleepchild/fimi/ThemeManager.java @@ -10,6 +10,7 @@ public class ThemeManager private static ThemeManager deft; private static Theme ctheme; + private String tfindex; private File themeFile; private String dir; @@ -58,9 +59,10 @@ private Theme igetTheme(){ } return ctheme; } + private Theme reloadTheme(){ - + getThemeFile(); if(themeFile.exists()){ ctheme = fromFile(themeFile.getAbsolutePath()); }else{ @@ -68,6 +70,10 @@ private Theme reloadTheme(){ } return ctheme; } + + void getThemeFile(){ + + } // note: to keep things in sync, this shud be the only method that performs a read on the themefile private Theme fromFile(String path){ diff --git a/app/src/sleepchild/fimi/Utils.java b/app/src/sleepchild/fimi/Utils.java index bc4d52f..3115ae0 100644 --- a/app/src/sleepchild/fimi/Utils.java +++ b/app/src/sleepchild/fimi/Utils.java @@ -125,6 +125,28 @@ public int compare(File p1, File p2) //*/ + public static String getDirectoryInfo(File fl){ + if(fl.isDirectory()){ + int d=0; + int f=0; + for(File j : fl.listFiles()){ + if(j.isFile()){ + f++; + }else{ + d++; + } + } + return d+(d==1 ? " folder, ":" folders, ") +f+ (f==1 ? " file":" files"); + + } + return ""; + } + + public static String formatDate(File fl){ + return new java.util.Date(fl.lastModified()).toLocaleString().toLowerCase(); + // + } + public static boolean touch(String path, String text, boolean overwrite){ try{ if(overwrite==false && new File(path).exists()){ @@ -173,7 +195,20 @@ public static int dp2px(final float dpValue) { return (int) (dpValue * scale + 0.5f); } + public static String clean(String str){ + String ret = str; + if(str.startsWith("file://")){ + ret = str.substring(7); + } + ret = ret.replace("%20"," ").replace("%26","&"); + + return ret; + } + public static String readTextFile(String path){ + if(path.startsWith("file://")){ + path = path.substring(7); + } BufferedReader br = null; try { @@ -197,6 +232,7 @@ public static String readTextFile(String path){ public static void touch(String path, String data){ touch(path, data.getBytes()); } + public static void touch(String path, byte[] data){ FileOutputStream o = null; try diff --git a/app/src/sleepchild/fimi/activity/ImageViewerActivity.java b/app/src/sleepchild/fimi/activity/ImageViewerActivity.java index b82d295..66f4d6a 100644 --- a/app/src/sleepchild/fimi/activity/ImageViewerActivity.java +++ b/app/src/sleepchild/fimi/activity/ImageViewerActivity.java @@ -44,7 +44,7 @@ private static String clean(String str){ ret = str.substring(7); } ret = ret.replace("%20"," ").replace("%26","&"); - + return ret; } diff --git a/app/src/sleepchild/fimi/activity/TextEditorActivity.java b/app/src/sleepchild/fimi/activity/TextEditorActivity.java index f73561e..579d988 100644 --- a/app/src/sleepchild/fimi/activity/TextEditorActivity.java +++ b/app/src/sleepchild/fimi/activity/TextEditorActivity.java @@ -1,9 +1,17 @@ package sleepchild.fimi.activity; import android.os.*; import sleepchild.fimi.*; +import android.content.*; +import android.widget.*; +import android.view.*; +import java.io.*; +import java.util.*; public class TextEditorActivity extends BaseActivity { + EditText ete; + TextView tvtitle; + String fname ; @Override protected void onCreate(Bundle savedInstanceState) @@ -11,6 +19,68 @@ protected void onCreate(Bundle savedInstanceState) // TODO: Implement this method super.onCreate(savedInstanceState); setContentView(R.layout.act_texteditor); + // + ete = findView(R.id.act_texteditor_ete); + tvtitle = findView(R.id.act_texteditor_title); + // + ete.postDelayed(new Runnable(){ + public void run(){ + //ete.setEnabled(true); + runn(); + } + },1); + // + } + + void runn(){ + Intent i = getIntent(); + if(i!=null){ + String path = Utils.clean( i.getDataString()); + getText(path); + fname = new File(path).getName(); + tvtitle.setText(fname); + } + } + + + + void getText(final String path){ + // + App.runInBackground(new Runnable(){ + public void run(){ + String dat = ""; + try + { + BufferedInputStream bs = new BufferedInputStream(new FileInputStream(path)); + byte[] buff = new byte[8 * 1024]; + int red=0; + int len=0; + + while((red = bs.read(buff,0,buff.length)) != -1){ + len++; + dat += new String(buff,0,red); + } + + buff=null; + bs.close(); + } + catch (FileNotFoundException e) + { + dat = e.getMessage() + "\n" + dat; + }catch(IOException ioe){ + dat = ioe.getMessage()+"\n"+dat; + } + + final String data = dat; + App.runOnUiThread(new Runnable(){ + public void run(){ + ete.setText(data); + ete.setEnabled(true); + findViewById(R.id.act_texteditor_loader).setVisibility(View.GONE); + } + }); + } + }); } } diff --git a/app/src/sleepchild/fimi/adapters/FileItemAdapter.java b/app/src/sleepchild/fimi/adapters/FileItemAdapter.java index 3471272..df2d823 100644 --- a/app/src/sleepchild/fimi/adapters/FileItemAdapter.java +++ b/app/src/sleepchild/fimi/adapters/FileItemAdapter.java @@ -19,6 +19,7 @@ public class FileItemAdapter extends BaseAdapter private LayoutInflater inflator; OnFileItemClickListener clickListener; Resources res; + boolean EMTY_DIR = false; public FileItemAdapter(MainActivity ctx, OnFileItemClickListener l){ clickListener = l; @@ -31,7 +32,13 @@ public void update(String path){ } public void update(List list){ + EMTY_DIR = false; fileList = list; + + if(list.size()==0){ + EMTY_DIR = true; + fileList.add(new MFile("empty")); + } notifyDataSetChanged(); } @@ -53,35 +60,56 @@ public long getItemId(int p1){ //View v; @Override public View getView(final int pos, final View p2, ViewGroup p3){ - + ThemeManager.Theme tm = ThemeManager.getTheme(); + if(EMTY_DIR){ + View ed = inflator.inflate(R.layout.emptyfolder, null); + ((TextView) ed.findViewById(R.id.emptyfolder_text)).setTextColor(tm.text); + return ed; + } + final MFile fl = fileList.get(pos); final View v = inflator.inflate(R.layout.adapteritem_fileitem, null, false); + + if(pos==0){ + v.findViewById(R.id.aifi_divider).setVisibility(View.GONE); + } + TextView title = (TextView) v.findViewById(R.id.adapteritem_fileitem_title); title.setText(fl.getName()); title.setTextColor(tm.text); final ImageView icon = (ImageView) v.findViewById(R.id.adapteritem_fileitem_icon); + TextView zise = (TextView) v.findViewById(R.id.adapteritem_fileitem_size); + zise.setTextColor(tm.text); if(fl.isFile()){ - TextView zise = (TextView) v.findViewById(R.id.adapteritem_fileitem_details); - String sp = Utils.formatSize(fl.length()); - zise.setText(sp); + + zise.setText( Utils.formatSize(fl.length()) ); zise.setTextColor(tm.text); + TextView date = (TextView) v.findViewById(R.id.adapteritem_fileitem_date); + date.setText(Utils.formatDate(fl)); + date.setTextColor(tm.text); + + if(fl.isImageFile()){ Imgur.getThumbnail(fl.getAbsolutePath(), 120, 120, new Imgur.ResultCallback(){ public void onResult(Bitmap bmp){ if(bmp!=null){ - icon.setBackground(null); + if(fl.getAbsolutePath().endsWith(".png")){ + icon.setBackgroundColor(Color.parseColor("#50cccccc")); + }else{ + icon.setBackground(null); + } icon.setImageBitmap(bmp); } } }); }else{ int resid = FIMI.getIcon(fl); - Bitmap ic = BitmapUtils.tintResource(res, resid, tm.icon); + Bitmap ic = VUtils.tintResource(res, resid, tm.icon); if(ic!=null){ icon.setImageBitmap(ic); }else{ @@ -91,16 +119,18 @@ public void onResult(Bitmap bmp){ } }else if(fl.isDirectory()){ - Bitmap ic = BitmapUtils.tintResource(res, R.drawable.ic_folder, tm.icon); + Bitmap ic = VUtils.tintResource(res, R.drawable.ic_folder, tm.icon); if(ic!=null){ icon.setImageBitmap(ic); }else{ icon.setImageResource(R.drawable.ic_folder); } + zise.setText(Utils.getDirectoryInfo(fl)); + } final ImageView icmore = (ImageView) v.findViewById(R.id.adapteritem_fileitem_vmore_icon); - Bitmap ic = BitmapUtils.tintResource(res, R.drawable.ic_bmore_2, tm.icon); + Bitmap ic = VUtils.tintResource(res, R.drawable.ic_bmore_2, tm.icon); if(ic!=null){ icmore.setImageBitmap(ic); }else{ @@ -131,7 +161,7 @@ public boolean onTouch(View p1, MotionEvent ev) int a = ev.getAction(); switch(a){ case MotionEvent.ACTION_DOWN: - v.setBackgroundColor(Color.parseColor("#30000000")); + v.setBackgroundColor(Color.parseColor("#50cccccc")); break; default: v.setBackgroundColor(Color.TRANSPARENT); diff --git a/app/src/sleepchild/fimi/adapters/TabPickerAdapter.java b/app/src/sleepchild/fimi/adapters/TabPickerAdapter.java index ffe6e8c..daa5731 100644 --- a/app/src/sleepchild/fimi/adapters/TabPickerAdapter.java +++ b/app/src/sleepchild/fimi/adapters/TabPickerAdapter.java @@ -7,6 +7,8 @@ import sleepchild.fimi.activity.*; import sleepchild.fimi.tabs.*; import sleepchild.fimi.*; +import android.graphics.*; +import sleepchild.fimi.utils.*; public class TabPickerAdapter extends BaseAdapter{ @@ -14,6 +16,7 @@ public class TabPickerAdapter extends BaseAdapter{ List tablist = new ArrayList<>(); LayoutInflater inf; Listener mlistener; + ThemeManager.Theme tm; public TabPickerAdapter(Context ctx){ this.ctx = ctx; @@ -21,13 +24,14 @@ public TabPickerAdapter(Context ctx){ } public void update(List list){ + tm = ThemeManager.getTheme(); tablist = list; notifyDataSetChanged(); } @Override public int getCount(){ - return tablist.size(); + return tablist.size()+1; } @Override @@ -43,18 +47,28 @@ public long getItemId(int p1){ @Override public View getView(final int pos, View v, ViewGroup p3) { + if(pos==getCount()-1){ + return nt(); + } + final Tab tab = getItem(pos); v = inf.inflate(R.layout.adapteritem_tabpickeritem, null, false); View container = v.findViewById(R.id.adapteritem_tabpickeritem_container); - + View closer = v.findViewById(R.id.adapteritem_tabpickeritem_closer); TextView title = (TextView) v.findViewById(R.id.adapteritem_tabpicker_title); title.setText(tab.getDir().getAbsolutePath()); - // + + container.setBackgroundColor(tm.text); + title.setTextColor(tm.background); + VUtils.tintIV(v, R.id.i1, tm.background); + if(tab.isCurrentTab()){ - int col = ctx.getResources().getColor(R.color.primary); - Utils.addBorder(container, 6, col); - title.setTextColor(col); + container.setBackgroundColor(tm.background); + //int col = tm.text;// ctx.getResources().getColor(R.color.currentTabText); + //Utils.addBorder(container, 6, col); + title.setTextColor(tm.text); + VUtils.tintIV(v, R.id.i1, tm.text); } v.setOnClickListener(new View.OnClickListener(){ @@ -65,7 +79,6 @@ public void onClick(View v){ } }); - View closer = v.findViewById(R.id.adapteritem_tabpickeritem_closer); closer.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ if(mlistener!=null){ @@ -77,6 +90,23 @@ public void onClick(View v){ return v; } + View nt(){// new tab + View v = inf.inflate(R.layout.text_view, null, false); + //v.setBackgroundColor(Color.TRANSPARENT); + TextView tv = (TextView) v.findViewById(R.id.text_view_textview); + tv.setText("New Tab"); + tv.setTextColor(Color.WHITE); + tv.setGravity(Gravity.CENTER_HORIZONTAL); + v.setOnClickListener(new View.OnClickListener(){ + public void onClick(View t){ + if(mlistener!=null){ + mlistener.onTabPickerNewTab(); + } + } + }); + return v; + } + public void setListener(Listener l){ mlistener = l; } @@ -84,6 +114,7 @@ public void setListener(Listener l){ public static interface Listener{ public void onTabPickerItemSelected(int pos, Tab tab); public void onTabPickerItemClosed(int pos, Tab tab); + public void onTabPickerNewTab(); } } diff --git a/app/src/sleepchild/fimi/io/Buffer.java b/app/src/sleepchild/fimi/io/Buffer.java deleted file mode 100644 index 86d35da..0000000 --- a/app/src/sleepchild/fimi/io/Buffer.java +++ /dev/null @@ -1,35 +0,0 @@ -package sleepchild.fimi.io; - -public class Buffer -{ - int pos; - byte[] buffer = null; - - public Buffer(){ - buffer = new byte[0]; - } - - public void put(byte[] b, int count){ - int l = buffer.length; - grow(count); - for(int i=0;i< count;i++){ - buffer[l] = b[i]; - l++; - } - - } - - private void grow(int size){ - byte[] copy = buffer; - int l = copy.length + size; - buffer = new byte[l]; - for(int i=0;i backstack = new ArrayList<>(); private TextView dirname; private MFile dir; boolean list1scrolling; @@ -74,7 +73,6 @@ private View fv(int resid){ private void loadDir(MFile fl){ dir = fl; - backstack.add(dir.getParent()); load(dir.getAbsolutePath()); dirname.setText(dir.getAbsolutePath()); } @@ -89,7 +87,7 @@ public void load(String path){ adaptor.update(path); TabSpooler.get().saveTab(this); dirname.setText(dir.getAbsolutePath()); - list1.invalidate(); + list1.setSelection(0); } public void reload(){ @@ -100,14 +98,6 @@ public void reload(){ public MFile getDir(){ return dir; } - - public List getBackHistory(){ - return backstack; - } - - public void setBackHistory(List list){ - backstack = list; - } public long getId(){ return id; @@ -148,12 +138,8 @@ public void onShowFileOptions(MFile fl, int pos) } public boolean goBack(){ - if(!backstack.isEmpty()){ - int li = backstack.size()-1; - String l = backstack.remove(li); - dir = new MFile(l); - dirname.setText(l); - load(l); + if(dir.getParentFile().canRead()){ + load(dir.getParent()); return true; } return false; @@ -181,7 +167,6 @@ private void tm(){ } public void destroy(){ - backstack = null; // } diff --git a/app/src/sleepchild/fimi/tabs/TabPicker.java b/app/src/sleepchild/fimi/tabs/TabPicker.java index 20b7666..192e20f 100644 --- a/app/src/sleepchild/fimi/tabs/TabPicker.java +++ b/app/src/sleepchild/fimi/tabs/TabPicker.java @@ -11,6 +11,7 @@ import android.widget.AbsListView.LayoutParams; import android.graphics.drawable.ColorDrawable; import android.graphics.Color; +import sleepchild.fimi.*; public class TabPicker{ MainActivity act; @@ -56,6 +57,11 @@ public void onTabPickerItemClosed(int pos, Tab tab){ } adapter.update(act.getTabManager().getTabs()); } + + public void onTabPickerNewTab(){ + act.getTabManager().newTab(Utils.DEFAULT_START_PATH); + close(); + } }); list48.setAdapter(adapter); diff --git a/app/src/sleepchild/fimi/utils/FileUtils.java b/app/src/sleepchild/fimi/utils/FileUtils.java deleted file mode 100644 index 9112177..0000000 --- a/app/src/sleepchild/fimi/utils/FileUtils.java +++ /dev/null @@ -1,5 +0,0 @@ -package sleepchild.fimi.utils; - -public class FileUtils -{ -} \ No newline at end of file diff --git a/app/src/sleepchild/fimi/utils/BitmapUtils.java b/app/src/sleepchild/fimi/utils/VUtils.java similarity index 85% rename from app/src/sleepchild/fimi/utils/BitmapUtils.java rename to app/src/sleepchild/fimi/utils/VUtils.java index 6b92404..c795159 100644 --- a/app/src/sleepchild/fimi/utils/BitmapUtils.java +++ b/app/src/sleepchild/fimi/utils/VUtils.java @@ -9,7 +9,7 @@ import android.content.*; import android.widget.*; -public class BitmapUtils +public class VUtils { private static class T{ Bitmap bmp; @@ -18,7 +18,7 @@ private static class T{ } private static Map cache = new HashMap<>(); - private BitmapUtils(){} + private VUtils(){} private static Bitmap tint2(Bitmap src, int color){ //Bitmap dest = cache.get( @@ -69,4 +69,14 @@ public static void tintIV(View root, int vid, int drawableID, int color){ ivey.setImageBitmap(bmp); } } + public static void tintIV(View root, int resid, int color){ + View v = root.findViewById(resid); + if(v instanceof ImageView){ + tintIV((ImageView) v , color); + } + } + + public static void tintIV(ImageView v, int color){ + v.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); + } } diff --git a/app/src/sleepchild/fimi/utils/ViewUtils.java b/app/src/sleepchild/fimi/utils/ViewUtils.java deleted file mode 100644 index aa9f8ba..0000000 --- a/app/src/sleepchild/fimi/utils/ViewUtils.java +++ /dev/null @@ -1,5 +0,0 @@ -package sleepchild.fimi.utils; - -public class ViewUtils -{ -} \ No newline at end of file diff --git a/app/src/sleepchild/view/ScaleImageView.java b/app/src/sleepchild/view/ScaleImageView.java deleted file mode 100644 index 8b9a5fc..0000000 --- a/app/src/sleepchild/view/ScaleImageView.java +++ /dev/null @@ -1,92 +0,0 @@ -package sleepchild.view; - -import android.widget.ImageView; -import android.content.Context; -import android.util.*; -import android.view.*; -import android.graphics.*; - -public class ScaleImageView extends ImageView -{ - - public ScaleImageView(Context ctx){ - super(ctx); - this.ctx = ctx; - init(); - } - - public ScaleImageView(Context ctx, AttributeSet attrs){ - this(ctx, attrs,0); - } - - public ScaleImageView(Context ctx, AttributeSet attrs, int deft){ - super(ctx, attrs, deft); - this.ctx = ctx; - setAttrs(); - init(); - } - - private Context ctx; - ScaleGestureDetector mScaleGesture; - float scalefactor = 1.0f; - - - private void setAttrs(){ - // - - } - - private void init(){ - // - mScaleGesture = new ScaleGestureDetector(ctx, new ScaleListener()); - } - - @Override - public boolean onTouchEvent(MotionEvent event) - { - return mScaleGesture.onTouchEvent(event); - } - - class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener{ - - @Override - public boolean onScale(ScaleGestureDetector detector) - { - scalefactor *= mScaleGesture.getScaleFactor(); - scalefactor = Math.max(0.5f, Math.min(scalefactor, 1.5f)); - zoom(scalefactor, scalefactor); - return super.onScale(detector); - } - - @Override - public void onScaleEnd(ScaleGestureDetector detector) - { - // TODO: Implement this method - super.onScaleEnd(detector); - //zoom(scalefactor, scalefactor); - } - - - - } - - public void clearZoom(){ - zoom(1.0f,1.0f); - } - - public void zoom(float x, float y){ - - setScaleX(x); - setScaleY(y); - } - - @Override - public void setImageBitmap(Bitmap bm) - { - super.setImageBitmap(bm); - clearZoom(); - } - - - -} diff --git a/app/src/sleepchild/view/lorna.java b/app/src/sleepchild/view/lorna.java deleted file mode 100644 index 5bb9235..0000000 --- a/app/src/sleepchild/view/lorna.java +++ /dev/null @@ -1,305 +0,0 @@ -package sleepchild.view; - -import android.content.Context; -import android.graphics.Matrix; -import android.graphics.PointF; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; -import android.util.Log; -import android.view.GestureDetector; -import android.view.MotionEvent; -import android.view.ScaleGestureDetector; -import android.view.View; -import android.widget.ImageView; -import sleepchild.fimi.*; - -public class lorna extends ImageView implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener { - - Matrix matrix; - - // We can be in one of these 3 states - static final int NONE = 0; - static final int DRAG = 1; - static final int ZOOM = 2; - int mode = NONE; - - // Remember some things for zooming - PointF last = new PointF(); - PointF start = new PointF(); - float minScale = 1f; - float maxScale = 3f; - float[] m; - - int viewWidth, viewHeight; - static final int CLICK = 3; - float saveScale = 1f; - protected float origWidth, origHeight; - int oldMeasuredWidth, oldMeasuredHeight; - - ScaleGestureDetector mScaleDetector; - - Context context; - - public lorna(Context context) { - super(context); - sharedConstructing(context); - } - - public lorna(Context context, AttributeSet attrs) { - super(context, attrs); - sharedConstructing(context); - } - - GestureDetector mGestureDetector; - - private void sharedConstructing(Context context) { - super.setClickable(true); - this.context = context; - mGestureDetector = new GestureDetector(context, this); - mGestureDetector.setOnDoubleTapListener(this); - - mScaleDetector = new ScaleGestureDetector(context, new ScaleListener()); - matrix = new Matrix(); - m = new float[9]; - setImageMatrix(matrix); - setScaleType(ScaleType.MATRIX); - - setOnTouchListener(new OnTouchListener() { - - @Override - public boolean onTouch(View v, MotionEvent event) { - mScaleDetector.onTouchEvent(event); - mGestureDetector.onTouchEvent(event); - - PointF curr = new PointF(event.getX(), event.getY()); - - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - last.set(curr); - start.set(last); - mode = DRAG; - break; - - case MotionEvent.ACTION_MOVE: - if (mode == DRAG) { - float deltaX = curr.x - last.x; - float deltaY = curr.y - last.y; - float fixTransX = getFixDragTrans(deltaX, viewWidth, - origWidth * saveScale); - float fixTransY = getFixDragTrans(deltaY, viewHeight, - origHeight * saveScale); - matrix.postTranslate(fixTransX, fixTransY); - fixTrans(); - last.set(curr.x, curr.y); - } - break; - - case MotionEvent.ACTION_UP: - mode = NONE; - int xDiff = (int) Math.abs(curr.x - start.x); - int yDiff = (int) Math.abs(curr.y - start.y); - if (xDiff < CLICK && yDiff < CLICK) - performClick(); - break; - - case MotionEvent.ACTION_POINTER_UP: - mode = NONE; - break; - } - - setImageMatrix(matrix); - invalidate(); - return true; // indicate event was handled - } - - }); - } - - public void setMaxZoom(float x) { - maxScale = x; - } - - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - return false; - } - - @Override - public boolean onDoubleTap(MotionEvent e) { - // Double tap is detected - Log.i("MAIN_TAG", "Double tap detected"); - float origScale = saveScale; - float mScaleFactor; - - if (saveScale == maxScale) { - saveScale = minScale; - mScaleFactor = minScale / origScale; - } else { - saveScale = maxScale; - mScaleFactor = maxScale / origScale; - } - - matrix.postScale(mScaleFactor, mScaleFactor, viewWidth / 2, - viewHeight / 2); - - fixTrans(); - return false; - } - - @Override - public boolean onDoubleTapEvent(MotionEvent e) { - return false; - } - - @Override - public boolean onDown(MotionEvent e) { - return false; - } - - @Override - public void onShowPress(MotionEvent e) { - - } - - @Override - public boolean onSingleTapUp(MotionEvent e) { - return false; - } - - @Override - public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { - return false; - } - - @Override - public void onLongPress(MotionEvent e) { - - } - - @Override - public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { - return false; - } - - private class ScaleListener extends - ScaleGestureDetector.SimpleOnScaleGestureListener { - @Override - public boolean onScaleBegin(ScaleGestureDetector detector) { - mode = ZOOM; - return true; - } - - @Override - public boolean onScale(ScaleGestureDetector detector) { - float mScaleFactor = detector.getScaleFactor(); - float origScale = saveScale; - saveScale *= mScaleFactor; - if (saveScale > maxScale) { - saveScale = maxScale; - mScaleFactor = maxScale / origScale; - } else if (saveScale < minScale) { - saveScale = minScale; - mScaleFactor = minScale / origScale; - } - - if (origWidth * saveScale <= viewWidth - || origHeight * saveScale <= viewHeight) - matrix.postScale(mScaleFactor, mScaleFactor, viewWidth / 2, - viewHeight / 2); - else - matrix.postScale(mScaleFactor, mScaleFactor, - detector.getFocusX(), detector.getFocusY()); - - fixTrans(); - return true; - } - } - - void fixTrans() { - matrix.getValues(m); - float transX = m[Matrix.MTRANS_X]; - float transY = m[Matrix.MTRANS_Y]; - - float fixTransX = getFixTrans(transX, viewWidth, origWidth * saveScale); - float fixTransY = getFixTrans(transY, viewHeight, origHeight - * saveScale); - - if (fixTransX != 0 || fixTransY != 0) - matrix.postTranslate(fixTransX, fixTransY); - } - - float getFixTrans(float trans, float viewSize, float contentSize) { - float minTrans, maxTrans; - - if (contentSize <= viewSize) { - minTrans = 0; - maxTrans = viewSize - contentSize; - } else { - minTrans = viewSize - contentSize; - maxTrans = 0; - } - - if (trans < minTrans) - return -trans + minTrans; - if (trans > maxTrans) - return -trans + maxTrans; - return 0; - } - - float getFixDragTrans(float delta, float viewSize, float contentSize) { - if (contentSize <= viewSize) { - return 0; - } - return delta; - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - viewWidth = MeasureSpec.getSize(widthMeasureSpec); - viewHeight = MeasureSpec.getSize(heightMeasureSpec); - - // - // Rescales image on rotation - // - if (oldMeasuredHeight == viewWidth && oldMeasuredHeight == viewHeight - || viewWidth == 0 || viewHeight == 0) - return; - oldMeasuredHeight = viewHeight; - oldMeasuredWidth = viewWidth; - - if (saveScale == 1) { - // Fit to screen. - float scale; - - Drawable drawable = getDrawable(); - if (drawable == null || drawable.getIntrinsicWidth() == 0 - || drawable.getIntrinsicHeight() == 0) - return; - int bmWidth = drawable.getIntrinsicWidth(); - int bmHeight = drawable.getIntrinsicHeight(); - - Log.d("bmSize", "bmWidth: " + bmWidth + " bmHeight : " + bmHeight); - - float scaleX = (float) viewWidth / (float) bmWidth; - float scaleY = (float) viewHeight / (float) bmHeight; - scale = Math.min(scaleX, scaleY); - matrix.setScale(scale, scale); - - // Center the image - float redundantYSpace = (float) viewHeight - - (scale * (float) bmHeight); - float redundantXSpace = (float) viewWidth - - (scale * (float) bmWidth); - redundantYSpace /= (float) 2; - redundantXSpace /= (float) 2; - - matrix.postTranslate(redundantXSpace, redundantYSpace); - - origWidth = viewWidth - 2 * redundantXSpace; - origHeight = viewHeight - 2 * redundantYSpace; - setImageMatrix(matrix); - } - fixTrans(); - } -} diff --git a/app/src/sleepchild/view/shore.java b/app/src/sleepchild/view/shore.java deleted file mode 100644 index 5c0876a..0000000 --- a/app/src/sleepchild/view/shore.java +++ /dev/null @@ -1,7 +0,0 @@ -package sleepchild.view; - -import android.view.*; - -public class shore{ - // -} diff --git a/app/tasks.txt b/app/tasks.txt deleted file mode 100644 index 05adc56..0000000 --- a/app/tasks.txt +++ /dev/null @@ -1,18 +0,0 @@ - -================ -todos: fimi - ----------------- - -[] action tasks:[ - [] copy - [] move - [] delete - [] rename - [] share -] - -[-] themeable using json. - - example: "[{name:'light', values:{bg:'#ffffff',text:'#000000',dividers:'#dddddd'}}, {name:'dark',values:{...}}, ...]" - -[] addon support