diff --git a/app/build.gradle b/app/build.gradle
index 144002e..a51d330 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -6,7 +6,7 @@ android {
defaultConfig {
applicationId "net.micode.notes"
- minSdkVersion 14
+ minSdkVersion 19
//noinspection ExpiredTargetSdkVersion
targetSdkVersion 30
}
@@ -21,13 +21,17 @@ android {
dependencies {
implementation group: 'org.apache.httpcomponents.client5', name: 'httpclient5', version: '5.2.1'
+ implementation group: 'androidx.appcompat', name: 'appcompat', version: '1.6.0'
+ implementation 'com.google.android.material:material:1.7.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+ implementation 'com.android.support:support-annotations:28.0.0'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.5'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
}
packagingOptions {
- exclude 'META-INF/DEPENDENCIES'
- exclude 'META-INF/NOTICE'
- exclude 'META-INF/LICENSE'
- exclude 'META-INF/LICENSE.txt'
- exclude 'META-INF/NOTICE.txt'
+ exclude 'META-INF/*'
}
}
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c1d1801..0a2e1c5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,7 +41,7 @@
android:name=".ui.NotesListActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
- android:theme="@style/NoteTheme"
+ android:theme="@style/Theme.AppCompat.Light.DarkActionBar"
android:uiOptions="splitActionBarWhenNarrow"
android:windowSoftInputMode="adjustPan" >
diff --git a/app/src/main/java/net/micode/notes/data/Contact.java b/app/src/main/java/net/micode/notes/data/Contact.java
index d97ac5d..7fd50b9 100644
--- a/app/src/main/java/net/micode/notes/data/Contact.java
+++ b/app/src/main/java/net/micode/notes/data/Contact.java
@@ -30,8 +30,8 @@ public class Contact {
private static final String TAG = "Contact";
private static final String CALLER_ID_SELECTION = "PHONE_NUMBERS_EQUAL(" + Phone.NUMBER
- + ",?) AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'"
- + " AND " + Data.RAW_CONTACT_ID + " IN "
+ + ",?) AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'"
+ + " AND " + Data.RAW_CONTACT_ID + " IN "
+ "(SELECT raw_contact_id "
+ " FROM phone_lookup"
+ " WHERE min_match = '+')";
diff --git a/app/src/main/java/net/micode/notes/gtask/remote/GTaskClient.java b/app/src/main/java/net/micode/notes/gtask/remote/GTaskClient.java
index c55b3f0..199785f 100644
--- a/app/src/main/java/net/micode/notes/gtask/remote/GTaskClient.java
+++ b/app/src/main/java/net/micode/notes/gtask/remote/GTaskClient.java
@@ -42,29 +42,18 @@ import org.apache.hc.client5.http.cookie.CookieStore;
import org.apache.hc.client5.http.entity.UrlEncodedFormEntity;
import org.apache.hc.client5.http.impl.classic.BasicHttpClientResponseHandler;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
-import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.protocol.HttpClientContext;
-import org.apache.hc.core5.http.HttpEntity;
-import org.apache.hc.core5.http.HttpResponse;
-import org.apache.hc.core5.http.io.HttpClientResponseHandler;
import org.apache.hc.core5.http.message.BasicNameValuePair;
-import org.apache.hc.core5.net.URIBuilder;
import org.apache.hc.core5.util.Timeout;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
-import java.io.BufferedReader;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.LinkedList;
import java.util.List;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.Inflater;
-import java.util.zip.InflaterInputStream;
public class GTaskClient {
@@ -149,8 +138,8 @@ public class GTaskClient {
int index = mAccount.name.indexOf('@') + 1;
String suffix = mAccount.name.substring(index);
url.append(suffix + "/");
- mGetUrl = url.toString() + "ig";
- mPostUrl = url.toString() + "r/ig";
+ mGetUrl = url + "ig";
+ mPostUrl = url + "r/ig";
if (tryToLoginGtask(activity, authToken)) {
mLoggedin = true;
diff --git a/app/src/main/java/net/micode/notes/gtask/remote/GTaskSyncService.java b/app/src/main/java/net/micode/notes/gtask/remote/GTaskSyncService.java
index cca36f7..a955dc3 100644
--- a/app/src/main/java/net/micode/notes/gtask/remote/GTaskSyncService.java
+++ b/app/src/main/java/net/micode/notes/gtask/remote/GTaskSyncService.java
@@ -42,7 +42,7 @@ public class GTaskSyncService extends Service {
private static String mSyncProgress = "";
- private void startSync() {
+ private synchronized void startSync() {
if (mSyncTask == null) {
mSyncTask = new GTaskASyncTask(this, new GTaskASyncTask.OnCompleteListener() {
public void onComplete() {
diff --git a/app/src/main/java/net/micode/notes/model/WorkingNote.java b/app/src/main/java/net/micode/notes/model/WorkingNote.java
index be081e4..a1a2455 100644
--- a/app/src/main/java/net/micode/notes/model/WorkingNote.java
+++ b/app/src/main/java/net/micode/notes/model/WorkingNote.java
@@ -38,7 +38,7 @@ public class WorkingNote {
// Note Id
private long mNoteId;
// Note content
- private String mContent;
+ public String mContent;
// Note mode
private int mMode;
diff --git a/app/src/main/java/net/micode/notes/tool/BackupUtils.java b/app/src/main/java/net/micode/notes/tool/BackupUtils.java
index 39f6ec4..7be7684 100644
--- a/app/src/main/java/net/micode/notes/tool/BackupUtils.java
+++ b/app/src/main/java/net/micode/notes/tool/BackupUtils.java
@@ -168,7 +168,7 @@ public class BackupUtils {
private void exportNoteToText(String noteId, PrintStream ps) {
Cursor dataCursor = mContext.getContentResolver().query(Notes.CONTENT_DATA_URI,
DATA_PROJECTION, DataColumns.NOTE_ID + "=?", new String[] {
- noteId
+ noteId
}, null);
if (dataCursor != null) {
@@ -215,6 +215,7 @@ public class BackupUtils {
}
}
+
/**
* Note will be exported as text which is user readable
*/
@@ -290,23 +291,19 @@ public class BackupUtils {
R.string.file_name_txt_format);
if (file == null) {
Log.e(TAG, "create file to exported failed");
- return null;
- }
+ return null; }
mFileName = file.getName();
mFileDirectory = mContext.getString(R.string.file_path);
PrintStream ps = null;
try {
FileOutputStream fos = new FileOutputStream(file);
ps = new PrintStream(fos);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- return null;
- } catch (NullPointerException e) {
+ } catch (FileNotFoundException | NullPointerException e) {
e.printStackTrace();
- return null;
- }
+ return null; }
return ps;
}
+
}
/**
diff --git a/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java b/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
index 96a9ff8..702ca39 100644
--- a/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
+++ b/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
@@ -27,14 +27,18 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.Paint;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.text.Editable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.text.style.BackgroundColorSpan;
+import android.text.style.ImageSpan;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -149,10 +153,13 @@ public class NoteEditActivity extends Activity implements OnClickListener,
private String mUserQuery;
private Pattern mPattern;
+ private static final int PHOTO_REQUEST = 2;// 从相册中选择
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.note_edit);
+// setContentView(R.layout.activity_main);
if (savedInstanceState == null && !initActivityState(getIntent())) {
finish();
@@ -430,7 +437,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
if (id == R.id.btn_set_bg_color) {
mNoteBgColorSelector.setVisibility(View.VISIBLE);
findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(
- - View.VISIBLE);
+ View.VISIBLE);
} else if (sBgSelectorBtnsMap.containsKey(id)) {
findViewById(sBgSelectorSelectionMap.get(mWorkingNote.getBgColorId())).setVisibility(
View.GONE);
@@ -505,6 +512,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
return true;
}
+
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
@@ -870,4 +878,49 @@ public class NoteEditActivity extends Activity implements OnClickListener,
private void showToast(int resId, int duration) {
Toast.makeText(this, resId, duration).show();
}
+
+
+ //路径字符串格式 转换为 图片image格式
+ private void convertToImage() {
+ NoteEditText noteEditText = (NoteEditText) findViewById(R.id.note_edit_view); //获取当前的edit
+ Editable editable = noteEditText.getText();//1.获取text
+ String noteText = editable.toString(); //2.将note内容转换为字符串
+ int length = editable.length(); //内容的长度
+ //3.截取img片段 [local]+uri+[local],提取uri
+ for(int i = 0; i < length; i++) {
+ for(int j = i; j < length; j++) {
+ String img_fragment = noteText.substring(i, j+1); //img_fragment:关于图片路径的片段
+ if(img_fragment.length() > 15 && img_fragment.endsWith("[/local]") && img_fragment.startsWith("[local]")){
+ int limit = 7; //[local]为7个字符
+ //[local][/local]共15个字符,剩下的为真正的path长度
+ int len = img_fragment.length()-15;
+ //从[local]之后的len个字符就是path
+ String path = img_fragment.substring(limit,limit+len);//获取到了图片路径
+ Bitmap bitmap = null;
+ Log.d(TAG, "图片的路径是:"+path);
+ try {
+ bitmap = BitmapFactory.decodeFile(path);//将图片路径解码为图片格式
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ if(bitmap!=null){ //若图片存在
+ Log.d(TAG, "图片不为null");
+ ImageSpan imageSpan = new ImageSpan(NoteEditActivity.this, bitmap);
+ //4.创建一个SpannableString对象,以便插入用ImageSpan对象封装的图像
+ String ss = "[local]" + path + "[/local]";
+ SpannableString spannableString = new SpannableString(ss);
+ //5.将指定的标记对象附加到文本的开始...结束范围
+ spannableString.setSpan(imageSpan, 0, ss.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ Log.d(TAG, "Create spannable string success!");
+ Editable edit_text = noteEditText.getEditableText();
+ edit_text.delete(i,i+len+15); //6.删掉图片路径的文字
+ edit_text.insert(i, spannableString); //7.在路径的起始位置插入图片
+ }
+ }
+ }
+ }
+ }
+
+
+
}
diff --git a/app/src/main/java/net/micode/notes/ui/NotesListActivity.java b/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
index e843aec..eda2134 100644
--- a/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
+++ b/app/src/main/java/net/micode/notes/ui/NotesListActivity.java
@@ -31,6 +31,7 @@ import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import androidx.appcompat.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
@@ -78,7 +79,7 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashSet;
-public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener {
+public class NotesListActivity extends AppCompatActivity implements OnClickListener, OnItemLongClickListener {
private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0;
private static final int FOLDER_LIST_QUERY_TOKEN = 1;
@@ -93,7 +94,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
private enum ListEditState {
NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER
- };
+ }
private ListEditState mState;
@@ -198,7 +199,6 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
sp.edit().putBoolean(PREFERENCE_ADD_INTRODUCTION, true).commit();
} else {
Log.e(TAG, "Save introduction note error");
- return;
}
}
}
diff --git a/app/src/main/res/color/primary_text_dark.xml b/app/src/main/res/color/primary_text_dark.xml
index 8ad98e3..7c85459 100644
--- a/app/src/main/res/color/primary_text_dark.xml
+++ b/app/src/main/res/color/primary_text_dark.xml
@@ -1,4 +1,4 @@
-
+
-
+ android:layout_height="fill_parent"
+ >
+
@@ -74,5 +75,5 @@
android:id="@+id/iv_alert_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="top|right"/>
+ android:layout_gravity="top|right" />
diff --git a/app/src/main/res/layout/note_list.xml b/app/src/main/res/layout/note_list.xml
index 6b25d38..bec977d 100644
--- a/app/src/main/res/layout/note_list.xml
+++ b/app/src/main/res/layout/note_list.xml
@@ -19,7 +19,8 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:background="@drawable/list_background">
+ android:background="#C1F5FFF9"
+ >
+ android:layout_width="200px"
+ android:layout_height="200px"
+ android:layout_gravity="bottom|right"
+ android:layout_marginBottom="80px"
+ android:layout_marginRight="80px"
+ android:background="@drawable/add_node"
+ android:focusable="auto"
+ android:visibility="visible" />
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 09f75ed..32cf020 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -17,6 +17,8 @@
+ 编辑信息
+ 发送
便签
便签2x2
便签4x4
@@ -71,10 +73,16 @@
确认要删除该条便签吗?
确认删除文件夹及所包含的便签吗?
已将所选 %1$d 条便签移到 %2$s 文件夹
+ 禁止移动到垃圾箱
+ 禁止删除垃圾箱
+ 禁止在垃圾箱中新建便签
+ 禁止更改垃圾箱的名字
+ 回收站
+ 恢复文件夹
SD卡被占用,不能操作
导出文本时发生错误,请检查SD卡
- 要查看的便签不存在
+ 禁止在垃圾箱中打开便签
不能为空便签设置闹钟提醒
不能将空便签发送到桌面
导出成功
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index e29b79b..2b94d7d 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -1,4 +1,4 @@
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 55df868..ea0b974 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -17,6 +17,8 @@
+ Enter a message
+ Send
Notes
Notes 2x2
Notes 4x4
@@ -36,10 +38,10 @@
Browse web
Open map
- /MIUI/notes/
- notes_%s.txt
+ /MIUI/notes/
+ notes_%s.txt
- (%d)
+ (%d)
New Folder
Export text
Sync
@@ -75,10 +77,16 @@
Confirm to delete the selected %d notes?
Confirm to delete this note?
Have moved selected %1$d notes to %2$s folder
+ Forbidden move to trash folder
+ Forbidden delete trash folder
+ Forbidden add in trash folder
+ Forbidden change trash folder name
+ Move out folder
+ TRASH
SD card busy, not available now
Export failed, please check SD card
- The note is not exist
+ Forbidden open note in trash
Sorry, can not set clock on empty note
Sorry, can not send and empty note to home
Export successful
@@ -101,7 +109,7 @@
Sync account
Sync notes with google task
Last sync time %1$s
- yyyy-MM-dd hh:mm:ss
+ yyyy-MM-dd hh:mm:ss
Add account
Change sync account
Remove sync account
diff --git a/build.gradle b/build.gradle
index 201f8ad..5ad7f02 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,7 +2,7 @@
buildscript {
repositories {
google()
- jcenter()
+ mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.1'
@@ -12,6 +12,6 @@ buildscript {
allprojects {
repositories {
google()
- jcenter()
+ mavenCentral()
}
}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..5465fec
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,2 @@
+android.enableJetifier=true
+android.useAndroidX=true
\ No newline at end of file