@ -14,7 +14,6 @@ import android.widget.EditText;
@@ -14,7 +14,6 @@ import android.widget.EditText;
import com.anthonycr.bonsai.CompletableOnSubscribe ;
import com.anthonycr.bonsai.Schedulers ;
import com.squareup.otto.Bus ;
import java.util.List ;
@ -23,10 +22,9 @@ import javax.inject.Inject;
@@ -23,10 +22,9 @@ import javax.inject.Inject;
import acr.browser.lightning.R ;
import acr.browser.lightning.activity.MainActivity ;
import acr.browser.lightning.app.BrowserApp ;
import acr.browser.lightning.bus.BookmarkEvents ;
import acr.browser.lightning.bus.BrowserEvents ;
import acr.browser.lightning.constant.BookmarkPage ;
import acr.browser.lightning.constant.Constants ;
import acr.browser.lightning.controller.UIController ;
import acr.browser.lightning.database.BookmarkManager ;
import acr.browser.lightning.database.HistoryItem ;
import acr.browser.lightning.database.HistoryModel ;
@ -40,9 +38,14 @@ import acr.browser.lightning.utils.Utils;
@@ -40,9 +38,14 @@ import acr.browser.lightning.utils.Utils;
* /
public class LightningDialogBuilder {
public enum NewTab {
FOREGROUND ,
BACKGROUND ,
INCOGNITO
}
@Inject BookmarkManager mBookmarkManager ;
@Inject PreferenceManager mPreferenceManager ;
@Inject Bus mEventBus ;
@Inject
public LightningDialogBuilder ( ) {
@ -53,10 +56,12 @@ public class LightningDialogBuilder {
@@ -53,10 +56,12 @@ public class LightningDialogBuilder {
* Show the appropriated dialog for the long pressed link . It means that we try to understand
* if the link is relative to a bookmark or is just a folder .
*
* @param context used to show the dialog
* @param url the long pressed url
* @param activity used to show the dialog
* @param url the long pressed url
* /
public void showLongPressedDialogForBookmarkUrl ( @NonNull final Activity context , @NonNull final String url ) {
public void showLongPressedDialogForBookmarkUrl ( @NonNull final Activity activity ,
@NonNull UIController uiController ,
@NonNull final String url ) {
final HistoryItem item ;
if ( url . startsWith ( Constants . FILE ) & & url . endsWith ( BookmarkPage . FILENAME ) ) {
// TODO hacky, make a better bookmark mechanism in the future
@ -73,56 +78,60 @@ public class LightningDialogBuilder {
@@ -73,56 +78,60 @@ public class LightningDialogBuilder {
}
if ( item ! = null ) {
if ( item . isFolder ( ) ) {
showBookmarkFolderLongPressedDialog ( context , item ) ;
showBookmarkFolderLongPressedDialog ( activity , uiController , item ) ;
} else {
showLongPressedDialogForBookmarkUrl ( context , item ) ;
showLongPressedDialogForBookmarkUrl ( activity , uiController , item ) ;
}
}
}
public void showLongPressedDialogForBookmarkUrl ( @NonNull final Activity activity , @NonNull final HistoryItem item ) {
public void showLongPressedDialogForBookmarkUrl ( @NonNull final Activity activity ,
@NonNull final UIController uiController ,
@NonNull final HistoryItem item ) {
BrowserDialog . show ( activity , R . string . action_bookmarks ,
new BrowserDialog . Item ( R . string . dialog_open_new_tab ) {
@Override
public void onClick ( ) {
mEventBus . post ( new BrowserEvents . OpenUrlInNewTab ( item . getUrl ( ) , BrowserEvents . OpenUrlInNewTab . Location . NEW_TAB ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_background_tab ) {
@Override
public void onClick ( ) {
mEventBus . post ( new BrowserEvents . OpenUrlInNewTab ( item . getUrl ( ) , BrowserEvents . OpenUrlInNewTab . Location . BACKGROUND ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_incognito_tab , activity instanceof MainActivity ) {
@Override
public void onClick ( ) {
mEventBus . post ( new BrowserEvents . OpenUrlInNewTab ( item . getUrl ( ) , BrowserEvents . OpenUrlInNewTab . Location . INCOGNITO ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_copy_link ) {
@Override
public void onClick ( ) {
BrowserApp . copyToClipboard ( activity , item . getUrl ( ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_remove_bookmark ) {
@Override
public void onClick ( ) {
if ( mBookmarkManager . deleteBookmark ( item ) ) {
mEventBus . post ( new BookmarkEvents . Deleted ( item ) ) ;
}
new BrowserDialog . Item ( R . string . dialog_open_new_tab ) {
@Override
public void onClick ( ) {
uiController . handleNewTab ( NewTab . FOREGROUND , item . getUrl ( ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_background_tab ) {
@Override
public void onClick ( ) {
uiController . handleNewTab ( NewTab . BACKGROUND , item . getUrl ( ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_incognito_tab , activity instanceof MainActivity ) {
@Override
public void onClick ( ) {
uiController . handleNewTab ( NewTab . INCOGNITO , item . getUrl ( ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_copy_link ) {
@Override
public void onClick ( ) {
BrowserApp . copyToClipboard ( activity , item . getUrl ( ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_remove_bookmark ) {
@Override
public void onClick ( ) {
if ( mBookmarkManager . deleteBookmark ( item ) ) {
uiController . handleBookmarkDeleted ( item ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_edit_bookmark ) {
@Override
public void onClick ( ) {
showEditBookmarkDialog ( activity , item ) ;
}
} ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_edit_bookmark ) {
@Override
public void onClick ( ) {
showEditBookmarkDialog ( activity , uiController , item ) ;
}
} ) ;
}
private void showEditBookmarkDialog ( @NonNull final Activity activity , @NonNull final HistoryItem item ) {
private void showEditBookmarkDialog ( @NonNull final Activity activity ,
@NonNull final UIController uiController ,
@NonNull final HistoryItem item ) {
final AlertDialog . Builder editBookmarkDialog = new AlertDialog . Builder ( activity ) ;
editBookmarkDialog . setTitle ( R . string . title_edit_bookmark ) ;
final View dialogLayout = View . inflate ( activity , R . layout . dialog_edit_bookmark , null ) ;
@ -131,175 +140,185 @@ public class LightningDialogBuilder {
@@ -131,175 +140,185 @@ public class LightningDialogBuilder {
final EditText getUrl = ( EditText ) dialogLayout . findViewById ( R . id . bookmark_url ) ;
getUrl . setText ( item . getUrl ( ) ) ;
final AutoCompleteTextView getFolder =
( AutoCompleteTextView ) dialogLayout . findViewById ( R . id . bookmark_folder ) ;
( AutoCompleteTextView ) dialogLayout . findViewById ( R . id . bookmark_folder ) ;
getFolder . setHint ( R . string . folder ) ;
getFolder . setText ( item . getFolder ( ) ) ;
final List < String > folders = mBookmarkManager . getFolderTitles ( ) ;
final ArrayAdapter < String > suggestionsAdapter = new ArrayAdapter < > ( activity ,
android . R . layout . simple_dropdown_item_1line , folders ) ;
android . R . layout . simple_dropdown_item_1line , folders ) ;
getFolder . setThreshold ( 1 ) ;
getFolder . setAdapter ( suggestionsAdapter ) ;
editBookmarkDialog . setView ( dialogLayout ) ;
editBookmarkDialog . setPositiveButton ( activity . getString ( R . string . action_ok ) ,
new DialogInterface . OnClickListener ( ) {
new DialogInterface . OnClickListener ( ) {
@Override
public void onClick ( DialogInterface dialog , int which ) {
HistoryItem editedItem = new HistoryItem ( ) ;
editedItem . setTitle ( getTitle . getText ( ) . toString ( ) ) ;
editedItem . setUrl ( getUrl . getText ( ) . toString ( ) ) ;
editedItem . setUrl ( getUrl . getText ( ) . toString ( ) ) ;
editedItem . setFolder ( getFolder . getText ( ) . toString ( ) ) ;
mBookmarkManager . editBookmark ( item , editedItem ) ;
mEventBus . post ( new BookmarkEvents . BookmarkChanged ( ) ) ;
}
} ) ;
@Override
public void onClick ( DialogInterface dialog , int which ) {
HistoryItem editedItem = new HistoryItem ( ) ;
editedItem . setTitle ( getTitle . getText ( ) . toString ( ) ) ;
editedItem . setUrl ( getUrl . getText ( ) . toString ( ) ) ;
editedItem . setUrl ( getUrl . getText ( ) . toString ( ) ) ;
editedItem . setFolder ( getFolder . getText ( ) . toString ( ) ) ;
mBookmarkManager . editBookmark ( item , editedItem ) ;
uiController . handleBookmarksChange ( ) ;
}
} ) ;
Dialog dialog = editBookmarkDialog . show ( ) ;
BrowserDialog . setDialogSize ( activity , dialog ) ;
}
public void showBookmarkFolderLongPressedDialog ( @NonNull final Activity activity , @NonNull final HistoryItem item ) {
public void showBookmarkFolderLongPressedDialog ( @NonNull final Activity activity ,
@NonNull final UIController uiController ,
@NonNull final HistoryItem item ) {
BrowserDialog . show ( activity , R . string . action_folder ,
new BrowserDialog . Item ( R . string . dialog_rename_folder ) {
@Override
public void onClick ( ) {
showRenameFolderDialog ( activity , item ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_remove_folder ) {
@Override
public void onClick ( ) {
mBookmarkManager . deleteFolder ( item . getTitle ( ) ) ;
mEventBus . post ( new BookmarkEvents . Deleted ( item ) ) ;
}
} ) ;
new BrowserDialog . Item ( R . string . dialog_rename_folder ) {
@Override
public void onClick ( ) {
showRenameFolderDialog ( activity , uiController , item ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_remove_folder ) {
@Override
public void onClick ( ) {
mBookmarkManager . deleteFolder ( item . getTitle ( ) ) ;
uiController . handleBookmark Deleted( item ) ;
}
} ) ;
}
private void showRenameFolderDialog ( @NonNull final Activity activity , @NonNull final HistoryItem item ) {
private void showRenameFolderDialog ( @NonNull final Activity activity ,
@NonNull final UIController uiController ,
@NonNull final HistoryItem item ) {
BrowserDialog . showEditText ( activity , R . string . title_rename_folder ,
R . string . hint_title , item . getTitle ( ) ,
R . string . action_ok , new BrowserDialog . EditorListener ( ) {
@Override
public void onClick ( @NonNull String text ) {
if ( ! TextUtils . isEmpty ( text ) ) {
final String oldTitle = item . getTitle ( ) ;
final HistoryItem editedItem = new HistoryItem ( ) ;
editedItem . setTitle ( text ) ;
editedItem . setUrl ( Constants . FOLDER + text ) ;
editedItem . setFolder ( item . getFolder ( ) ) ;
editedItem . setIsFolder ( true ) ;
mBookmarkManager . renameFolder ( oldTitle , text ) ;
mEventBus . post ( new BookmarkEvents . BookmarkChanged ( ) ) ;
}
R . string . hint_title , item . getTitle ( ) ,
R . string . action_ok , new BrowserDialog . EditorListener ( ) {
@Override
public void onClick ( @NonNull String text ) {
if ( ! TextUtils . isEmpty ( text ) ) {
final String oldTitle = item . getTitle ( ) ;
final HistoryItem editedItem = new HistoryItem ( ) ;
editedItem . setTitle ( text ) ;
editedItem . setUrl ( Constants . FOLDER + text ) ;
editedItem . setFolder ( item . getFolder ( ) ) ;
editedItem . setIsFolder ( true ) ;
mBookmarkManager . renameFolder ( oldTitle , text ) ;
uiController . handleBookmarksChange ( ) ;
}
} ) ;
}
} ) ;
}
public void showLongPressedHistoryLinkDialog ( @NonNull final Activity activity , @NonNull final String url ) {
public void showLongPressedHistoryLinkDialog ( @NonNull final Activity activity ,
@NonNull final UIController uiController ,
@NonNull final String url ) {
BrowserDialog . show ( activity , R . string . action_history ,
new BrowserDialog . Item ( R . string . dialog_open_new_tab ) {
@Override
public void onClick ( ) {
mEventBus . post ( new BrowserEvents . OpenUrlInNewTab ( url ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_background_tab ) {
@Override
public void onClick ( ) {
mEventBus . post ( new BrowserEvents . OpenUrlIn NewTab ( url , BrowserEvents . OpenUrlIn NewTab. Location . BACKGROUND ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_incognito_tab , activity instanceof MainActivity ) {
@Override
public void onClick ( ) {
mEventBus . post ( new BrowserEvents . OpenUrlIn NewTab ( url , BrowserEvents . OpenUrlIn NewTab. Location . INCOGNITO ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_copy_link ) {
@Override
public void onClick ( ) {
BrowserApp . copyToClipboard ( activity , url ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_remove_from_history ) {
@Override
public void onClick ( ) {
HistoryModel . deleteHistoryItem ( url )
. subscribeOn ( Schedulers . io ( ) )
. observeOn ( Schedulers . main ( ) )
. subscribe ( new CompletableOnSubscribe ( ) {
@Override
public void onComplete ( ) {
mEventBus . post ( new BrowserEvents . OpenHistoryInCurrentTab ( ) ) ;
}
} ) ;
}
} ) ;
new BrowserDialog . Item ( R . string . dialog_open_new_tab ) {
@Override
public void onClick ( ) {
uiController . handleNewTab ( NewTab . FOREGROUND , url ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_background_tab ) {
@Override
public void onClick ( ) {
uiController . handle NewTab( NewTab . BACKGROUND , url ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_incognito_tab , activity instanceof MainActivity ) {
@Override
public void onClick ( ) {
uiController . handle NewTab( NewTab . INCOGNITO , url ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_copy_link ) {
@Override
public void onClick ( ) {
BrowserApp . copyToClipboard ( activity , url ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_remove_from_history ) {
@Override
public void onClick ( ) {
HistoryModel . deleteHistoryItem ( url )
. subscribeOn ( Schedulers . io ( ) )
. observeOn ( Schedulers . main ( ) )
. subscribe ( new CompletableOnSubscribe ( ) {
@Override
public void onComplete ( ) {
uiController . handleHistoryChange ( ) ;
}
} ) ;
}
} ) ;
}
// TODO There should be a way in which we do not need an activity reference to dowload a file
public void showLongPressImageDialog ( @NonNull final Activity activity , @NonNull final String url ,
public void showLongPressImageDialog ( @NonNull final Activity activity ,
@NonNull final UIController uiController ,
@NonNull final String url ,
@NonNull final String userAgent ) {
BrowserDialog . show ( activity , url . replace ( Constants . HTTP , "" ) ,
new BrowserDialog . Item ( R . string . dialog_open_new_tab ) {
@Override
public void onClick ( ) {
mEventBus . post ( new BrowserEvents . OpenUrlInNewTab ( url ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_background_tab ) {
@Override
public void onClick ( ) {
mEventBus . post ( new BrowserEvents . OpenUrlIn NewTab ( url , BrowserEvents . OpenUrlIn NewTab. Location . BACKGROUND ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_incognito_tab , activity instanceof MainActivity ) {
@Override
public void onClick ( ) {
mEventBus . post ( new BrowserEvents . OpenUrlIn NewTab ( url , BrowserEvents . OpenUrlIn NewTab. Location . INCOGNITO ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_copy_link ) {
@Override
public void onClick ( ) {
BrowserApp . copyToClipboard ( activity , url ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_download_image ) {
@Override
public void onClick ( ) {
Utils . downloadFile ( activity , mPreferenceManager , url , userAgent , "attachment" ) ;
}
} ) ;
new BrowserDialog . Item ( R . string . dialog_open_new_tab ) {
@Override
public void onClick ( ) {
uiController . handleNewTab ( NewTab . FOREGROUND , url ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_background_tab ) {
@Override
public void onClick ( ) {
uiController . handle NewTab( NewTab . BACKGROUND , url ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_incognito_tab , activity instanceof MainActivity ) {
@Override
public void onClick ( ) {
uiController . handle NewTab( NewTab . INCOGNITO , url ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_copy_link ) {
@Override
public void onClick ( ) {
BrowserApp . copyToClipboard ( activity , url ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_download_image ) {
@Override
public void onClick ( ) {
Utils . downloadFile ( activity , mPreferenceManager , url , userAgent , "attachment" ) ;
}
} ) ;
}
public void showLongPressLinkDialog ( @NonNull final Activity activity , @NonNull final String url ) {
public void showLongPressLinkDialog ( @NonNull final Activity activity ,
@NonNull final UIController uiController ,
@NonNull final String url ) {
BrowserDialog . show ( activity , url ,
new BrowserDialog . Item ( R . string . dialog_open_new_tab ) {
@Override
public void onClick ( ) {
mEventBus . post ( new BrowserEvents . OpenUrlInNewTab ( url ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_background_tab ) {
@Override
public void onClick ( ) {
mEventBus . post ( new BrowserEvents . OpenUrlIn NewTab ( url , BrowserEvents . OpenUrlIn NewTab. Location . BACKGROUND ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_incognito_tab , activity instanceof MainActivity ) {
@Override
public void onClick ( ) {
mEventBus . post ( new BrowserEvents . OpenUrlIn NewTab ( url , BrowserEvents . OpenUrlIn NewTab. Location . INCOGNITO ) ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_copy_link ) {
@Override
public void onClick ( ) {
BrowserApp . copyToClipboard ( activity , url ) ;
}
} ) ;
new BrowserDialog . Item ( R . string . dialog_open_new_tab ) {
@Override
public void onClick ( ) {
uiController . handleNewTab ( NewTab . FOREGROUND , url ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_background_tab ) {
@Override
public void onClick ( ) {
uiController . handle NewTab( NewTab . BACKGROUND , url ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_open_incognito_tab , activity instanceof MainActivity ) {
@Override
public void onClick ( ) {
uiController . handle NewTab( NewTab . INCOGNITO , url ) ;
}
} ,
new BrowserDialog . Item ( R . string . dialog_copy_link ) {
@Override
public void onClick ( ) {
BrowserApp . copyToClipboard ( activity , url ) ;
}
} ) ;
}
}