Add back importing from stock browser and an attempt to add import from chrome
import from the default built in browser, stock browser ususally, but chrome on marshmallow and above.
This commit is contained in:
parent
a71a8c3493
commit
7cec3bd6e4
@ -1,13 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2014 A.C.R. Development -->
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Copyright 2014 A.C.R. Development -->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="acr.browser.lightning" >
|
||||
package="acr.browser.lightning">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" />
|
||||
<uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS" />
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.location.gps"
|
||||
@ -24,14 +25,14 @@
|
||||
android:allowBackup="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name" >
|
||||
android:label="@string/app_name">
|
||||
<activity
|
||||
android:name=".activity.MainActivity"
|
||||
android:alwaysRetainTaskState="true"
|
||||
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
|
||||
android:label="@string/app_name"
|
||||
android:launchMode="singleTask"
|
||||
android:theme="@style/Theme.LightTheme" >
|
||||
android:theme="@style/Theme.LightTheme">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
@ -96,7 +97,7 @@
|
||||
android:name=".activity.SettingsActivity"
|
||||
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
|
||||
android:label="@string/settings"
|
||||
android:theme="@style/Theme.SettingsTheme" >
|
||||
android:theme="@style/Theme.SettingsTheme">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SETTINGS" />
|
||||
|
||||
@ -109,9 +110,9 @@
|
||||
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
|
||||
android:label="@string/app_name"
|
||||
android:launchMode="singleTask"
|
||||
android:process=":incognito"
|
||||
android:theme="@style/Theme.DarkTheme"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:process=":incognito">
|
||||
android:windowSoftInputMode="stateHidden">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.INCOGNITO" />
|
||||
|
||||
@ -122,7 +123,7 @@
|
||||
android:name=".activity.ReadingActivity"
|
||||
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
|
||||
android:label="@string/reading_mode"
|
||||
android:theme="@style/Theme.SettingsTheme" >
|
||||
android:theme="@style/Theme.SettingsTheme">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.READING" />
|
||||
|
||||
|
@ -0,0 +1,141 @@
|
||||
package acr.browser.lightning.database;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.WorkerThread;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import acr.browser.lightning.utils.Utils;
|
||||
|
||||
public class BookmarkLocalSync {
|
||||
|
||||
private static final String TAG = BookmarkLocalSync.class.getSimpleName();
|
||||
|
||||
private static final String STOCK_BOOKMARKS_CONTENT = "content://browser/bookmarks";
|
||||
private static final String CHROME_BOOKMARKS_CONTENT = "content://com.android.chrome.browser/bookmarks";
|
||||
|
||||
private static final String COLUMN_TITLE = "title";
|
||||
private static final String COLUMN_URL = "url";
|
||||
private static final String COLUMN_BOOKMARK = "bookmark";
|
||||
|
||||
private Context mContext;
|
||||
|
||||
public BookmarkLocalSync(Context context) {
|
||||
mContext = context;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@WorkerThread
|
||||
public List<HistoryItem> getBookmarksFromStockBrowser() {
|
||||
List<HistoryItem> list = new ArrayList<>();
|
||||
if (!isStockSupported()) {
|
||||
return list;
|
||||
}
|
||||
Cursor cursor = getStockCursor();
|
||||
try {
|
||||
if (cursor != null) {
|
||||
for (int n = 0; n < cursor.getColumnCount(); n++) {
|
||||
Log.d(TAG, cursor.getColumnName(n));
|
||||
}
|
||||
|
||||
while (cursor.moveToNext()) {
|
||||
if (cursor.getInt(2) == 1) {
|
||||
String url = cursor.getString(0);
|
||||
String title = cursor.getString(1);
|
||||
if (url.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
if (title == null || title.isEmpty()) {
|
||||
title = Utils.getDomainName(url);
|
||||
}
|
||||
list.add(new HistoryItem(url, title));
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Utils.close(cursor);
|
||||
return list;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@WorkerThread
|
||||
public List<HistoryItem> getBookmarksFromChrome() {
|
||||
List<HistoryItem> list = new ArrayList<>();
|
||||
if (!isChromeSupported()) {
|
||||
return list;
|
||||
}
|
||||
Cursor cursor = getStockCursor();
|
||||
try {
|
||||
if (cursor != null) {
|
||||
for (int n = 0; n < cursor.getColumnCount(); n++) {
|
||||
Log.d(TAG, cursor.getColumnName(n));
|
||||
}
|
||||
|
||||
while (cursor.moveToNext()) {
|
||||
if (cursor.getInt(2) == 1) {
|
||||
String url = cursor.getString(0);
|
||||
String title = cursor.getString(1);
|
||||
if (url.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
if (title == null || title.isEmpty()) {
|
||||
title = Utils.getDomainName(url);
|
||||
}
|
||||
list.add(new HistoryItem(url, title));
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Utils.close(cursor);
|
||||
return list;
|
||||
}
|
||||
|
||||
public boolean isStockSupported() {
|
||||
Cursor cursor = getStockCursor();
|
||||
Utils.close(cursor);
|
||||
return cursor != null;
|
||||
}
|
||||
|
||||
public boolean isChromeSupported() {
|
||||
Cursor cursor = getChromeCursor();
|
||||
Utils.close(cursor);
|
||||
return cursor != null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private Cursor getChromeCursor() {
|
||||
Cursor cursor;
|
||||
Uri uri = Uri.parse(CHROME_BOOKMARKS_CONTENT);
|
||||
try {
|
||||
cursor = mContext.getContentResolver().query(uri,
|
||||
new String[]{COLUMN_URL, COLUMN_TITLE, COLUMN_BOOKMARK}, null, null, null);
|
||||
} catch (IllegalArgumentException e) {
|
||||
return null;
|
||||
}
|
||||
return cursor;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private Cursor getStockCursor() {
|
||||
Cursor cursor;
|
||||
Uri uri = Uri.parse(STOCK_BOOKMARKS_CONTENT);
|
||||
try {
|
||||
cursor = mContext.getContentResolver().query(uri,
|
||||
new String[]{COLUMN_URL, COLUMN_TITLE, COLUMN_BOOKMARK}, null, null, null);
|
||||
} catch (IllegalArgumentException e) {
|
||||
return null;
|
||||
}
|
||||
return cursor;
|
||||
}
|
||||
|
||||
}
|
@ -213,7 +213,7 @@ public class BookmarkManager {
|
||||
*
|
||||
* @param list the list of HistoryItems to add to bookmarks
|
||||
*/
|
||||
private synchronized void addBookmarkList(List<HistoryItem> list) {
|
||||
public synchronized void addBookmarkList(List<HistoryItem> list) {
|
||||
if (list == null || list.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
@ -235,6 +235,8 @@ public class DownloadHandler {
|
||||
e.printStackTrace();
|
||||
Utils.showSnackbar(activity, R.string.cannot_download);
|
||||
} catch (SecurityException e) {
|
||||
// TODO write a download utility that downloads files rather than rely on the system
|
||||
// because the system can only handle Environment.getExternal... as a path
|
||||
Utils.showSnackbar(activity, R.string.problem_location_download);
|
||||
}
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ package acr.browser.lightning.fragment;
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
@ -16,29 +17,66 @@ import android.support.v7.app.AlertDialog;
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import acr.browser.lightning.R;
|
||||
import acr.browser.lightning.app.BrowserApp;
|
||||
import acr.browser.lightning.database.BookmarkLocalSync;
|
||||
import acr.browser.lightning.database.BookmarkManager;
|
||||
import acr.browser.lightning.database.HistoryItem;
|
||||
import acr.browser.lightning.utils.PermissionsManager;
|
||||
import acr.browser.lightning.utils.Utils;
|
||||
|
||||
public class BookmarkSettingsFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener {
|
||||
|
||||
private static final String SETTINGS_EXPORT = "export_bookmark";
|
||||
private static final String SETTINGS_IMPORT = "import_bookmark";
|
||||
private static final String SETTINGS_IMPORT_BROWSER = "import_browser";
|
||||
|
||||
private Activity mActivity;
|
||||
@Inject BookmarkManager mBookmarkManager;
|
||||
@Inject
|
||||
BookmarkManager mBookmarkManager;
|
||||
private File[] mFileList;
|
||||
private String[] mFileNameList;
|
||||
private BookmarkLocalSync mSync;
|
||||
private static final String[] REQUIRED_PERMISSIONS = new String[]{
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||
};
|
||||
private static final File mPath = new File(Environment.getExternalStorageDirectory().toString());
|
||||
|
||||
private class ImportBookmarksTask extends AsyncTask<Void, Void, Integer> {
|
||||
@Override
|
||||
protected Integer doInBackground(Void... params) {
|
||||
List<HistoryItem> list = null;
|
||||
if (mSync.isStockSupported()) {
|
||||
list = mSync.getBookmarksFromStockBrowser();
|
||||
} else if (mSync.isChromeSupported()) {
|
||||
list = mSync.getBookmarksFromChrome();
|
||||
}
|
||||
int count = 0;
|
||||
if (list != null && !list.isEmpty()) {
|
||||
mBookmarkManager.addBookmarkList(list);
|
||||
count = list.size();
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Integer num) {
|
||||
super.onPostExecute(num);
|
||||
if (mActivity != null) {
|
||||
int number = num;
|
||||
final String message = mActivity.getResources().getString(R.string.message_import);
|
||||
Utils.showSnackbar(mActivity, number + " " + message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@ -56,13 +94,25 @@ public class BookmarkSettingsFragment extends PreferenceFragment implements Pref
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
mActivity = null;
|
||||
}
|
||||
|
||||
private void initPrefs() {
|
||||
|
||||
Preference exportpref = findPreference(SETTINGS_EXPORT);
|
||||
Preference importpref = findPreference(SETTINGS_IMPORT);
|
||||
Preference importStock = findPreference(SETTINGS_IMPORT_BROWSER);
|
||||
|
||||
mSync = new BookmarkLocalSync(mActivity);
|
||||
|
||||
importStock.setEnabled(mSync.isStockSupported() || mSync.isChromeSupported());
|
||||
|
||||
exportpref.setOnPreferenceClickListener(this);
|
||||
importpref.setOnPreferenceClickListener(this);
|
||||
importStock.setOnPreferenceClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -79,6 +129,9 @@ public class BookmarkSettingsFragment extends PreferenceFragment implements Pref
|
||||
createDialog();
|
||||
}
|
||||
return true;
|
||||
case SETTINGS_IMPORT_BROWSER:
|
||||
new ImportBookmarksTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
@ -8,5 +8,8 @@
|
||||
<Preference
|
||||
android:key="import_bookmark"
|
||||
android:title="@string/import_backup" />
|
||||
<Preference
|
||||
android:key="import_browser"
|
||||
android:title="@string/importbookmarks" />
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
Loading…
x
Reference in New Issue
Block a user