Home | History | Annotate | Download | only in mms
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.mms;
     18 
     19 import android.app.Activity;
     20 import android.app.AlertDialog;
     21 import android.content.Context;
     22 import android.content.DialogInterface;
     23 import android.content.DialogInterface.OnClickListener;
     24 import android.util.Log;
     25 
     26 import com.android.mms.data.Contact;
     27 import com.android.mms.data.Conversation;
     28 import com.android.mms.data.RecipientIdCache;
     29 
     30 public class LogTag {
     31     public static final String TAG = "Mms";
     32 
     33     public static final String TRANSACTION = "Mms:transaction";
     34     public static final String APP = "Mms:app";
     35     public static final String THREAD_CACHE = "Mms:threadcache";
     36     public static final String THUMBNAIL_CACHE = "Mms:thumbnailcache";
     37     public static final String PDU_CACHE = "Mms:pducache";
     38     public static final String WIDGET = "Mms:widget";
     39     public static final String CONTACT = "Mms:contact";
     40 
     41     /**
     42      * Log tag for enabling/disabling StrictMode violation log.
     43      * To enable: adb shell setprop log.tag.Mms:strictmode DEBUG
     44      */
     45     public static final String STRICT_MODE_TAG = "Mms:strictmode";
     46     public static final boolean VERBOSE = false;
     47     public static final boolean SEVERE_WARNING = true;                  // Leave this true
     48     private static final boolean SHOW_SEVERE_WARNING_DIALOG = false;    // Set to false before ship
     49     public static final boolean DEBUG_SEND = false;    // Set to false before ship
     50     public static final boolean DEBUG_DUMP = false;    // Set to false before ship
     51     public static final boolean ALLOW_DUMP_IN_LOGS = false;  // Set to false before ship
     52 
     53     private static String prettyArray(String[] array) {
     54         if (array.length == 0) {
     55             return "[]";
     56         }
     57 
     58         StringBuilder sb = new StringBuilder("[");
     59         int len = array.length-1;
     60         for (int i = 0; i < len; i++) {
     61             sb.append(array[i]);
     62             sb.append(", ");
     63         }
     64         sb.append(array[len]);
     65         sb.append("]");
     66 
     67         return sb.toString();
     68     }
     69 
     70     private static String logFormat(String format, Object... args) {
     71         for (int i = 0; i < args.length; i++) {
     72             if (args[i] instanceof String[]) {
     73                 args[i] = prettyArray((String[])args[i]);
     74             }
     75         }
     76         String s = String.format(format, args);
     77         s = "[" + Thread.currentThread().getId() + "] " + s;
     78         return s;
     79     }
     80 
     81     public static void debug(String format, Object... args) {
     82         Log.d(TAG, logFormat(format, args));
     83     }
     84 
     85     public static void warn(String format, Object... args) {
     86         Log.w(TAG, logFormat(format, args));
     87     }
     88 
     89     public static void error(String format, Object... args) {
     90         Log.e(TAG, logFormat(format, args));
     91     }
     92 
     93     public static void dumpInternalTables(final Context context) {
     94         if (!ALLOW_DUMP_IN_LOGS) {
     95             return;
     96         }
     97         new Thread(new Runnable() {
     98             public void run() {
     99                 RecipientIdCache.canonicalTableDump();
    100                 RecipientIdCache.dump();
    101                 Conversation.dumpThreadsTable(context);
    102                 Conversation.dump();
    103                 Conversation.dumpSmsTable(context);
    104                 Contact.dump();
    105             }
    106         }).start();
    107     }
    108 
    109     public static void warnPossibleRecipientMismatch(final String msg, final Activity activity) {
    110         Log.e(TAG, "WARNING!!!! " + msg, new RuntimeException());
    111 
    112         if (SHOW_SEVERE_WARNING_DIALOG) {
    113             dumpInternalTables(activity);
    114             activity.runOnUiThread(new Runnable() {
    115                 public void run() {
    116                     new AlertDialog.Builder(activity)
    117                         .setIconAttribute(android.R.attr.alertDialogIcon)
    118                         .setTitle(R.string.error_state)
    119                         .setMessage(msg + "\n\n" + activity.getString(R.string.error_state_text))
    120                         .setPositiveButton(R.string.yes, new OnClickListener() {
    121                             public void onClick(DialogInterface dialog, int which) {
    122                                 dialog.dismiss();
    123                             }
    124                         })
    125                         .show();
    126                 }
    127             });
    128         }
    129     }
    130 
    131 }
    132