====== Areas of concern for rearchitecture discussions ======
[[android:object_guidelines|Android Object Design Guidelines]]
[[android:code_formatting|Android Source Format Guidelines]]
** Prio is (mja/bc) **
  * [[android:layer generalization|Layer Generalization]] ( 2 / 1 ) -> 1.5
    * **Done 2016**
    * Old model had few instances based on LayerEnum (compile time tags)
    * Newer model (SmartPlan/TrackManager) needs layers distinguished by runtime tags (names?)
    * Can create new layer and drawables for things that require project inspection by renderer. (e.g. user location).
  * [[android:code_modernization|Code modernization]] ( 3 / 2 ) -> 2.5
    * Remove deprecated dialog interaction in SmartsuiteActivity, etal.
    * Implement new (API 23) [[android:lpermission model|permission model]]
    * Rewrite activities to avoid needing "noOrientation" activity flagm, use savedState
    * Relace some activies with Fragments, e.g. SG Alignment, recovery, task chooser 
    * 64 bit versions of the .so files (need NDK modernization?)
  * [[android:code_modernization|NDK]] ( 11 / 11 ) -> 11 2.5 (by lumping in with Code Modernization)
    * Use more modern NDK / Approved Gradle build scheme.
    * Strip un-needed .so files from some apps, such as Trimble from everything except for Grade/Blade
    * See 64 bit native implementation note in Code Modernization.
  * Warnings: ( 9 / 4 ) -> 6.5 2.6 
    * Handler (replace with Runnables)
    * Processing classes
    * Reformatting of source
    * Diamond operator 
    * Examine every single ToDo: Fix, ameliorate, remove
  * [[android:project_class_refactoring|Project class refactoring]] ( 1 / 6 ) -> 3.5
     * App vs. AGTEK_Lib; e.g. SD vs. All, SG/SB vs. rest; not needed code
       * e.g. carry too much un-needed functionality on some apps (e.g. highway aligns in SmartPlan, etc)
       * e.g. too much inheritence from unwanted apps.
     * Too many times in which m_project must be cast to the specific class when in main activity to use app specific methods. 
  * Testing ( 5 / 3 ) -> 4
      * Improve unit test coverage / unit test instances
      * Implement UI tests
  * Alignment classes (4 / 8) -> 6
    * Make easier for use in applications 
    * Q: Why does an application need it's own alignment classes?
    * Q: Why is "defaultAlignment" called what it is? Isn't it just a "singlePoint" alignment, vs. a dual alignment?
    * Currently there are alignment methods in Project classes, activity classes, and projection vs. alignment: reduce
  * Final isolation of graphics from Project/Layer objects ( 8 / 5 ) -> 6.5
    * (no reading the project)
    * Shaders
    * No more coupling to Project class
    * Repackage to non smartsuite
  * Multi thread impl to speed things up. ( 7 / 7 ) -> 7
    * e.g.draping, isopach?
    * e.g. Measure volume computation parallelization
    * Action Item: identify other areas to be parallelized.
  * ADF evolution ( 6 / 9 ) -> 7.5
    * Define layer visibility entry
    * Define layer color
    * Allow layer properties
    * Saved measure area
    * Draw area on layers
    * Allow layers with LLA lines, not just NEZ.
    * View type structure for ADF, explicit vs. app implicit
  * UI ( 10 / 10 ) -> 10
    * Common bits like MeasureArea entry. 
    * Better tree-view (current one has too much exposed functionality).
    * ActionItem: Identify other common UI bits.
  * CachedProjectManager ( 12 / 12 ) -> 12
    * Better mirror of project structure (sub folders)
    * background syncrhonization with server
    * Allow prefetch of file contents (e.g. referenced images? AKA pre-cache)
   * File Hell
      * We are starting to create a classic CAD file hell: Lots and lots and lots of files and you can't recreate what you have sompleace else because there are too many local files or hidden files and you need a special export/import routine to collect them all in one place or put them back in the right places.
         * KMZ vs ADF
         * Photos
         * Notes
         * Tracks
         * Measure