You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
6.9 KiB
215 lines
6.9 KiB
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 com.anthonycr.bonsai.Single; |
|
import com.anthonycr.bonsai.SingleAction; |
|
import com.anthonycr.bonsai.SingleSubscriber; |
|
|
|
import java.util.ArrayList; |
|
import java.util.List; |
|
|
|
import acr.browser.lightning.utils.Utils; |
|
|
|
public class BookmarkLocalSync { |
|
|
|
private static final String TAG = "BookmarkLocalSync"; |
|
|
|
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 CHROME_BETA_BOOKMARKS_CONTENT = "content://com.chrome.beta.browser/bookmarks"; |
|
private static final String CHROME_DEV_BOOKMARKS_CONTENT = "content://com.chrome.dev.browser/bookmarks"; |
|
|
|
private static final String COLUMN_TITLE = "title"; |
|
private static final String COLUMN_URL = "url"; |
|
private static final String COLUMN_BOOKMARK = "bookmark"; |
|
|
|
@NonNull private final Context mContext; |
|
|
|
public enum Source { |
|
STOCK, |
|
CHROME_STABLE, |
|
CHROME_BETA, |
|
CHROME_DEV |
|
} |
|
|
|
public BookmarkLocalSync(@NonNull Context context) { |
|
mContext = context; |
|
} |
|
|
|
@NonNull |
|
private List<HistoryItem> getBookmarksFromContentUri(String contentUri) { |
|
List<HistoryItem> list = new ArrayList<>(); |
|
Cursor cursor = getBrowserCursor(contentUri); |
|
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); |
|
} |
|
if (title != null) { |
|
list.add(new HistoryItem(url, title)); |
|
} |
|
} |
|
} |
|
} |
|
} catch (Exception e) { |
|
e.printStackTrace(); |
|
} |
|
Utils.close(cursor); |
|
return list; |
|
} |
|
|
|
@Nullable |
|
@WorkerThread |
|
private Cursor getBrowserCursor(String contentUri) { |
|
Cursor cursor; |
|
Uri uri = Uri.parse(contentUri); |
|
try { |
|
cursor = mContext.getContentResolver().query(uri, |
|
new String[]{COLUMN_URL, COLUMN_TITLE, COLUMN_BOOKMARK}, null, null, null); |
|
} catch (IllegalArgumentException e) { |
|
return null; |
|
} |
|
return cursor; |
|
} |
|
|
|
@NonNull |
|
public Single<List<Source>> getSupportedBrowsers() { |
|
return Single.create(new SingleAction<List<Source>>() { |
|
@Override |
|
public void onSubscribe(@NonNull SingleSubscriber<List<Source>> subscriber) { |
|
List<Source> sources = new ArrayList<>(1); |
|
if (isBrowserSupported(STOCK_BOOKMARKS_CONTENT)) { |
|
sources.add(Source.STOCK); |
|
} |
|
if (isBrowserSupported(CHROME_BOOKMARKS_CONTENT)) { |
|
sources.add(Source.CHROME_STABLE); |
|
} |
|
if (isBrowserSupported(CHROME_BETA_BOOKMARKS_CONTENT)) { |
|
sources.add(Source.CHROME_BETA); |
|
} |
|
if (isBrowserSupported(CHROME_DEV_BOOKMARKS_CONTENT)) { |
|
sources.add(Source.CHROME_DEV); |
|
} |
|
subscriber.onItem(sources); |
|
subscriber.onComplete(); |
|
} |
|
}); |
|
} |
|
|
|
private boolean isBrowserSupported(String contentUri) { |
|
Cursor cursor = getBrowserCursor(contentUri); |
|
boolean supported = cursor != null; |
|
Utils.close(cursor); |
|
return supported; |
|
} |
|
|
|
@NonNull |
|
@WorkerThread |
|
public List<HistoryItem> getBookmarksFromStockBrowser() { |
|
return getBookmarksFromContentUri(STOCK_BOOKMARKS_CONTENT); |
|
} |
|
|
|
@NonNull |
|
@WorkerThread |
|
public List<HistoryItem> getBookmarksFromChrome() { |
|
return getBookmarksFromContentUri(CHROME_BOOKMARKS_CONTENT); |
|
} |
|
|
|
@NonNull |
|
@WorkerThread |
|
public List<HistoryItem> getBookmarksFromChromeBeta() { |
|
return getBookmarksFromContentUri(CHROME_BETA_BOOKMARKS_CONTENT); |
|
} |
|
|
|
@NonNull |
|
@WorkerThread |
|
public List<HistoryItem> getBookmarksFromChromeDev() { |
|
return getBookmarksFromContentUri(CHROME_DEV_BOOKMARKS_CONTENT); |
|
} |
|
|
|
@NonNull |
|
public Single<Boolean> isBrowserImportSupported() { |
|
return Single.create(new SingleAction<Boolean>() { |
|
@Override |
|
public void onSubscribe(@NonNull SingleSubscriber<Boolean> subscriber) { |
|
Cursor chrome = getChromeCursor(); |
|
Utils.close(chrome); |
|
Cursor dev = getChromeDevCursor(); |
|
Utils.close(dev); |
|
Cursor beta = getChromeBetaCursor(); |
|
Cursor stock = getStockCursor(); |
|
Utils.close(stock); |
|
|
|
subscriber.onItem(chrome != null || dev != null || beta != null || stock != null); |
|
subscriber.onComplete(); |
|
} |
|
}); |
|
} |
|
|
|
@Nullable |
|
@WorkerThread |
|
private Cursor getChromeBetaCursor() { |
|
return getBrowserCursor(CHROME_BETA_BOOKMARKS_CONTENT); |
|
} |
|
|
|
@Nullable |
|
@WorkerThread |
|
private Cursor getChromeDevCursor() { |
|
return getBrowserCursor(CHROME_DEV_BOOKMARKS_CONTENT); |
|
} |
|
|
|
@Nullable |
|
@WorkerThread |
|
private Cursor getChromeCursor() { |
|
return getBrowserCursor(CHROME_BOOKMARKS_CONTENT); |
|
} |
|
|
|
@Nullable |
|
@WorkerThread |
|
private Cursor getStockCursor() { |
|
return getBrowserCursor(STOCK_BOOKMARKS_CONTENT); |
|
} |
|
|
|
public void printAllColumns() { |
|
printColumns(CHROME_BETA_BOOKMARKS_CONTENT); |
|
printColumns(CHROME_BOOKMARKS_CONTENT); |
|
printColumns(CHROME_DEV_BOOKMARKS_CONTENT); |
|
printColumns(STOCK_BOOKMARKS_CONTENT); |
|
} |
|
|
|
private void printColumns(String contentProvider) { |
|
Cursor cursor = null; |
|
Log.e(TAG, contentProvider); |
|
Uri uri = Uri.parse(contentProvider); |
|
try { |
|
cursor = mContext.getContentResolver().query(uri, null, null, null, null); |
|
} catch (Exception e) { |
|
Log.e(TAG, "Error Occurred", e); |
|
} |
|
if (cursor != null) { |
|
for (int n = 0; n < cursor.getColumnCount(); n++) { |
|
Log.d(TAG, cursor.getColumnName(n)); |
|
} |
|
cursor.close(); |
|
} |
|
} |
|
|
|
}
|
|
|