Compare commits

...

13 Commits
gyl ... main

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidProjectSystem">
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
</component>
</project>

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetSelector">
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
</selectionStates>
</component>
</project>

@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules">
@ -11,7 +13,6 @@
<option value="$PROJECT_DIR$/app" />
</set>
</option>
<option name="resolveExternalAnnotations" value="false" />
</GradleProjectSettings>
</option>
</component>

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>

@ -43,11 +43,10 @@ dependencies {
implementation(libs.activity)
implementation(libs.constraintlayout)
implementation(fileTree(mapOf(
"dir" to "D:\\\\ruanjiangongchengshiyan111gyl\\\\threezgl\\\\httpcomponents-client-4.5.14-bin\\\\lib",
"include" to listOf("*.aar", "*.jar"),
"exclude" to listOf("commons-codec-1.11.jar","httpclient-4.5.14.jar","httpclient-cache-4.5.14.jar",
"fluent-hc-4.5.14.jar","httpmime-4.5.14.jar")
"dir" to "..\\httpcomponents-client-4.5.14-bin\\lib",
"include" to listOf("*.aar", "*.jar"),
"exclude" to listOf("commons-codec-1.11.jar","httpclient-4.5.14.jar","httpclient-cache-4.5.14.jar",
"fluent-hc-4.5.14.jar","httpmime-4.5.14.jar")
)))
testImplementation(libs.junit)
androidTestImplementation(libs.ext.junit)

@ -23,6 +23,7 @@ import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Build;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
@ -31,8 +32,8 @@ import net.micode.notes.data.Notes.NoteColumns;
public class AlarmInitReceiver extends BroadcastReceiver {
private static final String [] PROJECTION = new String [] {
NoteColumns.ID,
NoteColumns.ALERTED_DATE
NoteColumns.ID,
NoteColumns.ALERTED_DATE
};
private static final int COLUMN_ID = 0;
@ -53,13 +54,33 @@ public class AlarmInitReceiver extends BroadcastReceiver {
long alertDate = c.getLong(COLUMN_ALERTED_DATE);
Intent sender = new Intent(context, AlarmReceiver.class);
sender.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, c.getLong(COLUMN_ID)));
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, sender, 0);
AlarmManager alermManager = (AlarmManager) context
// 修复:添加 FLAG_IMMUTABLE 标志
PendingIntent pendingIntent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
pendingIntent = PendingIntent.getBroadcast(
context,
0,
sender,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE
);
} else {
pendingIntent = PendingIntent.getBroadcast(
context,
0,
sender,
PendingIntent.FLAG_UPDATE_CURRENT
);
}
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
alermManager.set(AlarmManager.RTC_WAKEUP, alertDate, pendingIntent);
// 额外修复:修正变量名拼写错误
alarmManager.set(AlarmManager.RTC_WAKEUP, alertDate, pendingIntent);
} while (c.moveToNext());
}
c.close();
}
}
}
}

@ -17,7 +17,10 @@
package net.micode.notes.ui;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.text.Layout;
import android.text.Selection;
import android.text.Spanned;
@ -30,21 +33,35 @@ import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.MotionEvent;
import android.widget.EditText;
import android.text.TextWatcher;
import android.text.Editable;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import androidx.appcompat.widget.AppCompatEditText;
import net.micode.notes.R;
import java.util.HashMap;
import java.util.Map;
public class NoteEditText extends EditText {
public class NoteEditText extends AppCompatEditText {
private static final String TAG = "NoteEditText";
private int mIndex;
private int mSelectionStartBeforeDelete;
private static final String SCHEME_TEL = "tel:" ;
private static final String SCHEME_HTTP = "http:" ;
private static final String SCHEME_EMAIL = "mailto:" ;
// 字数显示相关变量
private Paint mPaint;
private String mCharacterCountText = "字符数0";
private int mTextColor = 0xFF333333; // 深灰色
private float mTextSize = 16f; // sp字体放大
private int mPadding = 12; // dp边距调整
private boolean mIsBold = true; // 字体加粗标志
private static final String SCHEME_TEL = "tel:";
private static final String SCHEME_HTTP = "http:";
private static final String SCHEME_EMAIL = "mailto:";
private static final Map<String, Integer> sSchemaActionResMap = new HashMap<String, Integer>();
static {
@ -57,29 +74,21 @@ public class NoteEditText extends EditText {
* Call by the {@link NoteEditActivity} to delete or add edit text
*/
public interface OnTextViewChangeListener {
/**
* Delete current edit text when {@link KeyEvent#KEYCODE_DEL} happens
* and the text is null
*/
void onEditTextDelete(int index, String text);
/**
* Add edit text after current edit text when {@link KeyEvent#KEYCODE_ENTER}
* happen
*/
void onEditTextEnter(int index, String text);
/**
* Hide or show item option when text change
*/
void onTextChange(int index, boolean hasText);
}
private OnTextViewChangeListener mOnTextViewChangeListener;
// 用于计算字数
private int mCharacterCount = 0;
public NoteEditText(Context context) {
super(context, null);
mIndex = 0;
initPaint();
initTextWatcher();
}
public void setIndex(int index) {
@ -92,18 +101,60 @@ public class NoteEditText extends EditText {
public NoteEditText(Context context, AttributeSet attrs) {
super(context, attrs, android.R.attr.editTextStyle);
initPaint();
initTextWatcher();
}
public NoteEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
initPaint();
initTextWatcher();
}
// 初始化画笔用于绘制字数
private void initPaint() {
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setTextSize(sp2px(mTextSize)); // 设置更大的字体大小
mPaint.setColor(mTextColor);
// 设置字体加粗
if (mIsBold) {
// 方法1使用Typeface设置粗体
mPaint.setTypeface(Typeface.DEFAULT_BOLD);
// 方法2如果需要使用原始字体但加粗可以这样设置
// mPaint.setTypeface(Typeface.create(mPaint.getTypeface(), Typeface.BOLD));
// 方法3使用Fake Bold注意这与setTypeface是不同的方法
// mPaint.setFakeBoldText(true);
}
}
// 初始化文本变化监听器
private void initTextWatcher() {
this.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String processedText = cutOfimage(operateText(s.toString()));
mCharacterCount = processedText.length();
mCharacterCountText = "字符数:" + mCharacterCount;
invalidate(); // 刷新视图以重绘字数
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
int x = (int) event.getX();
int y = (int) event.getY();
x -= getTotalPaddingLeft();
@ -117,7 +168,6 @@ public class NoteEditText extends EditText {
Selection.setSelection(getText(), off);
break;
}
return super.onTouchEvent(event);
}
@ -148,7 +198,7 @@ public class NoteEditText extends EditText {
return true;
}
} else {
Log.d(TAG, "OnTextViewChangeListener was not seted");
Log.d(TAG, "OnTextViewChangeListener was not set");
}
break;
case KeyEvent.KEYCODE_ENTER:
@ -158,7 +208,7 @@ public class NoteEditText extends EditText {
setText(getText().subSequence(0, selectionStart));
mOnTextViewChangeListener.onEditTextEnter(mIndex + 1, text);
} else {
Log.d(TAG, "OnTextViewChangeListener was not seted");
Log.d(TAG, "OnTextViewChangeListener was not set");
}
break;
default:
@ -214,4 +264,51 @@ public class NoteEditText extends EditText {
}
super.onCreateContextMenu(menu);
}
}
public String operateText(String str) {
Pattern p = Pattern.compile("\\s+"); // 简化正则表达式
Matcher m = p.matcher(str);
return m.replaceAll("");
}
public String cutOfimage(String str) {
String dest = str;
int index1 = dest.indexOf("[local]");
int index2 = dest.indexOf("[/local]");
while (index1 != -1 && index2 != -1) {
dest = dest.substring(0, index1) + dest.substring(index2 + 8);
index1 = dest.indexOf("[local]");
index2 = dest.indexOf("[/local]");
}
return dest;
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
}
// 重写onDraw方法在右下角绘制字数
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 计算绘制位置:右下角,调整边距
float x = getWidth() - mPaint.measureText(mCharacterCountText) - dp2px(mPadding);
float y = getHeight() - dp2px(mPadding);
canvas.drawText(mCharacterCountText, x, y, mPaint);
}
// dp转px工具方法
private int dp2px(float dpValue) {
float scale = getContext().getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
// sp转px工具方法
private int sp2px(float spValue) {
float fontScale = getContext().getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
}

@ -81,7 +81,8 @@ public class NotesPreferenceActivity extends PreferenceActivity {
mReceiver = new GTaskReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(GTaskSyncService.GTASK_SERVICE_BROADCAST_NAME);
registerReceiver(mReceiver, filter);
registerReceiver(mReceiver, filter, Context.RECEIVER_NOT_EXPORTED);
mOriAccounts = null;
View header = LayoutInflater.from(this).inflate(R.layout.settings_header, null);

Loading…
Cancel
Save