question: @ SuppressLint ( "NewApi" ) private boolean performCellsUpdate ( final Location location , final String providerName ) { if ( ! prefs . getBoolean ( Preferences . KEY_LOG_CELLS , Preferences . VAL_SAVE_CELLS ) ) { Log . i ( TAG , "Didn't save cells: cells tracking is disabled." ) ; return false ; } if ( ! GeometryUtils . isValidLocation ( location ) ) { Log . e ( TAG , "GPS location invalid (null or default value)" ) ; return false ; } if ( mLocationBlacklist . contains ( location ) ) { mCellSavedAt = location ; return false ; } final ArrayList < CellRecord > cells = new ArrayList < > ( ) ; final PositionRecord pos = new PositionRecord ( location , mSessionId , providerName ) ; if ( isNewApiSupported ( ) ) { Log . v ( TAG , "Collecting cell infos (New API > 18)" ) ; final List < CellInfo > cellInfoList = mTelephonyManager . getAllCellInfo ( ) ; Log . v ( TAG , "Found " + cellInfoList . size ( ) + " cells" ) ; for ( final CellInfo info : cellInfoList ) { final CellRecord cell = processCellInfo ( info , pos ) ; if ( cell != null ) { cells . add ( cell ) ; broadcastCellInfo ( cell ) ; } } } else { Log . v ( TAG , "Collecting cell infos (API <= 17)" ) ; final CellLocation cellLocation = mTelephonyManager . getCellLocation ( ) ; if ( cellLocation instanceof GsmCellLocation || cellLocation instanceof CdmaCellLocation ) { final CellRecord serving = processServingCellLocation ( cellLocation , pos ) ; if ( serving != null ) { cells . add ( serving ) ; } final ArrayList < CellRecord > neigbors = processNeighbors ( serving , pos ) ; cells . addAll ( neigbors ) ; broadcastCellInfo ( serving ) ; } } mDataHelper . storeCellsScanResults ( cells , pos , pos ) ; return ( cells . size ( ) > 0 ) ; }
target:  Processes cell related information and saves them to database