diff --git a/.classpath b/.classpath deleted file mode 100755 index 7bc01d9..0000000 --- a/.classpath +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/.project b/.project deleted file mode 100755 index 93a53ed..0000000 --- a/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - Bloqq - - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - - diff --git a/AndroidManifest.xml b/AndroidManifest.xml index c25200c..014d8ac 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -9,6 +9,8 @@ android:targetSdkVersion="19" /> + + + + + + + + + + + + + + + diff --git a/README.md b/README.md deleted file mode 100644 index d949d23..0000000 --- a/README.md +++ /dev/null @@ -1,4 +0,0 @@ -bloqq -===== - -android web-browser based on webview diff --git a/lint.xml b/lint.xml deleted file mode 100755 index ee0eead..0000000 --- a/lint.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/project.properties b/project.properties deleted file mode 100755 index 0cdc1c4..0000000 --- a/project.properties +++ /dev/null @@ -1,16 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system edit -# "ant.properties", and override values to adapt the script to your -# project structure. -# -# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): -#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt - -# Project target. -target=android-19 -android.library.reference.1=../appcompat_v7 -android.library.reference.2=../SlidingLib diff --git a/res/layout/activity_fav.xml b/res/layout/activity_fav.xml new file mode 100755 index 0000000..8717786 --- /dev/null +++ b/res/layout/activity_fav.xml @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/res/layout/activity_hist.xml b/res/layout/activity_hist.xml index d025d0f..88dd627 100755 --- a/res/layout/activity_hist.xml +++ b/res/layout/activity_hist.xml @@ -3,6 +3,7 @@ android:id="@+id/hist_layout" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="@color/abc_search_url_text_pressed" android:focusable="true" android:focusableInTouchMode="true" android:paddingBottom="@dimen/activity_vertical_margin" diff --git a/res/layout/fav_item.xml b/res/layout/fav_item.xml new file mode 100755 index 0000000..86b56fb --- /dev/null +++ b/res/layout/fav_item.xml @@ -0,0 +1,28 @@ + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/hist_item.xml b/res/layout/hist_item.xml index 103272a..f080c29 100755 --- a/res/layout/hist_item.xml +++ b/res/layout/hist_item.xml @@ -8,6 +8,7 @@ android:id="@+id/hist_item_title" android:layout_width="match_parent" android:layout_height="wrap_content" + android:textColor="@color/abc_search_url_text_normal" android:textSize="16sp" android:textStyle="bold" /> @@ -15,6 +16,18 @@ android:id="@+id/hist_item_url" android:layout_width="match_parent" android:layout_height="wrap_content" - android:textSize="16sp" /> + android:textSize="8sp" /> + + + + \ No newline at end of file diff --git a/res/layout/left_sliding_menu.xml b/res/layout/left_sliding_menu.xml index dc0408b..f3ee6ee 100755 --- a/res/layout/left_sliding_menu.xml +++ b/res/layout/left_sliding_menu.xml @@ -9,12 +9,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="100dp" - android:columnWidth="90dp" android:gravity="center" - android:horizontalSpacing="10dp" - android:numColumns="auto_fit" + android:numColumns="3" android:stretchMode="columnWidth" - android:verticalSpacing="10dp" > + android:verticalSpacing="50dp" > \ No newline at end of file diff --git a/res/menu/main.xml b/res/menu/main.xml index 59554ec..40f8783 100755 --- a/res/menu/main.xml +++ b/res/menu/main.xml @@ -19,6 +19,16 @@ ActionBar:showAsAction="ifRoom" android:orderInCategory="800" android:title="@string/hist"/> + + History Homepage URL Put here your start page url + Favorites + Add favorite + 100 + Font size + Clear history + Clear favorites + + + Large + Normal + Small + + + 130 + 100 + 70 + \ No newline at end of file diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index ab0c048..cfa6d72 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -6,4 +6,28 @@ android:summary="@string/pref_homepage_summary" android:title="@string/pref_homepage" /> + + + + + + + \ No newline at end of file diff --git a/src/com/bloqq/BlocksAdapter.java b/src/com/bloqq/BlocksAdapter.java index 5b758b4..ddd13e6 100755 --- a/src/com/bloqq/BlocksAdapter.java +++ b/src/com/bloqq/BlocksAdapter.java @@ -1,15 +1,20 @@ package com.bloqq; import android.annotation.SuppressLint; +import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; +import android.graphics.Point; import android.graphics.drawable.BitmapDrawable; import android.util.Log; +import android.view.Display; import android.view.MotionEvent; +import android.view.Surface; import android.view.View; +import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.webkit.WebChromeClient; @@ -19,7 +24,6 @@ import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; -import android.widget.Toast; import com.bloqq.activities.MainActivity; import com.bloqq.cache.App; @@ -30,10 +34,28 @@ public class BlocksAdapter extends BaseAdapter { private Context mContext; private SharedPreferences mPrefs; + private int mBlockSizePortrait; + private int mBlockSizeLandscape; + @SuppressLint("NewApi") public BlocksAdapter(Context context, SharedPreferences prefs) { mContext = context; mPrefs = prefs; + Display display = ((Activity) mContext).getWindowManager() + .getDefaultDisplay(); + int width, height; + if (android.os.Build.VERSION.SDK_INT >= 13) { + Point point = new Point(); + display.getSize(point); + width = point.x; + height = point.y; + } else { + width = display.getWidth(); + height = display.getHeight(); + } + + mBlockSizePortrait = width / 4; + mBlockSizeLandscape = height / 4; } @Override @@ -56,96 +78,142 @@ public long getItemId(int position) { public View getView(final int position, View convertView, ViewGroup parent) { WebIconDatabase.getInstance().open( mContext.getDir("icons", Context.MODE_PRIVATE).getPath()); - Log.i("DEBUG", "position " + position); final BlocksAdapter adapter = this; String uri = mPrefs.getString("uri" + position, ""); final DiskCache cache = ((App) mContext.getApplicationContext()) .getDiskCache(); - // bitmap = cache.getBitmap("uri" + position); View blockView = null; - // if (cache.containsKey("uri" + position)) { - // cache.remove("uri" + position); - // } - if (!cache.containsKey("uri" + position)) {// bitmap == null) { - // ImageView imageView = new ImageView(mContext); - blockView = new WebView(mContext); - ((WebView) blockView).setOnTouchListener(new OnTouchListener() { - - @SuppressLint("ClickableViewAccessibility") - @Override - public boolean onTouch(View v, MotionEvent event) { - if (((WebView) v).getBackground() == null) { - MainActivity activity = (MainActivity) mContext; - activity.getWebView().loadUrl(v.getTag().toString()); - activity.getSlidingMenu().toggle(); - } - // MainActivity activity = (MainActivity) mContext; - // activity.getWebView().loadUrl(v.getTag().toString()); - // activity.getSlidingMenu().toggle(); - return false; - } - }); - - ((WebView) blockView).setWebViewClient(new WebViewClient() { - @Override - public void onReceivedError(WebView view, int errorCode, - String description, String failingUrl) { - super.onReceivedError(view, errorCode, description, - failingUrl); - view.setBackgroundColor(Color.RED); - Toast.makeText(mContext, "Error loading fav#" + position, - Toast.LENGTH_LONG).show(); - Bitmap errorIcon = BitmapFactory.decodeResource( - mContext.getResources(), - android.R.drawable.ic_menu_close_clear_cancel); - cache.put("uri" + position, errorIcon); - adapter.notifyDataSetChanged(); - } - }); - - ((WebView) blockView).setWebChromeClient(new WebChromeClient() { - @Override - public void onReceivedIcon(WebView view, Bitmap icon) { - if (icon != null) { - Log.i("DEBUG", "FAVICON != NULL HERE"); - // if (cache.containsKey("uri" + position)) { - // cache.remove("uri" + position); + if (cache != null) { + if (!cache.containsKey("uri" + position)) { + blockView = new WebView(mContext); + + ((WebView) blockView).setOnTouchListener(new OnTouchListener() { + + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouch(View v, MotionEvent event) { + // if (((WebView) v).getBackground() == null) { + // Log.i("DEBUG", ((WebView) v).getUrl()); + // MainActivity activity = (MainActivity) mContext; + // if (activity.getSlidingMenu().isMenuShowing()) { + // activity.getSlidingMenu().toggle(); // } - cache.put("uri" + position, icon); - view.setBackgroundDrawable(new BitmapDrawable(icon)); + // activity.getWebView() + // .loadUrl(v.getTag().toString()); + // Log.i("DEBUG", "dwwd"); + // } + if (((WebView) v).getUrl() != null) { + if (((WebView) v).getBackground() == null) { + Log.i("DEBUG", "qwerty"); + Bitmap errorIcon = BitmapFactory.decodeResource( + mContext.getResources(), + android.R.drawable.ic_menu_close_clear_cancel); + cache.put("uri" + position, errorIcon); + v.setBackgroundDrawable(new BitmapDrawable( + errorIcon)); + adapter.notifyDataSetChanged(); + } + Log.i("DEBUG", ((WebView) v).getUrl()); + MainActivity activity = (MainActivity) mContext; + if (activity.getSlidingMenu().isMenuShowing()) { + activity.getSlidingMenu().toggle(); + } + activity.getWebView().loadUrl( + ((WebView) v).getUrl()); + } + return false; + } + }); + // + // ((WebView) blockView).setOnClickListener(new + // OnClickListener() { + // + // @Override + // public void onClick(View v) { + // // if (((WebView) v).getBackground() != null) { + // // if (((WebView) v).getBackground() != mContext + // // .getResources().getDrawable( + // + // // android.R.drawable.gallery_thumb)) { + // + // } + // // } + // } + // }); + ((WebView) blockView).setWebViewClient(new WebViewClient() { + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + super.onReceivedError(view, errorCode, description, + failingUrl); + view.setBackgroundColor(Color.RED); + Log.i("DEBUG", "Error loading fav#" + position); + Bitmap errorIcon = BitmapFactory.decodeResource( + mContext.getResources(), + android.R.drawable.ic_menu_close_clear_cancel); + cache.put("uri" + position, errorIcon); adapter.notifyDataSetChanged(); } - super.onReceivedIcon(view, icon); - } - }); + }); + + ((WebView) blockView).setWebChromeClient(new WebChromeClient() { + @Override + public void onReceivedIcon(WebView view, Bitmap icon) { + if (icon != null) { + Log.i("DEBUG", "trewq"); + Log.i("DEBUG", "FAVICON != NULL HERE"); + // if (cache.containsKey("uri" + position)) { + // cache.remove("uri" + position); + // } + cache.put("uri" + position, icon); + view.setBackgroundDrawable(new BitmapDrawable(icon)); + adapter.notifyDataSetChanged(); + } + super.onReceivedIcon(view, icon); + } + }); - // imageView.setInitialScale(2); - // imageView.getSettings().setLoadWithOverviewMode(true); - if ("".equals(uri)) { - blockView - .setBackgroundResource(android.R.drawable.gallery_thumb); + // imageView.setInitialScale(2); + // imageView.getSettings().setLoadWithOverviewMode(true); + if ("".equals(uri)) { + blockView + .setBackgroundResource(android.R.drawable.gallery_thumb); + } else { + // new LogoTask(imageView).execute(uri); + ((WebView) blockView).loadUrl(uri); + // } else { + /* + * if (android.os.Build.VERSION.SDK_INT >= + * android.os.Build.VERSION_CODES.JELLY_BEAN) { + * imageView.setBackground(new BitmapDrawable(bitmap)); } + * else { imageView.setBackgroundDrawable(new + * BitmapDrawable(bitmap)); } + */ + } } else { - // new LogoTask(imageView).execute(uri); - ((WebView) blockView).loadUrl(uri); - // } else { - /* - * if (android.os.Build.VERSION.SDK_INT >= - * android.os.Build.VERSION_CODES.JELLY_BEAN) { - * imageView.setBackground(new BitmapDrawable(bitmap)); } else { - * imageView.setBackgroundDrawable(new BitmapDrawable(bitmap)); - * } - */ + Bitmap bitmap = cache.getBitmap("uri" + position); + blockView = new ImageView(mContext); + ((ImageView) blockView).setImageBitmap(bitmap); + ((ImageView) blockView) + .setScaleType(ImageView.ScaleType.CENTER_CROP); } } else { - Bitmap bitmap = cache.getBitmap("uri" + position); blockView = new ImageView(mContext); - ((ImageView) blockView).setImageBitmap(bitmap); - ((ImageView) blockView) - .setScaleType(ImageView.ScaleType.CENTER_CROP); + blockView.setBackgroundResource(android.R.drawable.gallery_thumb); } blockView.setTag(uri); - blockView.setLayoutParams(new GridView.LayoutParams(120, 120)); + // blockView.setLayoutParams(new GridView.LayoutParams(120, 120)); + + int rotation = ((Activity) mContext).getWindowManager() + .getDefaultDisplay().getRotation(); + if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) { + blockView.setLayoutParams(new GridView.LayoutParams( + mBlockSizeLandscape, mBlockSizeLandscape)); + } else { + blockView.setLayoutParams(new GridView.LayoutParams( + mBlockSizePortrait, mBlockSizePortrait)); + } return blockView; } } diff --git a/src/com/bloqq/BloqqWebView.java b/src/com/bloqq/BloqqWebView.java index 382c889..48620e5 100755 --- a/src/com/bloqq/BloqqWebView.java +++ b/src/com/bloqq/BloqqWebView.java @@ -1,25 +1,89 @@ package com.bloqq; +import java.io.File; + +import android.app.DownloadManager; import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Environment; import android.util.AttributeSet; +import android.util.Log; import android.view.KeyEvent; +import android.webkit.DownloadListener; import android.webkit.WebView; -import android.widget.Toast; public class BloqqWebView extends WebView { + private final Context mContext; + public BloqqWebView(Context context) { super(context); + mContext = context; + final DownloadManager manager = (DownloadManager) mContext + .getSystemService(Context.DOWNLOAD_SERVICE); + final File destinationDir = new File( + Environment.getExternalStorageDirectory(), "Bloqq"); + if (!destinationDir.exists()) { + destinationDir.mkdir(); + } + + this.setDownloadListener(new DownloadListener() { + + @Override + public void onDownloadStart(String url, String userAgent, + String contentDisposition, String mimetype, + long contentLength) { + Uri source = Uri.parse(url); + + DownloadManager.Request request = new DownloadManager.Request( + source); + File destinationFile = new File(destinationDir, source + .getLastPathSegment()); + request.setDestinationUri(Uri.fromFile(destinationFile)); + manager.enqueue(request); + } + }); } public BloqqWebView(Context context, AttributeSet attrs) { super(context, attrs); + mContext = context; + + final DownloadManager manager = (DownloadManager) mContext + .getSystemService(Context.DOWNLOAD_SERVICE); + final File destinationDir = new File( + Environment.getExternalStorageDirectory(), + mContext.getPackageName()); + if (!destinationDir.exists()) { + destinationDir.mkdir(); + } + + this.setDownloadListener(new DownloadListener() { + + @Override + public void onDownloadStart(String url, String userAgent, + String contentDisposition, String mimetype, + long contentLength) { + /* + * Intent i = new Intent(Intent.ACTION_VIEW); + * i.setData(Uri.parse(url)); Log.i("DEBUG", url); + * mContext.startActivity(i); + */ + Uri source = Uri.parse(url); + + DownloadManager.Request request = new DownloadManager.Request( + source); + File destinationFile = new File(destinationDir, source + .getLastPathSegment()); + request.setDestinationUri(Uri.fromFile(destinationFile)); + manager.enqueue(request); + } + }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { - Toast.makeText(getContext(), "Back button pressed", Toast.LENGTH_LONG) - .show(); if (canGoBack()) { goBack(); return true; diff --git a/src/com/bloqq/SwipeTouchListener.java b/src/com/bloqq/SwipeTouchListener.java new file mode 100644 index 0000000..074d3b1 --- /dev/null +++ b/src/com/bloqq/SwipeTouchListener.java @@ -0,0 +1,55 @@ +package com.bloqq; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.view.GestureDetector; +import android.view.GestureDetector.SimpleOnGestureListener; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnTouchListener; + +abstract public class SwipeTouchListener implements OnTouchListener { + + private final GestureDetector gestureDetector; + + public SwipeTouchListener(Context context) { + gestureDetector = new GestureDetector(context, new GestureListener()); + } + + abstract public void onSwipeLeft(); + + abstract public void onSwipeRight(); + + @SuppressLint("ClickableViewAccessibility") + public boolean onTouch(View v, MotionEvent event) { + return gestureDetector.onTouchEvent(event); + } + + private final class GestureListener extends SimpleOnGestureListener { + + private static final int SWIPE_DISTANCE_THRESHOLD = 100; + private static final int SWIPE_VELOCITY_THRESHOLD = 100; + + @Override + public boolean onDown(MotionEvent e) { + return true; + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, + float velocityY) { + float distanceX = e2.getX() - e1.getX(); + float distanceY = e2.getY() - e1.getY(); + if (Math.abs(distanceX) > Math.abs(distanceY) + && Math.abs(distanceX) > SWIPE_DISTANCE_THRESHOLD + && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { + if (distanceX > 0) + onSwipeRight(); + else + onSwipeLeft(); + return true; + } + return false; + } + } +} \ No newline at end of file diff --git a/src/com/bloqq/activities/FavoriteActivity.java b/src/com/bloqq/activities/FavoriteActivity.java new file mode 100644 index 0000000..4cd8950 --- /dev/null +++ b/src/com/bloqq/activities/FavoriteActivity.java @@ -0,0 +1,53 @@ +package com.bloqq.activities; + +import android.app.ListActivity; +import android.content.Intent; +import android.database.Cursor; +import android.os.Bundle; +import android.support.v4.widget.SimpleCursorAdapter; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListAdapter; + +import com.bloqq.R; +import com.bloqq.sqlite.BloqqDBHelper; + +public class FavoriteActivity extends ListActivity { + + private Cursor mCursor; + + @SuppressWarnings("deprecation") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_fav); + + mCursor = getContentResolver().query( + BloqqDBHelper.Fav.CONTENT_URI_FAV_DB, null, null, null, + BloqqDBHelper.Fav.COLUMN_TITLE + " DESC"); + + ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.fav_item, + mCursor, new String[] { BloqqDBHelper.Fav.COLUMN_TITLE, + BloqqDBHelper.Fav.COLUMN_URL }, new int[] { + R.id.fav_item_title, R.id.fav_item_url }); + + setListAdapter(adapter); + getListView().setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View item, + int position, long id) { + Cursor itemCursor = (Cursor) getListAdapter().getItem(position); + + String url = itemCursor.getString(itemCursor + .getColumnIndex(BloqqDBHelper.Fav.COLUMN_URL)); + Intent data = new Intent(); + data.putExtra(MainActivity.EXTRA_URL, url); + setResult(RESULT_OK, data); + finish(); + } + }); + + } +} diff --git a/src/com/bloqq/activities/HistoryActivity.java b/src/com/bloqq/activities/HistoryActivity.java index 8412ce4..5ec8aca 100644 --- a/src/com/bloqq/activities/HistoryActivity.java +++ b/src/com/bloqq/activities/HistoryActivity.java @@ -5,14 +5,13 @@ import android.database.Cursor; import android.os.Bundle; import android.support.v4.widget.SimpleCursorAdapter; -import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListAdapter; import com.bloqq.R; -import com.bloqq.sqlite.HistDBHelper; +import com.bloqq.sqlite.BloqqDBHelper; public class HistoryActivity extends ListActivity { @@ -24,40 +23,17 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hist); - // Query for all people contacts using the Contacts.People convenience - // class. - // Put a managed wrapper around the retrieved cursor so we don't have to - // worry about - // requerying or closing it as the activity changes state. mCursor = getContentResolver().query( - HistDBHelper.Hist.CONTENT_URI_HIST_DB, null, null, null, null); - // startManagingCursor(mCursor); + BloqqDBHelper.Hist.CONTENT_URI_HIST_DB, null, null, null, + BloqqDBHelper.Hist.COLUMN_DATE + " DESC"); - // Now create a new list adapter bound to the cursor. - // SimpleListAdapter is designed for binding to a Cursor. - ListAdapter adapter = new SimpleCursorAdapter(this, // Context. - R.layout.hist_item, // Specify the row template - // to use (here, two - // columns bound to the - // two retrieved - // cursorrows). - mCursor, // Pass in the cursor to bind to. - new String[] { HistDBHelper.Hist.COLUMN_TITLE, - HistDBHelper.Hist.COLUMN_URL }, // Array of cursor - // columns to bind to. - new int[] { R.id.hist_item_title, R.id.hist_item_url }); // Parallel - // array - // of - // which - // template - // objects - // to - // bind - // to - // those - // columns. + ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.hist_item, + mCursor, new String[] { BloqqDBHelper.Hist.COLUMN_TITLE, + BloqqDBHelper.Hist.COLUMN_URL, + BloqqDBHelper.Hist.COLUMN_DATE }, new int[] { + R.id.hist_item_title, R.id.hist_item_url, + R.id.hist_item_date }); - // Bind to our new adapter. setListAdapter(adapter); getListView().setOnItemClickListener(new OnItemClickListener() { @@ -66,13 +42,9 @@ public void onItemClick(AdapterView parent, View item, int position, long id) { Cursor itemCursor = (Cursor) getListAdapter().getItem(position); - String title = itemCursor.getString(itemCursor - .getColumnIndex(HistDBHelper.Hist.COLUMN_TITLE)); String url = itemCursor.getString(itemCursor - .getColumnIndex(HistDBHelper.Hist.COLUMN_URL)); - Log.i("DEBUG", getListAdapter().getItem(position).getClass() - .getSimpleName()); - Log.i("DEBUG", "TITLE: " + title + " | URL: " + url); + .getColumnIndex(BloqqDBHelper.Hist.COLUMN_URL)); + Intent data = new Intent(); data.putExtra(MainActivity.EXTRA_URL, url); setResult(RESULT_OK, data); diff --git a/src/com/bloqq/activities/MainActivity.java b/src/com/bloqq/activities/MainActivity.java index 03183c8..13c6372 100755 --- a/src/com/bloqq/activities/MainActivity.java +++ b/src/com/bloqq/activities/MainActivity.java @@ -5,10 +5,14 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.v4.view.MenuItemCompat; +import android.support.v4.view.MenuItemCompat.OnActionExpandListener; import android.support.v7.app.ActionBarActivity; import android.util.Log; +import android.view.Gravity; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; @@ -32,22 +36,24 @@ import com.bloqq.BlocksAdapter; import com.bloqq.BloqqWebView; import com.bloqq.R; +import com.bloqq.SwipeTouchListener; import com.bloqq.cache.App; import com.bloqq.cache.DiskCache; import com.bloqq.edits.AddressUrlEdit; import com.bloqq.edits.BlockUrlEdit; +import com.bloqq.sqlite.UpdateFavDbTask; import com.bloqq.sqlite.UpdateHistDbTask; import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; public class MainActivity extends ActionBarActivity { - // WebView mWebView; private BloqqWebView mWebView; private String mHomepage; private String mCurrentUrl; public final static String HOMEPAGE = "homepage"; public final static int REQUEST_HIST = 0; + public final static int REQUEST_FAV = 1; public final static String EXTRA_URL = "url"; private SlidingMenu mMenu; @@ -56,80 +62,60 @@ public class MainActivity extends ActionBarActivity { private BlockUrlEdit mInputUrl; - private boolean mIsUrlListened; - - @SuppressLint("SetJavaScriptEnabled") + @SuppressLint({ "SetJavaScriptEnabled", "NewApi" }) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mPrefs = PreferenceManager.getDefaultSharedPreferences(this);// getSharedPreferences("settings", - // Context.MODE_PRIVATE); + + mPrefs = PreferenceManager.getDefaultSharedPreferences(this); mHomepage = mPrefs.getString(HOMEPAGE, "http://google.com"); - // SharedPreferences.Editor editor = mPrefs.edit(); - // editor.putString(HOMEPAGE, - // "http://developer.android.com/about/versions/lollipop.html"); - // editor.commit(); getWindow().requestFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.activity_main); - // mWebView = (WebView) findViewById(R.id.webPage); + getActionBar().setDisplayShowHomeEnabled(false); + getActionBar().setDisplayShowTitleEnabled(false); + mWebView = (BloqqWebView) findViewById(R.id.webPage); mWebView.setWebViewClient(new WebViewClient() { - public void onReceivedError(WebView view, int errorCode, - String description, String failingUrl) { - Toast.makeText(getApplicationContext(), - "Oh no! " + description, Toast.LENGTH_SHORT).show(); + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + App app = (App) getApplication(); + if (!app.isOnline()) { + Toast toast = Toast.makeText(getApplicationContext(), + "Internet connection problems", Toast.LENGTH_LONG); + toast.setGravity(Gravity.CENTER, 0, 0); + toast.show(); + } + return super.shouldOverrideUrlLoading(view, url); } @Override public void onPageFinished(WebView view, String url) { - final View edit = findViewById(R.id.action_go); - - if (edit.getClass().getSimpleName() - .equals(AddressUrlEdit.class.getSimpleName())) { - if (!mIsUrlListened) { - AddressUrlEdit uInput = (AddressUrlEdit) edit; - uInput.setOnEditorActionListener(new TextView.OnEditorActionListener() { - @Override - public boolean onEditorAction(TextView v, - int actionId, KeyEvent event) { - if (actionId == EditorInfo.IME_ACTION_GO) { - mCurrentUrl = ((AddressUrlEdit) edit) - .getText().toString(); - mWebView.loadUrl(mCurrentUrl); - return true; - } - return false; - } - }); - uInput.setOnFocusChangeListener(new OnFocusChangeListener() { - @Override - public void onFocusChange(View v, boolean hasFocus) { - if (v.getId() == R.id.action_go && !hasFocus) { - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow( - edit.getWindowToken(), 0); - } - } - }); - mIsUrlListened = true; - } - ((AddressUrlEdit) edit).setText(url); - } mCurrentUrl = url; super.onPageFinished(view, url); - edit.clearFocus(); findViewById(R.id.main_layout).requestFocus(); new UpdateHistDbTask(getApplicationContext()).execute(mWebView .copyBackForwardList()); } }); - - mWebView.getSettings().setJavaScriptEnabled(true); + if (mPrefs.getBoolean("js_enabled", true)) { + mWebView.getSettings().setJavaScriptEnabled(true); + } mWebView.getSettings().setBuiltInZoomControls(true); - mWebView.getSettings().setDefaultFixedFontSize(10); + + try { + int fontSize = Integer.parseInt(mPrefs + .getString("font_size", "100")); + mWebView.getSettings().setTextZoom(fontSize); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + mWebView.getSettings().setAllowUniversalAccessFromFileURLs(true); + } + final Activity activity = this; mWebView.setWebChromeClient(new WebChromeClient() { @Override @@ -142,18 +128,25 @@ public void onProgressChanged(WebView view, int newProgress) { mMenu = new SlidingMenu(this); mMenu.setMode(SlidingMenu.LEFT); - // mMenu.setMode(SlidingMenu.LEFT_RIGHT); mMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); - // menu.setShadowWidthRes(R.dimen.dialog_fixed_width_minor);// - // shadow_width); - // menu.setShadowDrawable(R.drawable.abc_ab_bottom_solid_light_holo); - // menu.setBehindOffsetRes(15);// slidingmenu_offset); mMenu.setFadeEnabled(true); mMenu.setFadeDegree(0.35f); mMenu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW); mMenu.setMenu(R.layout.left_sliding_menu); mMenu.setSlidingEnabled(true); - // mMenu.setSecondaryMenu(R.layout.activity_main); + + View menuLayout = findViewById(R.id.menu_relative_layout); + menuLayout.setOnTouchListener(new SwipeTouchListener(this) { + + @Override + public void onSwipeRight() { + } + + @Override + public void onSwipeLeft() { + mMenu.toggle(); + } + }); GridView grid = (GridView) mMenu.findViewById(R.id.menu_grid_layout); final BlocksAdapter adapter = new BlocksAdapter(this, mPrefs); @@ -164,12 +157,13 @@ public void onProgressChanged(WebView view, int newProgress) { public void onItemClick(AdapterView parent, View v, int position, long id) { mWebView.loadUrl(v.getTag().toString()); - mMenu.toggle(); + if (mMenu.isShown()) { + mMenu.toggle(); + } Log.i("DEBUG", v.getTag().toString()); } }); grid.setOnItemLongClickListener(new OnItemLongClickListener() { - // Left and Right @Override public boolean onItemLongClick(AdapterView parent, View v, int position, long id) { @@ -179,14 +173,13 @@ public boolean onItemLongClick(AdapterView parent, View v, } mInputUrl = new BlockUrlEdit(getApplicationContext(), position); + if (!v.getTag().toString().isEmpty()) { + mInputUrl.setText(v.getTag().toString()); + } + RelativeLayout layout = (RelativeLayout) findViewById(R.id.menu_relative_layout); - // p.topMargin = 50; - // p.addRule(RelativeLayout.ABOVE, R.id.menu_grid_layout); - layout.addView(mInputUrl); - // mInputUrl.setInputType(InputType.TYPE_CLASS_TEXT); - // mInputUrl.setContentDescription("text"); - // inputUrl.setText("http://"); + layout.addView(mInputUrl); mInputUrl.setOnFocusChangeListener(new OnFocusChangeListener() { @@ -208,9 +201,17 @@ public boolean onEditorAction(TextView v, if (actionId == EditorInfo.IME_ACTION_DONE) { SharedPreferences.Editor editor = mPrefs .edit(); + String url = mInputUrl.getText().toString(); + if (url.startsWith("http://") + || url.startsWith("https://")) { + mCurrentUrl = url; + } else { + mCurrentUrl = "http://" + url; + } + editor.putString( "uri" + mInputUrl.getPosition(), - mInputUrl.getText().toString()); + mCurrentUrl); editor.commit(); DiskCache cache = ((App) getApplication()) .getDiskCache(); @@ -219,10 +220,6 @@ public boolean onEditorAction(TextView v, adapter.notifyDataSetChanged(); mInputUrl.setVisibility(View.GONE); mInputUrl = null; - // mCurrentUrl = - // inputUrl.getText().toString(); - // mWebView.loadUrl(mCurrentUrl); - return true; } return false; @@ -235,22 +232,85 @@ public boolean onEditorAction(TextView v, @Override public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); + MenuItem item = menu.findItem(R.id.action_go); + MenuItemCompat.setOnActionExpandListener(item, + new OnActionExpandListener() { + + @Override + public boolean onMenuItemActionExpand(MenuItem item) { + + final View edit = MenuItemCompat.getActionView(item); + if (edit.getClass().getSimpleName() + .equals(AddressUrlEdit.class.getSimpleName())) { + AddressUrlEdit uInput = (AddressUrlEdit) edit; + uInput.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, + int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_GO) { + String url = ((AddressUrlEdit) edit) + .getText().toString(); + if (url.startsWith("http://") + || url.startsWith("https://")) { + mCurrentUrl = url; + mWebView.loadUrl(mCurrentUrl); + } else { + mCurrentUrl = "http://google.com/search?q=" + + url; + mWebView.loadUrl(mCurrentUrl); + } + return true; + } + return false; + } + }); + uInput.setOnFocusChangeListener(new OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, + boolean hasFocus) { + if (v.getId() == R.id.action_go + && !hasFocus) { + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow( + edit.getWindowToken(), 0); + } + } + }); + ((AddressUrlEdit) edit).setText(mCurrentUrl); + edit.clearFocus(); + } + + return true; + } + + @Override + public boolean onMenuItemActionCollapse(MenuItem item) { + return true; + } + }); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.go_button) { View go = findViewById(R.id.action_go); if (go instanceof EditText) { - mCurrentUrl = ((EditText) go).getText().toString(); - mWebView.loadUrl(mCurrentUrl); + if (go instanceof EditText) { + String url = ((AddressUrlEdit) go).getText().toString(); + if (url.startsWith("http://") || url.startsWith("https://")) { + mCurrentUrl = url; + mWebView.loadUrl(mCurrentUrl); + } else { + mCurrentUrl = "http://google.com/search?q=" + url; + mWebView.loadUrl(mCurrentUrl); + } + } else { + mWebView.loadUrl(mCurrentUrl); + } } else { mWebView.loadUrl(mCurrentUrl); } @@ -261,21 +321,21 @@ public boolean onOptionsItemSelected(MenuItem item) { } else if (id == R.id.settings_button) { Intent intent = new Intent(MainActivity.this, SettingsActivity.class); - startActivityForResult(intent, REQUEST_HIST); + startActivity(intent); + } else if (id == R.id.fav_add_button) { + new UpdateFavDbTask(this).execute(mWebView.getTitle(), + mWebView.getUrl()); + } else if (id == R.id.fav_button) { + Intent intent = new Intent(MainActivity.this, + FavoriteActivity.class); + startActivityForResult(intent, REQUEST_FAV); } return super.onOptionsItemSelected(item); } - /* - * @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if - * (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) { - * mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); - * } - */ @Override public void onBackPressed() { if (mMenu.isMenuShowing()) { - // mMenu.showContent(); mMenu.toggle(true); } if (mWebView.canGoBack()) { @@ -300,7 +360,10 @@ protected void onActivityResult(int requestCode, int requestResult, if (requestResult == RESULT_OK) { mWebView.loadUrl(intent.getStringExtra(EXTRA_URL)); } + } else if (requestCode == REQUEST_FAV) { + if (requestResult == RESULT_OK) { + mWebView.loadUrl(intent.getStringExtra(EXTRA_URL)); + } } } - } diff --git a/src/com/bloqq/activities/ReceiveActivity.java b/src/com/bloqq/activities/ReceiveActivity.java new file mode 100644 index 0000000..bab071c --- /dev/null +++ b/src/com/bloqq/activities/ReceiveActivity.java @@ -0,0 +1,194 @@ +package com.bloqq.activities; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.view.MenuItemCompat; +import android.support.v4.view.MenuItemCompat.OnActionExpandListener; +import android.support.v7.app.ActionBarActivity; +import android.util.Log; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnFocusChangeListener; +import android.view.Window; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.webkit.WebChromeClient; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.bloqq.BloqqWebView; +import com.bloqq.R; +import com.bloqq.cache.App; +import com.bloqq.edits.AddressUrlEdit; +import com.bloqq.sqlite.UpdateHistDbTask; + +public class ReceiveActivity extends ActionBarActivity { + + private BloqqWebView mWebView; + private String mCurrentUrl; + + @SuppressLint("SetJavaScriptEnabled") + @Override + protected void onCreate(Bundle savedInstanceState) { + + getWindow().requestFeature(Window.FEATURE_PROGRESS); + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + if (getIntent().getAction() != null) { + if (getIntent().getAction().equals(Intent.ACTION_VIEW)) { + Intent data = getIntent(); + mCurrentUrl = data.getData().toString(); + Log.i("DEBUG", "URL: " + mCurrentUrl); + } + } + + mWebView = (BloqqWebView) findViewById(R.id.webPage); + mWebView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + App app = (App) getApplication(); + if (!app.isOnline()) { + Toast toast = Toast.makeText(getApplicationContext(), + "Internet connection problems", Toast.LENGTH_LONG); + toast.setGravity(Gravity.CENTER, 0, 0); + toast.show(); + } + if (url.contains("oauth_verifier")) { + Uri uri = Uri.parse(url); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + intent.addCategory(Intent.CATEGORY_BROWSABLE); + intent.setData(uri); + startActivity(intent); + finish(); + return true; + } else if (url.contains("denied")) { + Toast.makeText(getApplicationContext(), + "Access to account denied", Toast.LENGTH_LONG) + .show(); + finish(); + return true; + } + return super.shouldOverrideUrlLoading(view, url); + } + + @Override + public void onPageFinished(WebView view, String url) { + mCurrentUrl = url; + super.onPageFinished(view, url); + findViewById(R.id.main_layout).requestFocus(); + new UpdateHistDbTask(getApplicationContext()).execute(mWebView + .copyBackForwardList()); + } + }); + + mWebView.getSettings().setJavaScriptEnabled(true); + mWebView.getSettings().setBuiltInZoomControls(true); + mWebView.getSettings().setDefaultFixedFontSize(10); + final Activity activity = this; + mWebView.setWebChromeClient(new WebChromeClient() { + @Override + public void onProgressChanged(WebView view, int newProgress) { + activity.setProgress(newProgress * 100); + } + }); + + mWebView.loadUrl(mCurrentUrl); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.main, menu); + MenuItem item = menu.findItem(R.id.action_go); + MenuItemCompat.setOnActionExpandListener(item, + new OnActionExpandListener() { + + @Override + public boolean onMenuItemActionExpand(MenuItem item) { + + final View edit = MenuItemCompat.getActionView(item); + if (edit.getClass().getSimpleName() + .equals(AddressUrlEdit.class.getSimpleName())) { + AddressUrlEdit uInput = (AddressUrlEdit) edit; + uInput.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, + int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_GO) { + String url = ((AddressUrlEdit) edit) + .getText().toString(); + if (url.startsWith("http://") + || url.startsWith("https://")) { + mCurrentUrl = url; + mWebView.loadUrl(mCurrentUrl); + } else { + mCurrentUrl = "http://google.com/search?q=" + + url; + mWebView.loadUrl(mCurrentUrl); + } + return true; + } + return false; + } + }); + uInput.setOnFocusChangeListener(new OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, + boolean hasFocus) { + if (v.getId() == R.id.action_go + && !hasFocus) { + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow( + edit.getWindowToken(), 0); + } + } + }); + ((AddressUrlEdit) edit).setText(mCurrentUrl); + edit.clearFocus(); + } + + return true; + } + + @Override + public boolean onMenuItemActionCollapse(MenuItem item) { + return true; + } + }); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + int id = item.getItemId(); + if (id == R.id.go_button) { + View go = findViewById(R.id.action_go); + if (go instanceof EditText) { + String url = ((AddressUrlEdit) go).getText().toString(); + if (url.startsWith("http://") || url.startsWith("https://")) { + mCurrentUrl = url; + mWebView.loadUrl(mCurrentUrl); + } else { + mCurrentUrl = "http://google.com/search?q=" + url; + mWebView.loadUrl(mCurrentUrl); + } + } else { + mWebView.loadUrl(mCurrentUrl); + } + return true; + } + return super.onOptionsItemSelected(item); + } + +} diff --git a/src/com/bloqq/activities/SettingsActivity.java b/src/com/bloqq/activities/SettingsActivity.java index 8ccf684..e14db03 100755 --- a/src/com/bloqq/activities/SettingsActivity.java +++ b/src/com/bloqq/activities/SettingsActivity.java @@ -1,9 +1,15 @@ package com.bloqq.activities; +import android.content.SharedPreferences.Editor; import android.os.Bundle; +import android.preference.EditTextPreference; +import android.preference.Preference; +import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceActivity; +import android.util.Log; import com.bloqq.R; +import com.bloqq.sqlite.BloqqDBHelper; public class SettingsActivity extends PreferenceActivity { @SuppressWarnings("deprecation") @@ -13,6 +19,48 @@ protected void onCreate(Bundle savedInstanceState) { addPreferencesFromResource(R.xml.preferences); // getSupportFragmentManager().beginTransaction() // .replace(android.R.id.content, new SettingFragment()).commit(); + EditTextPreference homePage = (EditTextPreference) findPreference("homepage"); + homePage.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, + Object newValue) { + String newUrl = null; + String url = newValue.toString(); + Log.i("DEBUG", url); + if (url.startsWith("http://") || url.startsWith("https://")) { + newUrl = url; + } else { + newUrl = "http://" + url; + } + Editor editor = preference.getEditor(); + editor.putString("homepage", newUrl); + editor.commit(); + return false; + } + }); + + Preference clearHistButton = findPreference("button_clear_hist"); + clearHistButton + .setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference pref) { + getContentResolver().delete( + BloqqDBHelper.Hist.CONTENT_URI_HIST_DB, + "1 = 1", null); + return true; + } + }); + Preference clearFavButton = findPreference("button_clear_fav"); + clearFavButton + .setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference pref) { + getContentResolver().delete( + BloqqDBHelper.Fav.CONTENT_URI_FAV_DB, "1 = 1", + null); + return true; + } + }); } } diff --git a/src/com/bloqq/activities/SettingsFragment.java b/src/com/bloqq/activities/SettingsFragment.java deleted file mode 100755 index a968541..0000000 --- a/src/com/bloqq/activities/SettingsFragment.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.bloqq.activities; - -import com.bloqq.R; - -import android.annotation.TargetApi; -import android.os.Build; -import android.os.Bundle; -import android.preference.PreferenceFragment; - -@TargetApi(Build.VERSION_CODES.HONEYCOMB) -public class SettingsFragment extends PreferenceFragment { - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // Load the preferences from an XML resource - addPreferencesFromResource(R.xml.preferences); - } -} diff --git a/src/com/bloqq/cache/App.java b/src/com/bloqq/cache/App.java index 1f498f7..7a0bdb2 100755 --- a/src/com/bloqq/cache/App.java +++ b/src/com/bloqq/cache/App.java @@ -1,6 +1,6 @@ package com.bloqq.cache; -import com.bloqq.sqlite.HistDBHelper; +import com.bloqq.sqlite.BloqqDBHelper; import android.app.Application; import android.content.Context; @@ -15,7 +15,7 @@ public class App extends Application { private static SQLiteDatabase sDb; - private static HistDBHelper sHelper; + private static BloqqDBHelper sHelper; @Override public void onCreate() { @@ -23,8 +23,12 @@ public void onCreate() { createDb(); - sDiskCache = new DiskCache(getApplicationContext(), "icons", - 10 * 1024 * 1024, CompressFormat.JPEG, 100); + try { + sDiskCache = new DiskCache(getApplicationContext(), "icons", + 10 * 1024 * 1024, CompressFormat.JPEG, 100); + } catch (Exception e) { + e.printStackTrace(); + } } public DiskCache getDiskCache() { @@ -42,7 +46,7 @@ public SQLiteDatabase getDB() { } public void createDb() { - sHelper = new HistDBHelper(this); + sHelper = new BloqqDBHelper(this); sDb = sHelper.getWritableDatabase(); } } diff --git a/src/com/bloqq/edits/AddressUrlEdit.java b/src/com/bloqq/edits/AddressUrlEdit.java index 6d18150..fdaa014 100755 --- a/src/com/bloqq/edits/AddressUrlEdit.java +++ b/src/com/bloqq/edits/AddressUrlEdit.java @@ -19,18 +19,13 @@ public AddressUrlEdit(Context context) { this.setInputType(InputType.TYPE_CLASS_TEXT); this.setImeOptions(EditorInfo.TYPE_TEXT_VARIATION_URI); - // this.setBackgroundColor(Color.LTGRAY); - this.setShadowLayer(4.0f, 1.0f, 1.0f, Color.WHITE); this.setTextColor(0xff000000); - // MainActivity ma = ((MainActivity)context).getHomepage(); SharedPreferences prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE); - Log.i("DEBUG", "1"); this.setText(prefs .getString(MainActivity.HOMEPAGE, "http://google.com")); - Log.i("DEBUG", "2"); } public AddressUrlEdit(Context context, AttributeSet attrs) { @@ -38,9 +33,5 @@ public AddressUrlEdit(Context context, AttributeSet attrs) { this.setImeActionLabel("Go", EditorInfo.IME_ACTION_GO); this.setInputType(InputType.TYPE_CLASS_TEXT); this.setImeOptions(EditorInfo.TYPE_TEXT_VARIATION_URI); - // SharedPreferences prefs = context.getSharedPreferences("settings", - // Context.MODE_PRIVATE); - // this.setText(prefs - // .getString(MainActivity.HOMEPAGE, "http://google.com")); } } diff --git a/src/com/bloqq/edits/BlockUrlEdit.java b/src/com/bloqq/edits/BlockUrlEdit.java index 80981f9..50aa117 100755 --- a/src/com/bloqq/edits/BlockUrlEdit.java +++ b/src/com/bloqq/edits/BlockUrlEdit.java @@ -32,30 +32,26 @@ public BlockUrlEdit(Context context, int position) { this.setLayoutParams(p); this.setBackgroundColor(Color.LTGRAY); - // this.setShadowLayer(2.0f, 0.0f, 0.0f, 0xffff77ff); - // this.setTextColor(0xffffffff); this.setShadowLayer(4.0f, 2.0f, 2.0f, 0xff000000); this.setTextColor(0xffffffff); - // this.setTextColor(Color.BLACK); - Field f = null; try { f = TextView.class.getDeclaredField("mCursorDrawableRes"); + f.setAccessible(true); + try { + f.set(this, R.drawable.cursor); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } } catch (NoSuchFieldException e) { e.printStackTrace(); } - f.setAccessible(true); - try { - f.set(this, R.drawable.cursor); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } + this.requestFocus(); - // MainActivity ma = ((MainActivity)context).getHomepage(); SharedPreferences prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE); this.setText(prefs.getString("uri" + mPosition, "http://")); diff --git a/src/com/bloqq/sqlite/HistContentProvider.java b/src/com/bloqq/sqlite/BloqqContentProvider.java similarity index 88% rename from src/com/bloqq/sqlite/HistContentProvider.java rename to src/com/bloqq/sqlite/BloqqContentProvider.java index 8af8f17..694ab2f 100644 --- a/src/com/bloqq/sqlite/HistContentProvider.java +++ b/src/com/bloqq/sqlite/BloqqContentProvider.java @@ -9,7 +9,7 @@ import com.bloqq.cache.App; -public class HistContentProvider extends ContentProvider { +public class BloqqContentProvider extends ContentProvider { @Override public boolean onCreate() { @@ -19,13 +19,11 @@ public boolean onCreate() { @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { - // Log.i("DEBUG", "query " + uri.toString()); - Log.i("DEBUG", "DB select.."); App app = (App) getContext(); SQLiteDatabase db = app.getDB(); Cursor cur = db.query(uri.getPath().replace('/', ' '), projection, - selection, selectionArgs, null, null, - HistDBHelper.Hist.COLUMN_URL + " DESC"); + selection, selectionArgs, null, null, sortOrder); + // BloqqDBHelper.Hist.COLUMN_URL + " DESC"); return cur; } diff --git a/src/com/bloqq/sqlite/HistDBHelper.java b/src/com/bloqq/sqlite/BloqqDBHelper.java similarity index 53% rename from src/com/bloqq/sqlite/HistDBHelper.java rename to src/com/bloqq/sqlite/BloqqDBHelper.java index 5f34bd1..90acbf3 100644 --- a/src/com/bloqq/sqlite/HistDBHelper.java +++ b/src/com/bloqq/sqlite/BloqqDBHelper.java @@ -7,23 +7,37 @@ import android.provider.BaseColumns; import android.util.Log; -public class HistDBHelper extends SQLiteOpenHelper { +public class BloqqDBHelper extends SQLiteOpenHelper { public static final class Hist implements BaseColumns { public static final Uri CONTENT_URI_HIST_DB = Uri - .parse("content://com.bloqq.sqlite.HistContentProvider/hist"); + .parse("content://com.bloqq.sqlite.BloqqContentProvider/hist"); public static final String TABLE_NAME_HIST = "hist"; public static final String COLUMN_TITLE = "title"; public static final String COLUMN_URL = "url"; + public static final String COLUMN_DATE = "date"; } - private static final String DB_NAME = "hist.db"; + public static final class Fav implements BaseColumns { + public static final Uri CONTENT_URI_FAV_DB = Uri + .parse("content://com.bloqq.sqlite.BloqqContentProvider/fav"); + public static final String TABLE_NAME_FAV = "fav"; + public static final String COLUMN_TITLE = "title"; + public static final String COLUMN_URL = "url"; + } + + private static final String DB_NAME = "bloqq.db"; private static final int VERSION = 1; private static final String CREATE_TABLE_HOME = "CREATE TABLE " + Hist.TABLE_NAME_HIST + "(" + Hist._ID + " INTEGER PRIMARY KEY, " - + Hist.COLUMN_TITLE + " TEXT, " + Hist.COLUMN_URL + " TEXT)"; + + Hist.COLUMN_TITLE + " TEXT, " + Hist.COLUMN_DATE + " TEXT, " + + Hist.COLUMN_URL + " TEXT)"; + + private static final String CREATE_TABLE_FAV = "CREATE TABLE " + + Fav.TABLE_NAME_FAV + "(" + Fav._ID + " INTEGER PRIMARY KEY, " + + Fav.COLUMN_TITLE + " TEXT, " + Fav.COLUMN_URL + " TEXT)"; - public HistDBHelper(Context context) { + public BloqqDBHelper(Context context) { super(context, DB_NAME, null, VERSION); } @@ -31,6 +45,7 @@ public HistDBHelper(Context context) { public void onCreate(SQLiteDatabase db) { Log.i("DEBUG", "onCreate DB"); db.execSQL(CREATE_TABLE_HOME); + db.execSQL(CREATE_TABLE_FAV); } @Override diff --git a/src/com/bloqq/sqlite/UpdateFavDbTask.java b/src/com/bloqq/sqlite/UpdateFavDbTask.java new file mode 100644 index 0000000..bfcb10d --- /dev/null +++ b/src/com/bloqq/sqlite/UpdateFavDbTask.java @@ -0,0 +1,30 @@ +package com.bloqq.sqlite; + +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.os.AsyncTask; + +public class UpdateFavDbTask extends AsyncTask { + + private final Context mContext; + + public UpdateFavDbTask(Context context) { + mContext = context; + } + + @Override + protected Void doInBackground(String... params) { + String favTitle = params[0]; + String favUrl = params[1]; + ContentResolver resolver = mContext.getContentResolver(); + ContentValues values = new ContentValues(); + if (favUrl != null) { + values.put(BloqqDBHelper.Fav.COLUMN_TITLE, favTitle); + values.put(BloqqDBHelper.Fav.COLUMN_URL, favUrl); + + resolver.insert(BloqqDBHelper.Fav.CONTENT_URI_FAV_DB, values); + } + return null; + } +} diff --git a/src/com/bloqq/sqlite/UpdateHistDbTask.java b/src/com/bloqq/sqlite/UpdateHistDbTask.java index 773935e..c36b2ad 100644 --- a/src/com/bloqq/sqlite/UpdateHistDbTask.java +++ b/src/com/bloqq/sqlite/UpdateHistDbTask.java @@ -4,6 +4,8 @@ import android.content.ContentValues; import android.content.Context; import android.os.AsyncTask; +import android.text.format.Time; +import android.util.Log; import android.webkit.WebBackForwardList; public class UpdateHistDbTask extends AsyncTask { @@ -12,27 +14,35 @@ public class UpdateHistDbTask extends AsyncTask public UpdateHistDbTask(Context context) { mContext = context; - } + } @Override protected Void doInBackground(WebBackForwardList... params) { WebBackForwardList hist = params[0]; ContentResolver resolver = mContext.getContentResolver(); ContentValues values = new ContentValues(); - /* - * for (int i = 0; i < hist.getSize(); i++) { - * values.put(HistDBHelper.Hist.COLUMN_TITLE, hist.getItemAtIndex(i) - * .getTitle()); values.put(HistDBHelper.Hist.COLUMN_URL, - * hist.getItemAtIndex(i) .getOriginalUrl()); - * - * resolver.insert(HistDBHelper.Hist.CONTENT_URI_HIST_DB, values); } - */ - values.put(HistDBHelper.Hist.COLUMN_TITLE, hist.getCurrentItem() - .getTitle()); - values.put(HistDBHelper.Hist.COLUMN_URL, hist.getCurrentItem() - .getOriginalUrl()); - - resolver.insert(HistDBHelper.Hist.CONTENT_URI_HIST_DB, values); + + if (hist.getCurrentItem() != null) { + Time today = new Time(Time.getCurrentTimezone()); + today.setToNow(); + String date = checkZero(today.monthDay) + "." + + checkZero(today.month) + "." + today.year; + String time = checkZero(today.hour) + ":" + checkZero(today.minute) + + ":" + checkZero(today.second); + String datetime = date + " " + time; + Log.i("DEBUG", datetime); + values.put(BloqqDBHelper.Hist.COLUMN_TITLE, hist.getCurrentItem() + .getTitle()); + values.put(BloqqDBHelper.Hist.COLUMN_URL, hist.getCurrentItem() + .getOriginalUrl()); + values.put(BloqqDBHelper.Hist.COLUMN_DATE, datetime); + + resolver.insert(BloqqDBHelper.Hist.CONTENT_URI_HIST_DB, values); + } return null; } + + private String checkZero(int check) { + return check > 9 ? String.valueOf(check) : "0" + String.valueOf(check); + } }