Lint Report: 34 errors and 67 warnings
Issue Types

Overview

Correctness
40warning DefaultLocale: Implied default locale in case conversion
7warning SimpleDateFormat: Implied locale in date format
2error WrongConstant: Incorrect constant
31error LongLogTag: Too Long Log Tags
1warning GradleDependency: Obsolete Gradle Dependency
Security
4warning TrustAllX509TrustManager: Insecure TLS/SSL trust manager
Compliance
1error ExpiredTargetSdkVersion: TargetSdkVersion No Longer Supported
Performance
11warning Recycle: Missing recycle() calls
1warning ObsoleteSdkInt: Obsolete SDK_INT Version Check
2warning HandlerLeak: Handler reference leaks
Usability:Icons
1warning IconMissingDensityFolder: Missing density folder
Disabled Checks (38)

Implied default locale in case conversion

../../src/main/java/com/artncore/commons/DataClasses.java:524: Implicitly using the default locale is a common source of bugs: Use String.format(Locale, ...) instead
  521                 {
  522                     NowPw +=  ConNowPw[i];
  523                 }
  524                 return Double.parseDouble(String.format("%.0f", NowPw));                            
  525             }
  526 
  527             /**
../../src/main/java/com/artncore/commons/DataClasses.java:542: Implicitly using the default locale is a common source of bugs: Use String.format(Locale, ...) instead
  539                     NowPw +=  ConNowPw[i];
  540                 }
  541                 NowPw += LightNowPw;
  542                 return Double.parseDouble(String.format("%.0f", NowPw));                            
  543             }
  544 
  545             /**
../../src/main/java/com/artncore/commons/DataClasses.java:1225: Implicitly using the default locale is a common source of bugs: Use String.format(Locale, ...) instead
 1222             /** 디버깅 메시지 출력 */
 1223             public String ToDebugString()
 1224             {
 1225                 if(bMinute30) return String.format("%d:30", Hour);                                  
 1226                 else          return String.format("%d:00", Hour);
 1227             }
 1228         }
../../src/main/java/com/artncore/commons/DataClasses.java:1226: Implicitly using the default locale is a common source of bugs: Use String.format(Locale, ...) instead
 1223             public String ToDebugString()
 1224             {
 1225                 if(bMinute30) return String.format("%d:30", Hour);
 1226                 else          return String.format("%d:00", Hour);                                  
 1227             }
 1228         }
../../src/main/java/com/artncore/commons/DataClasses.java:6189: Implicitly using the default locale is a common source of bugs: Use String.format(Locale, ...) instead
 6186   String temp_time;
 6187   if(time != null)
 6188   {
 6189       temp_time = String.format("%04d-%02d-%02d %02d:%02d:%02d",time.get(Calendar.YEAR),time.get(Calendar.MONTH)+1, time.get(Calendar.DAY_OF_MONTH),time.get(Calendar.HOUR_OF_DAY), time.get(Calendar.MINUTE), time.get(Calendar.SECOND));
 6190   }
 6191   else
 6192   {
DefaultLocale Correctness Warning Priority 6/10

Implied locale in date format

../../src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java:118: To get local formatting use getDateInstance(), getDateTimeInstance(), or getTimeInstance(), or use new SimpleDateFormat(String template, Locale locale) with for example Locale.US for ASCII dates.
 115   // e.g. if today is Jan 1 2001 and the short date is Feb 29
 116   String year = Integer.toString(now.get(Calendar.YEAR));
 117   String timeStampStrPlusYear = timestampStr + " " + year;
 118   SimpleDateFormat hackFormatter = new SimpleDateFormat(recentDateFormat.toPattern() + " yyyy",
 119           recentDateFormat.getDateFormatSymbols());
 120   hackFormatter.setLenient(false);
 121   hackFormatter.setTimeZone(recentDateFormat.getTimeZone());
../../src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java:175: To get local formatting use getDateInstance(), getDateTimeInstance(), or getTimeInstance(), or use new SimpleDateFormat(String template, Locale locale) with for example Locale.US for ASCII dates.
 172      */
 173     private void setDefaultDateFormat(String format) {
 174         if (format != null) {
 175             this.defaultDateFormat = new SimpleDateFormat(format);                                  
 176             this.defaultDateFormat.setLenient(false);
 177         }
 178     }
../../src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java:196: To get local formatting use getDateInstance(), getDateTimeInstance(), or getTimeInstance(), or use new SimpleDateFormat(String template, Locale locale) with for example Locale.US for ASCII dates.
 193      */
 194     private void setRecentDateFormat(String format) {
 195         if (format != null) {
 196             this.recentDateFormat = new SimpleDateFormat(format);                                   
 197             this.recentDateFormat.setLenient(false);
 198         }
 199     }
../../src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java:274: To get local formatting use getDateInstance(), getDateTimeInstance(), or getTimeInstance(), or use new SimpleDateFormat(String template, Locale locale) with for example Locale.US for ASCII dates.
 271         if (recentFormatString == null) {
 272             this.recentDateFormat = null;
 273         } else {
 274             this.recentDateFormat = new SimpleDateFormat(recentFormatString, dfs);                  
 275             this.recentDateFormat.setLenient(false);
 276         }
../../src/main/java/org/apache/commons/net/ftp/parser/FTPTimestampParserImpl.java:282: To get local formatting use getDateInstance(), getDateTimeInstance(), or getTimeInstance(), or use new SimpleDateFormat(String template, Locale locale) with for example Locale.US for ASCII dates.
 279         if (defaultFormatString == null) {
 280             throw new IllegalArgumentException("defaultFormatString cannot be null");
 281         }
 282         this.defaultDateFormat = new SimpleDateFormat(defaultFormatString, dfs);                    
 283         this.defaultDateFormat.setLenient(false);
 284 
 285         setServerTimeZone(config.getServerTimeZoneId());
../../src/main/java/org/apache/commons/net/ftp/parser/MLSxEntryParser.java:128: To get local formatting use getDateInstance(), getDateTimeInstance(), or getTimeInstance(), or use new SimpleDateFormat(String template, Locale locale) with for example Locale.US for ASCII dates.
 125                 // YYYYMMDDHHMMSS[.sss]
 126                 SimpleDateFormat sdf; // Not thread-safe
 127                 if (factvalue.contains(".")){
 128                     sdf = new SimpleDateFormat("yyyyMMddHHmmss.SSS");                               
 129                 } else {
 130                     sdf = new SimpleDateFormat("yyyyMMddHHmmss");
 131                 }
../../src/main/java/org/apache/commons/net/ftp/parser/MLSxEntryParser.java:130: To get local formatting use getDateInstance(), getDateTimeInstance(), or getTimeInstance(), or use new SimpleDateFormat(String template, Locale locale) with for example Locale.US for ASCII dates.
 127   if (factvalue.contains(".")){
 128       sdf = new SimpleDateFormat("yyyyMMddHHmmss.SSS");
 129   } else {
 130       sdf = new SimpleDateFormat("yyyyMMddHHmmss");                                   
 131   }
 132   TimeZone GMT = TimeZone.getTimeZone("GMT"); // both need to be set for the parse to work OK
 133   sdf.setTimeZone(GMT);
SimpleDateFormat Correctness Warning Priority 6/10

Incorrect constant

../../src/main/java/com/artncore/WallPadDataMgr/wallpaddbmgr.java:2552: Must be one or more of: Context.MODE_PRIVATE, Context.MODE_WORLD_READABLE, Context.MODE_WORLD_WRITEABLE, Context.MODE_ENABLE_WRITE_AHEAD_LOGGING, Context.MODE_NO_LOCALIZED_COLLATORS
 2549         {
 2550             //e.printStackTrace();
 2551             LogUtil.errorLogInfo("", TAG, e);
 2552             wdb = CTX.openOrCreateDatabase(dbpath, SQLiteDatabase.OPEN_READWRITE, null);            
 2553             wdb.setVersion(DatabaseVersion);
 2554             if (wdb != null)
 2555             {
../../src/main/java/com/artncore/WallPadDataMgr/wallpaddbmgr.java:2593: Must be one or more of: Context.MODE_PRIVATE, Context.MODE_WORLD_READABLE, Context.MODE_WORLD_WRITEABLE, Context.MODE_ENABLE_WRITE_AHEAD_LOGGING, Context.MODE_NO_LOCALIZED_COLLATORS
 2590           //e.printStackTrace();
 2591           LogUtil.errorLogInfo("", TAG, e);
 2592           //wdb = CTX.openOrCreateDatabase(dbpath, DBfalg, null);
 2593           wdb = CTX.openOrCreateDatabase(dbpath, SQLiteDatabase.OPEN_READWRITE, null);            
 2594           wdb.setVersion(DatabaseVersion);
 2595           if (wdb != null)
 2596           {
WrongConstant Correctness Error Priority 6/10

Too Long Log Tags

../../src/main/java/com/artncore/WallPadDataMgr/WallpadConcentAccSaveData.java:141: The logging tag can be at most 23 characters, was 25 (WallpadConcentAccSaveData)
 138             int valConCount = Integer.parseInt(AllData[0]);
 139             if(valConCount != concount)
 140             {
 141                 Log.w(TAG, "[ConcentAccDataClass] Concent Count Not Match !!!");                                
 142                 return;
 143             }
../../src/main/java/com/artncore/WallPadDataMgr/WallpadConcentAccSaveData.java:147: The logging tag can be at most 23 characters, was 25 (WallpadConcentAccSaveData)
 144 
 145             if( (AllData.length - 1) != (valConCount*2) )
 146             {
 147                 Log.w(TAG, "[ConcentAccDataClass] Concent Data LEN Not Match !!!");                             
 148                 return;
 149             }
../../src/main/java/com/artncore/WallPadDataMgr/WallpadConcentAccSaveData.java:192: The logging tag can be at most 23 characters, was 25 (WallpadConcentAccSaveData)
 189         //     1.1. id
 190         if((id <= 0) || (id > 15))
 191         {
 192             Log.w(TAG, "[Update] Param - id  Out Of Range !!! (id:" + id + ")");                             
 193             return -1;
 194         }
../../src/main/java/com/artncore/WallPadDataMgr/WallpadConcentAccSaveData.java:316: The logging tag can be at most 23 characters, was 25 (WallpadConcentAccSaveData)
 313         {
 314             if(Data == null)
 315             {
 316                 Log.w(TAG, "[Set_ConAccDbData] Concent.Data NULL !!!");                                         
 317                 return APIErrorCode.INVALIDPARAMETER;
 318             }
../../src/main/java/com/artncore/WallPadDataMgr/WallpadConcentAccSaveData.java:339: The logging tag can be at most 23 characters, was 25 (WallpadConcentAccSaveData)
 336             values.put("concentcount", ConcentCount);
 337             values.put("value", AccStr);
 338 
 339             Log.w(TAG, "[Set_ConAccDbData] Update - num : " + seqnum);                                       
 340             Log.w(TAG, "[Set_ConAccDbData] Update - ConcentCount : " + ConcentCount);
 341             Log.w(TAG, "[Set_ConAccDbData] Update - value : " + AccStr);
LongLogTag Correctness Error Priority 5/10

Obsolete Gradle Dependency

../../build.gradle:17: A newer version of com.android.tools.build:gradle than 4.1.1 is available: 4.1.3. (There is also a newer version of 4.1.�� available, if upgrading to 4.1.3 is difficult: 4.1.2)
  14      * of the Gradle plugin for the buildscript.
  15      */
  16     dependencies {
  17         classpath 'com.android.tools.build:gradle:4.1.1'
                                           
  18     }
  19 }
  20 
Applies to variants: debug, release
Does not apply to variants: release_secured
GradleDependency Correctness Warning Priority 4/10

Insecure TLS/SSL trust manager

../../src/main/java/org/apache/commons/net/ftp/FTPSTrustManager.java:39: checkClientTrusted is empty, which could cause insecure network traffic due to trusting arbitrary TLS/SSL certificates presented by peers
 36      * No-op
 37      */
 38 //    @Override
 39     public void checkClientTrusted(X509Certificate[] certificates, String authType)                 
 40     {
 41         return;
 42     }
../../src/main/java/kr/co/icontrols/sslapi/SSLClient.java:111: checkClientTrusted is empty, which could cause insecure network traffic due to trusting arbitrary TLS/SSL certificates presented by peers
 108                return myTrustedAnchors;
 109            }
 110            @Override
 111            public void checkClientTrusted(X509Certificate[] certs, String authType) {}         
 112            @Override
 113            public void checkServerTrusted(X509Certificate[] certs, String authType) {}
 114        }
../../src/main/java/kr/co/icontrols/sslapi/SSLClient.java:113: checkServerTrusted is empty, which could cause insecure network traffic due to trusting arbitrary TLS/SSL certificates presented by peers
 110                 @Override
 111                 public void checkClientTrusted(X509Certificate[] certs, String authType) {}
 112                 @Override
 113                 public void checkServerTrusted(X509Certificate[] certs, String authType) {}         
 114             }
 115     };
../../src/main/java/org/apache/commons/net/util/TrustManagerUtils.java:49: checkClientTrusted is empty, which could cause insecure network traffic due to trusting arbitrary TLS/SSL certificates presented by peers
  46          * Never generates a CertificateException.
  47          */
  48 //        @Override
  49         public void checkClientTrusted(X509Certificate[] certificates, String authType)             
  50         {
  51             return;
  52         }
TrustAllX509TrustManager Security Warning Priority 6/10

TargetSdkVersion No Longer Supported

../../build.gradle:35: Google Play requires that apps target API level 26 or higher.

  32 
  33     defaultConfig {
  34         minSdkVersion 11
  35         targetSdkVersion 14
                                                                        
  36     }
  37 
  38     sourceSets {
ExpiredTargetSdkVersion Compliance Fatal Priority 8/10

Missing recycle() calls

../../src/main/java/com/artncore/WallPadDataMgr/WallPadRemoteCallUserData.java:72: This Cursor should be freed up after use with #close()
  69     // 컬럼 개수 (방문객원격통화 1차/2차 테이블 비교)
  70     String query = "select * from " + RemoteCallUserTBL + ";";
  71     if (wdb != null) {
  72         Cursor cursor = wdb.rawQuery(query, null);                                      
  73         int nColumnCnt = cursor.getColumnCount();
  74         Log.i(TAG, "[WallPadRemoteCallUserData] nColumnCnt [" + nColumnCnt + "]");
  75         for (int i = 0; i < nColumnCnt; i++) {
../../src/main/java/com/artncore/WallPadDataMgr/WallpadDevStatus.java:66: This Cursor should be freed up after use with #close()
  63         String query = "select type from "+DevStatusItemTBL+" group by type;";
  64         if(wdb!=null)
  65         {
  66             Cursor cursor = wdb.rawQuery(query, null);                                                       
  67             String retval = "";
  68             int count = 0;
  69             while (cursor.moveToNext())
../../src/main/java/com/artncore/WallPadDataMgr/WallpadDevStatus.java:93: This Cursor should be freed up after use with #close()
  90         //create table " + SettingTBL  + " (type  text, name text unique, cnt INTEGER, value text);";
  91         String query = "select count() from "+DevStatusItemTBL+" ;";
  92         if(wdb!=null) {
  93             Cursor cursor = wdb.rawQuery(query, null);                                                       
  94 
  95             if (cursor.moveToNext()) {
  96                 return cursor.getInt(0);
../../src/main/java/com/artncore/WallPadDataMgr/WallpadDevStatus.java:118: This Cursor should be freed up after use with #close()
 115         String query = "select name from "+DevStatusItemTBL+" where type = \""+groupname+"\";";
 116         if(wdb!=null)
 117         {
 118             Cursor cursor = wdb.rawQuery(query, null);                                                       
 119             try
 120             {
 121                 String retval = "";
../../src/main/java/com/artncore/WallPadDataMgr/WallpadScheduleData.java:245: This Cursor should be freed up after use with #close()
  242   String query = "select seqnum, inqnum, inqttype,  inqctype, inqatype, inqitype, inqyear, inqmonth, inqday, inqhour, inqmsg from "+ScheduleTBL+" order by seqnum asc;";
  243   if(wdb!=null)
  244   {
  245       Cursor cursor = wdb.rawQuery(query, null);                                          
  246 
  247       while (cursor.moveToNext())
  248       {
Recycle Performance Warning Priority 7/10

Obsolete SDK_INT Version Check

../../src/main/res/values-v11: This folder configuration (v11) is unnecessary; minSdkVersion is 11. Merge all the resources in this folder into values.
ObsoleteSdkInt Performance Warning Priority 6/10

Handler reference leaks

../../src/main/java/com/artncore/wallpadapi/WallPadAPI.java:1885: This Handler class should be static or leaks might occur (anonymous android.os.Handler)
 1882 
 1883             LoadingDriver(nLightType);
 1884 
 1885             BlinkHandler = new Handler()                                                            
 1886             {
 1887                 @SuppressLint("HandlerLeak")
 1888                 public void handleMessage(Message msg)
../../src/main/java/com/artncore/wallpadimap/WallPadiMAPNotifyAPIBlock.java:79: This Handler class should be static or leaks might occur (anonymous android.os.Handler)
  76         {
  77             Looper.prepare();
  78             mLoop = Looper.myLooper();
  79             Mhandler = new Handler(){                                                                        
  80                 public void handleMessage(Message msg)
  81                 {
HandlerLeak Performance Warning Priority 4/10

Missing density folder

../../src/main/res: Missing density variation folders in src\\main\\res: drawable-xxhdpi
IconMissingDensityFolder Icons Usability Warning Priority 3/10

Disabled Checks

One or more issues were not run by lint, either because the check is not enabled by default, or because it was disabled with a command line flag or via one or more lint.xml configuration files in the project directories.

Suppressing Warnings and Errors

Lint errors can be suppressed in a variety of ways:

1. With a @SuppressLint annotation in the Java code
2. With a tools:ignore attribute in the XML file
3. With a //noinspection comment in the source code
4. With ignore flags specified in the build.gradle file, as explained below
5. With a lint.xml configuration file in the project
6. With a lint.xml configuration file passed to lint via the --config flag
7. With the --ignore flag passed to lint.

To suppress a lint warning with an annotation, add a @SuppressLint("id") annotation on the class, method or variable declaration closest to the warning instance you want to disable. The id can be one or more issue id's, such as "UnusedResources" or {"UnusedResources","UnusedIds"}, or it can be "all" to suppress all lint warnings in the given scope.

To suppress a lint warning with a comment, add a //noinspection id comment on the line before the statement with the error.

To suppress a lint warning in an XML file, add a tools:ignore="id" attribute on the element containing the error, or one of its surrounding elements. You also need to define the namespace for the tools prefix on the root element in your document, next to the xmlns:android declaration:
xmlns:tools="http://schemas.android.com/tools"

To suppress a lint warning in a build.gradle file, add a section like this:
android {
    lintOptions {
        disable 'TypographyFractions','TypographyQuotes'
    }
}

Here we specify a comma separated list of issue id's after the disable command. You can also use warning or error instead of disable to change the severity of issues.

To suppress lint warnings with a configuration XML file, create a file named lint.xml and place it at the root directory of the module in which it applies.

The format of the lint.xml file is something like the following:
<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <!-- Ignore everything in the test source set -->
    <issue id="all">
        <ignore path="\*/test/\*" />
    </issue>

    <!-- Disable this given check in this project -->
    <issue id="IconMissingDensityFolder" severity="ignore" />

    <!-- Ignore the ObsoleteLayoutParam issue in the given files -->
    <issue id="ObsoleteLayoutParam">
        <ignore path="res/layout/activation.xml" />
        <ignore path="res/layout-xlarge/activation.xml" />
        <ignore regexp="(foo|bar)\.java" />
    </issue>

    <!-- Ignore the UselessLeaf issue in the given file -->
    <issue id="UselessLeaf">
        <ignore path="res/layout/main.xml" />
    </issue>

    <!-- Change the severity of hardcoded strings to "error" -->
    <issue id="HardcodedText" severity="error" />
</lint>

To suppress lint checks from the command line, pass the --ignore flag with a comma separated list of ids to be suppressed, such as:
$ lint --ignore UnusedResources,UselessLeaf /my/project/path

For more information, see https://developer.android.com/studio/write/lint.html#config