diff --git a/main/java/com/hty/browser/FavoriteActivity1.java b/main/java/com/hty/browser/FavoriteActivity1.java new file mode 100644 index 0000000..eb5430c --- /dev/null +++ b/main/java/com/hty/browser/FavoriteActivity1.java @@ -0,0 +1,442 @@ +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.net.Uri; +import android.os.Bundle; +import android.util.Log; +import android.view.ContextMenu; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.ExpandableListView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RadioButton; +import android.widget.SimpleCursorTreeAdapter; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.lang.reflect.Field; +import java.util.ArrayList; + +public class FavoriteActivity1 extends Activity { + ExpandableListView expandableListView; + int position = 0; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_favorite1); + expandableListView = (ExpandableListView) findViewById(R.id.expandablelistView); + + expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { + @Override + public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { + String url = ((TextView) v.findViewById(R.id.website)).getText().toString(); + Intent intent = new Intent(FavoriteActivity1.this, MainActivity.class); + intent.putExtra("url", url); + setResult(RESULT_OK, intent); + finish(); + return true; + } + }); + + expandableListView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() { + @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo; + int type = ExpandableListView.getPackedPositionType(info.packedPosition); + if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { + String title = ((TextView) info.targetView.findViewById(android.R.id.text1)).getText().toString(); + menu.setHeaderIcon(android.R.drawable.edit_text); + menu.setHeaderTitle("分类:" + title); + String[] sm = { "修改", "删除" }; + for (int i=0; i\n收藏夹\n\n\n\n

收藏夹" + cursor.getCount() + "

\n\n\n"; + if (cursor != null) { + while (cursor.moveToNext()) { + String title1 = cursor.getString(cursor.getColumnIndex("title")); + String website = cursor.getString(cursor.getColumnIndex("website")); + String category = cursor.getString(cursor.getColumnIndex("category")); + s = s + "\n"; + } + } + s += "
标题网址分类
" + title1 + "" + website + "" + category + "
\n\n"; + writeFile("webfav.htm", s); + break; + case 3: + s = ""; + helper = new DBHelper(getApplicationContext()); + cursor = helper.query(""); + if (cursor != null) { + while (cursor.moveToNext()) { + String title1 = cursor.getString(cursor.getColumnIndex("title")); + String website = cursor.getString(cursor.getColumnIndex("website")); + String category = cursor.getString(cursor.getColumnIndex("category")); + s = s + title1.replace(",", ",") + "," + website + "," + category + "\n"; + } + } + writeFile("webfav.csv", s); + break; + case android.R.id.home: + finish(); + break; + } + return true; + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + ExpandableListView.ExpandableListContextMenuInfo menuInfo = (ExpandableListView.ExpandableListContextMenuInfo) item.getMenuInfo(); + position = expandableListView.getFirstVisiblePosition(); + switch (item.getGroupId()) { + case 0: + final String category0 = ((TextView) menuInfo.targetView.findViewById(android.R.id.text1)).getText().toString(); + switch (item.getItemId()) { + case 0: + AlertDialog.Builder builder = new AlertDialog.Builder(FavoriteActivity1.this); + builder.setIcon(android.R.drawable.ic_menu_edit); + builder.setTitle("分类:" + category0); + final EditText editText_rename = new EditText(FavoriteActivity1.this); + editText_rename.setText(category0); + editText_rename.setSelection(category0.length()); + builder.setView(editText_rename); + builder.setPositiveButton("重命名", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + DBHelper helper = new DBHelper(getApplicationContext()); + SQLiteDatabase db = helper.getWritableDatabase(); + ContentValues values = new ContentValues(); + String category = editText_rename.getText().toString(); + values.put("category", category); + db.update("category", values, "category = '" + category0 + "'", null); + db.update(helper.TableName, values, "category = '" + category0 + "'", null); + onCreate(null); + } + }); + builder.setNegativeButton("取消", null); + builder.create().show(); + break; + case 1: + DBHelper helper = new DBHelper(getApplicationContext()); + SQLiteDatabase db = helper.getWritableDatabase(); + db.delete("category", "category=?", new String[] { category0 }); + ContentValues values = new ContentValues(); + values.put("category", ""); + db.update(helper.TableName, values, "category = '" + category0 + "'", null); + onCreate(null); + break; + } + break; + case 1: + final String sid = ((TextView) menuInfo.targetView.findViewById(R.id.id)).getText().toString(); + final String title = ((TextView) menuInfo.targetView.findViewById(R.id.title)).getText().toString(); + final String url = ((TextView) menuInfo.targetView.findViewById(R.id.website)).getText().toString(); + final String category = ((TextView) menuInfo.targetView.findViewById(R.id.category)).getText().toString(); + switch (item.getItemId()) { + case 0: + Intent intent = new Intent(FavoriteActivity1.this, MainActivity.class); + intent.putExtra("url", url); + intent.putExtra("newWindow", true); + setResult(RESULT_OK, intent); + finish(); + break; + case 1: + ClipboardManager CM = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + CM.setPrimaryClip(ClipData.newPlainText("link", url)); + Toast.makeText(getApplicationContext(), "链接已复制", Toast.LENGTH_SHORT).show(); + break; + case 2: + intent = new Intent(); + intent.setAction(Intent.ACTION_SEND); + intent.putExtra(Intent.EXTRA_TEXT, title + "\n" + url); + intent.setType("text/plain"); + startActivity(Intent.createChooser(intent, "分享")); + break; + case 3: + LinearLayout layout = new LinearLayout(FavoriteActivity1.this); + layout.setOrientation(LinearLayout.VERTICAL); + final EditText editText_title = new EditText(FavoriteActivity1.this); + editText_title.setMaxLines(3); + editText_title.setHint("标题"); + editText_title.setText(title); + layout.addView(editText_title); + final EditText editText_url = new EditText(FavoriteActivity1.this); + editText_url.setMaxLines(5); + editText_title.setHint("网址"); + editText_url.setText(url); + layout.addView(editText_url); + final Spinner spinner = new Spinner(this); + ArrayList list = new ArrayList<>(); + list.add(""); + DBHelper helper = new DBHelper(this); + Cursor cursor = helper.category(); + if (cursor != null) { + while (cursor.moveToNext()) { + String s = cursor.getString(cursor.getColumnIndex("category")); + list.add(s); + } + } + ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_spinner_item, list); + spinner.setAdapter(adapter); + spinner.setSelection(list.indexOf(category)); + layout.addView(spinner); + AlertDialog.Builder builder = new AlertDialog.Builder(FavoriteActivity1.this); + builder.setIcon(android.R.drawable.btn_star_big_on); + builder.setTitle("修改收藏"); + builder.setView(layout); + builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + String stitle = editText_title.getText().toString(); + String surl = editText_url.getText().toString(); + Field field = null; + try { + //通过反射获取dialog中的私有属性mShowing + field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); + field.setAccessible(true);//设置该属性可以访问 + } catch (Exception ex) { + } + if (!stitle.equals("") && (surl.startsWith("http") || !surl.startsWith("file:///"))) { + DBHelper dbHelper = new DBHelper(getApplicationContext()); + SQLiteDatabase db = dbHelper.getWritableDatabase(); + ContentValues values = new ContentValues(); + values.put("website", surl); + values.put("title", stitle); + values.put("category", spinner.getSelectedItem().toString()); + int i = db.update(DBHelper.TableName, values, "_id = " + sid, null); + if (i != -1) + onCreate(null); + else + Toast.makeText(getApplicationContext(), "修改失败", Toast.LENGTH_SHORT).show(); + try { + //关闭 + field.set(dialog, true); + dialog.dismiss(); + } catch (Exception ex) { + } + } else { + if (stitle.equals("")) { + editText_title.setError("标题不能为空!"); + } + if (!surl.startsWith("http://") || !surl.startsWith("https://") || !surl.startsWith("file://")) { + editText_url.setError("网址错误!"); + } + try { + //设置dialog不可关闭 + field.set(dialog, false); + dialog.dismiss(); + } catch (Exception ex) { + } + } + } + }); + builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Field field = null; + try { + //通过反射获取dialog中的私有属性mShowing + field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); + field.setAccessible(true);//设置该属性可以访问 + } catch (Exception e) { + } + try { + field.set(dialog, true); + dialog.dismiss(); + } catch (Exception e) { + } + } + }); + builder.create().show(); + break; + case 4: + position = expandableListView.getFirstVisiblePosition(); + int id = Integer.parseInt(((TextView) menuInfo.targetView.findViewById(R.id.id)).getText().toString()); + helper = new DBHelper(getApplicationContext()); + int i = helper.del(id); + if (i != -1) + onCreate(null); + else + Toast.makeText(getApplicationContext(), "删除失败", Toast.LENGTH_SHORT).show(); + break; + case 5: + builder = new AlertDialog.Builder(FavoriteActivity1.this); + builder.setIcon(android.R.drawable.ic_menu_edit); + builder.setTitle(title); + final EditText editText_rename = new EditText(FavoriteActivity1.this); + editText_rename.setText(title); + editText_rename.setSelection(title.length()); + builder.setView(editText_rename); + builder.setPositiveButton("重命名", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + DBHelper helper = new DBHelper(getApplicationContext()); + SQLiteDatabase db = helper.getWritableDatabase(); + ContentValues values = new ContentValues(); + String category = editText_rename.getText().toString(); + values.put("category", category); + db.update("category", values, "category = '" + title + "'", null); + db.update(helper.TableName, values, "category = '" + title + "'", null); + onCreate(null); + } + }); + break; + case 6: + helper = new DBHelper(getApplicationContext()); + SQLiteDatabase db = helper.getWritableDatabase(); + db.delete("category", "category=?", new String[]{title}); + ContentValues values = new ContentValues(); + values.put("category", ""); + db.update(helper.TableName, values, "category = '" + title + "'", null); + onCreate(null); + break; + } + break; + } + return true; + } + + void writeFile(String filename, String s) { + File file = new File(MainActivity.dir, filename); + try { + BufferedWriter BW = new BufferedWriter(new FileWriter(file, false)); //false覆盖 + if (filename.endsWith(".csv")) { + BW.write('\ufeff'); // Excel通过文件的BOM头来判断文件编码 + BW.flush(); + } + BW.write(s); + BW.flush(); + Toast.makeText(getApplicationContext(), "写文件 " + MainActivity.dir + File.separator + filename + " 成功", Toast.LENGTH_SHORT).show(); + } catch (Exception e) { + Log.e(Thread.currentThread().getStackTrace()[2] + "", e.toString()); + Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show(); + } + } + +} \ No newline at end of file