@ -33,23 +33,29 @@ import android.util.AttributeSet;
import android.view.Gravity ;
import android.view.LayoutInflater ;
import android.view.View ;
import android.widget.AdapterView ;
import android.widget.ArrayAdapter ;
import android.widget.CheckBox ;
import android.widget.EditText ;
import android.widget.ImageView ;
import android.widget.LinearLayout ;
import android.widget.Spinner ;
import android.widget.SpinnerAdapter ;
import android.widget.TextView ;
import org.floens.chan.R ;
import org.floens.chan.core.manager.BoardManager ;
import org.floens.chan.core.manager.FilterEngine ;
import org.floens.chan.core.manager.FilterType ;
import org.floens.chan.core.model.Board ;
import org.floens.chan.core.model.Filter ;
import org.floens.chan.core.site.Site ;
import org.floens.chan.core.site.Sites ;
import org.floens.chan.ui.controller.FiltersController ;
import org.floens.chan.ui.dialog.ColorPickerView ;
import org.floens.chan.ui.drawable.DropdownArrowDrawable ;
import org.floens.chan.ui.helper.BoardHelper ;
import org.floens.chan.ui.view.FloatingMenu ;
import org.floens.chan.ui.view.FloatingMenuItem ;
import org.floens.chan.utils.Logger ;
import java.util.ArrayList ;
import java.util.List ;
@ -84,7 +90,7 @@ public class FilterLayout extends LinearLayout implements View.OnClickListener {
private FilterLayoutCallback callback ;
private Filter filter ;
private List < Board > appliedBoards = new ArrayList < > ( ) ;
private List < FilterEngine . SiteId BoardCode > appliedBoards = new ArrayList < > ( ) ;
public FilterLayout ( Context context ) {
super ( context ) ;
@ -226,49 +232,75 @@ public class FilterLayout extends LinearLayout implements View.OnClickListener {
} )
. show ( ) ;
} else if ( v = = boardsSelector ) {
@SuppressWarnings ( "unchecked" )
final SelectLayout < Board > selectLayout = ( SelectLayout < Board > ) LayoutInflater . from ( getContext ( ) ) . inflate ( R . layout . layout_select , null ) ;
// TODO(multi-site): fix this crap.
// we need a new proper recyclerview layout where you can individually select each site and board combination
// and if you don't select anything, it becomes a global filter.
final LinearLayout selectLayout = ( LinearLayout ) LayoutInflater . from ( getContext ( ) )
. inflate ( R . layout . layout_site_board_select , null ) ;
final Spinner spinner = ( Spinner ) selectLayout . findViewById ( R . id . spinner ) ;
List < SelectLayout . SelectItem < Board > > items = new ArrayList < > ( ) ;
List < Board > savedList = boardManager . getSavedBoards ( ) ;
for ( int i = 0 ; i < savedList . size ( ) ; i + + ) {
Board saved = savedList . get ( i ) ;
String name = BoardHelper . getName ( saved ) ;
String description = BoardHelper . getDescription ( saved ) ;
String search = name + " " + saved . code ;
final List < ? extends Site > allSites = Sites . ALL_SITES ;
boolean checked = false ;
for ( int j = 0 ; j < appliedBoards . size ( ) ; j + + ) {
Board appliedBoard = appliedBoards . get ( j ) ;
if ( appliedBoard . code . equals ( saved . code ) ) {
checked = true ;
break ;
final Site [ ] selectedSite = { allSites . get ( 0 ) } ;
List < String > allSitesNames = new ArrayList < > ( allSites . size ( ) ) ;
for ( int i = 0 ; i < allSites . size ( ) ; i + + ) {
Site site = allSites . get ( i ) ;
allSitesNames . add ( site . name ( ) ) ;
}
SpinnerAdapter adapter = new ArrayAdapter < > ( getContext ( ) , android . R . layout . simple_list_item_1 , allSitesNames ) ;
spinner . setAdapter ( adapter ) ;
spinner . setOnItemSelectedListener ( new AdapterView . OnItemSelectedListener ( ) {
@Override
public void onItemSelected ( AdapterView < ? > parent , View view , int position , long id ) {
Site site = allSites . get ( position ) ;
selectedSite [ 0 ] = site ;
Logger . test ( site . name ( ) ) ;
}
items . add ( new SelectLayout . SelectItem < > (
saved , saved . id , name , description , search , checked
) ) ;
@Override
public void onNothingSelected ( AdapterView < ? > parent ) {
}
} ) ;
selectLayout . setItems ( items ) ;
final EditText editText = ( EditText ) selectLayout . findViewById ( R . id . boards ) ;
String text = "" ;
for ( int i = 0 ; i < appliedBoards . size ( ) ; i + + ) {
FilterEngine . SiteIdBoardCode siteIdBoardCode = appliedBoards . get ( i ) ;
text + = siteIdBoardCode . boardCode ;
if ( i < appliedBoards . size ( ) - 1 ) {
text + = "," ;
}
}
editText . setText ( text ) ;
new AlertDialog . Builder ( getContext ( ) )
. setView ( selectLayout )
. setPositiveButton ( R . string . ok , new DialogInterface . OnClickListener ( ) {
@Override
public void onClick ( DialogInterface dialog , int which ) {
Site site = selectedSite [ 0 ] ;
appliedBoards . clear ( ) ;
List < SelectLayout . SelectItem < Board > > items = selectLayout . getItems ( ) ;
for ( int i = 0 ; i < items . size ( ) ; i + + ) {
SelectLayout . SelectItem < Board > selectItem = items . get ( i ) ;
if ( selectItem . checked ) {
appliedBoards . add ( selectItem . item ) ;
String [ ] codes = editText . getText ( ) . toString ( ) . split ( "," ) ;
if ( codes . length = = 0 ) {
filter . allBoards = true ;
} else {
filter . allBoards = false ;
for ( String code : codes ) {
appliedBoards . add ( FilterEngine . SiteIdBoardCode . fromSiteIdBoardCode (
site . id ( ) , code
) ) ;
}
}
filter . allBoards = selectLayout . areAllChecked ( ) ;
updateBoardsSummary ( ) ;
}
} )