diff --git a/app.apk b/app.apk index b100aea..4baa270 100644 Binary files a/app.apk and b/app.apk differ diff --git a/main/AndroidManifest.xml b/main/AndroidManifest.xml index e3acb6d..b478eb8 100644 --- a/main/AndroidManifest.xml +++ b/main/AndroidManifest.xml @@ -2,11 +2,11 @@ + android:versionName="4.32"> - + @@ -17,7 +17,6 @@ - + -


海天鹰浏览器 V4.30

+


海天鹰浏览器 V4.32

内置扩展的浏览器。

扩展:链接关键字过滤,链接关键字高亮,图片自定义过滤,视频独立播放。

作者:海天鹰

@@ -23,6 +23,7 @@ p { text-indent:2em; }

获取网页图标

字符串转Bitmap

更新日志:

+

V4.32 (2023-11-19)

  1. 增加GIF屏蔽。
  2. 在Activity中处理广告屏蔽规则。

V4.31 (2023-04-17)

  1. 取消自动升级,以免因升级错误引起崩溃。

V4.30 (2023-03-23)

  1. 收藏夹测试 ExpandableListView 控件

V4.29 (2023-03-01)

  1. 收藏夹增加分类。
  2. 收藏夹分类的修改和删除。
  3. 修改导出HTML和CSV方法。
  4. 新建收藏和修改收藏编辑框设置最大行数,避免窗口撑大不完整。
diff --git a/main/java/com/hty/browser/ADBlockActivity.java b/main/java/com/hty/browser/ADBlockActivity.java new file mode 100644 index 0000000..9a04b19 --- /dev/null +++ b/main/java/com/hty/browser/ADBlockActivity.java @@ -0,0 +1,285 @@ +package com.hty.browser; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.ContentValues; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.Color; +import android.media.MediaScannerConnection; +import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.view.ContextMenu; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RadioButton; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import java.io.BufferedWriter; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class ADBlockActivity extends Activity { + EditText editText; + ImageButton imageButton_clear; + ListView listView; + ArrayAdapter adapter; + List datas0, datas; + //String[] SL; + InputMethodManager IMM; + int position; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_adblock); + getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); + IMM = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); + + editText = (EditText) findViewById(R.id.editText); + editText.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) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().equals("")) { + imageButton_clear.setVisibility(View.GONE); + } else { + imageButton_clear.setVisibility(View.VISIBLE); + } + search(); + } + }); + + imageButton_clear = (ImageButton) findViewById(R.id.imageButton_clear); + imageButton_clear.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View v) { + editText.setText(""); + } + }); + imageButton_clear.setVisibility(View.GONE); + + datas0 = new ArrayList<>(); + datas = new ArrayList<>(); + adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, datas); + listView = (ListView) findViewById(R.id.listView); + listView.setAdapter(adapter); + listView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() { + @Override + public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { + AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; + String title = ((TextView) info.targetView.findViewById(android.R.id.text1)).getText().toString(); + menu.setHeaderTitle(title); + menu.setHeaderIcon(R.drawable.link); + String[] sm = { "打开", "复制", "分享", "修改", "删除" }; + for (int i=0; i list = new ArrayList<>(); DBHelper helper = new DBHelper(MainActivity.this); Cursor cursor = helper.category(); @@ -940,7 +947,7 @@ public class MainActivity extends Activity { isFullScreen = true; break; case 14: - DialogBlockList(); + startActivityForResult(new Intent(MainActivity.this, ADBlockActivity.class), 0); break; case 15: list_webView.get(currentPage).clearCache(true); @@ -970,19 +977,19 @@ public class MainActivity extends Activity { } void DialogBlock(String content){ - final EditText ETrule = new EditText(this); - ETrule.setText(content); - final AlertDialog dialogRule = new AlertDialog.Builder(this).setIcon(R.drawable.ic_launcher).setTitle("屏蔽规则").setView(ETrule).setCancelable(false).setPositiveButton("添加",null).setNeutralButton("删除",null).setNegativeButton("取消",null).create(); - dialogRule.show(); - dialogRule.getButton(AlertDialog.BUTTON_POSITIVE) + final EditText edit_rule = new EditText(this); + edit_rule.setText(content); + final AlertDialog dialog = new AlertDialog.Builder(this).setIcon(R.drawable.ic_launcher).setTitle("屏蔽规则").setView(edit_rule).setCancelable(false).setPositiveButton("添加",null).setNegativeButton("取消",null).create(); + dialog.show(); + dialog.getButton(AlertDialog.BUTTON_POSITIVE) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean exist = false; - String rule = ETrule.getText().toString(); - List rulelist = new ArrayList(Arrays.asList(ReadFile("blockrules").split("\n"))); - for(int i=0;i list_rule = new ArrayList<>(Arrays.asList(readFile("blockrules").split(","))); + for (int i=0; i rulelist = new ArrayList(Arrays.asList(ReadFile("blockrules").split("\n"))); - for(int i=0;i adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, datas); - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setIcon(R.drawable.ic_launcher); - builder.setTitle("屏蔽规则列表:"); - builder.setAdapter(adapter, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - DialogBlock(datas[which]); - //Toast.makeText(MainActivity.this, "你点击了第" + which + "个item", Toast.LENGTH_SHORT).show(); - } - }); - builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - - } - }); - builder.setNeutralButton("清空", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - AlertDialog.Builder builder1 = new AlertDialog.Builder(MainActivity.this); - builder1.setMessage("操作不可逆,确认清空吗?"); - builder1.setIcon(R.drawable.ic_launcher); - builder1.setTitle("警告"); - builder1.setPositiveButton("确认", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - String filepath = getFilesDir().getAbsolutePath() + "/blockrules"; - File file = new File(filepath); - //if(file.isFile() && file.exists()) { - Log.e(Thread.currentThread().getStackTrace()[2] + "", String.valueOf(file.delete())); - //} - } - }); - builder1.setNegativeButton("取消", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - - } - }); - builder1.create().show(); - } - }); - builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - - } - }); - builder.show(); - } - - String ReadFile(String filename) { + String readFile(String filename) { String s = ""; FileInputStream istream; try { - istream = MainActivity.this.openFileInput(filename); + istream = openFileInput(filename); byte[] buffer = new byte[1024]; ByteArrayOutputStream ostream = new ByteArrayOutputStream(); int len; while ((len = istream.read(buffer)) != -1) { ostream.write(buffer, 0, len); } - s = new String(ostream.toByteArray()); + s = ostream.toString(); istream.close(); ostream.close(); return s; - } catch (FileNotFoundException e) { - Log.e(Thread.currentThread().getStackTrace()[2] + "", "" + e); - String path = getFilesDir().getAbsolutePath() + "/blockrules"; - File file = new File(path); - try { - file.createNewFile(); - } catch (IOException e1) { - Log.e(Thread.currentThread().getStackTrace()[2] + "", "" + e1); - } - return s; } catch (IOException e) { Log.e(Thread.currentThread().getStackTrace()[2] + "", "" + e); return s; } } - void ADBlock(){ - String s = ReadFile("blockrules"); + void ADBlock() { + String s = readFile("blockrules"); //Log.e(Thread.currentThread().getStackTrace()[2] + "", "" + s); - if(!"".equals(s)) { - String rules = s.replace("\n", ","); - if (rules.endsWith(",")) { - rules = rules.substring(0, rules.length() - 1); - } - String js = "javascript:var rules='" + rules + "';var rule=new Array();rule=rules.split(',');var img=document.getElementsByTagName('img');for(i=0;i + + + + + + + + + + + \ No newline at end of file diff --git a/main/res/xml/preference.xml b/main/res/xml/preference.xml index 91983c6..2e9b17f 100644 --- a/main/res/xml/preference.xml +++ b/main/res/xml/preference.xml @@ -14,9 +14,14 @@ android:title="电脑模式"/> + android:title="广告过滤" /> + +