// Path: library/src/main/java/com/onegravity/contactpicker/ContactElement.java
// public interface ContactElement extends Serializable {
// 
//     long getId();
// 
//     String getDisplayName();
// 
//     boolean isChecked();
// 
//     void setChecked(boolean checked, boolean suppressListenerCall);
// 
//     void addOnContactCheckedListener(OnContactCheckedListener listener);
// 
//     boolean matchesQuery(String[] queryStrings);
// 
// }
// 
// Path: library/src/main/java/com/onegravity/contactpicker/Helper.java
// public class Helper {
// 
//     public static boolean isNullOrEmpty(CharSequence string){
//         return string == null || string.length() == 0;
//     }
// 
//     public static DisplayMetrics getDisplayMetrics(Context context) {
//         Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
//         DisplayMetrics metrics = new DisplayMetrics();
//         display.getMetrics( metrics );
//         return metrics;
//     }
// 
//     public static void closeQuietly(Cursor cursor) {
//         try {
//             cursor.close();
//         }
//         catch (Exception ignore) {}
//     }
// 
//     public static void closeQuietly(Closeable closeable) {
//         try {
//             if (closeable != null) {
//                 closeable.close();
//             }
//         } catch (IOException ignore) {}
//     }
// 
// }
// 
// Path: library/src/main/java/com/onegravity/contactpicker/OnContactCheckedListener.java
// public interface OnContactCheckedListener<E extends ContactElement> {
// 
//     void onContactChecked(E contact, boolean wasChecked, boolean isChecked);
// 
// }


import com.onegravity.contactpicker.ContactElement;
import com.onegravity.contactpicker.Helper;
import com.onegravity.contactpicker.OnContactCheckedListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
/*
 * Copyright (C) 2015-2017 Emanuel Moecklin
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.onegravity.contactpicker.core;



/**
 * The concrete but abstract implementation of ContactElement.
 */
abstract class ContactElementImpl implements ContactElement {

    final private long mId;
    private String mDisplayName;

    transient private List<OnContactCheckedListener> mListeners = new ArrayList<>();
    transient private boolean mChecked = false;

    ContactElementImpl(long id, String displayName) {
        mId = id;
// Path: library/src/main/java/com/onegravity/contactpicker/ContactElement.java
// public interface ContactElement extends Serializable {
// 
//     long getId();
// 
//     String getDisplayName();
// 
//     boolean isChecked();
// 
//     void setChecked(boolean checked, boolean suppressListenerCall);
// 
//     void addOnContactCheckedListener(OnContactCheckedListener listener);
// 
//     boolean matchesQuery(String[] queryStrings);
// 
// }
// 
// Path: library/src/main/java/com/onegravity/contactpicker/Helper.java
// public class Helper {
// 
//     public static boolean isNullOrEmpty(CharSequence string){
//         return string == null || string.length() == 0;
//     }
// 
//     public static DisplayMetrics getDisplayMetrics(Context context) {
//         Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
//         DisplayMetrics metrics = new DisplayMetrics();
//         display.getMetrics( metrics );
//         return metrics;
//     }
// 
//     public static void closeQuietly(Cursor cursor) {
//         try {
//             cursor.close();
//         }
//         catch (Exception ignore) {}
//     }
// 
//     public static void closeQuietly(Closeable closeable) {
//         try {
//             if (closeable != null) {
//                 closeable.close();
//             }
//         } catch (IOException ignore) {}
//     }
// 
// }
// 
// Path: library/src/main/java/com/onegravity/contactpicker/OnContactCheckedListener.java
// public interface OnContactCheckedListener<E extends ContactElement> {
// 
//     void onContactChecked(E contact, boolean wasChecked, boolean isChecked);
// 
// }


// Path: library/src/main/java/com/onegravity/contactpicker/core/ContactElementImpl.java
import com.onegravity.contactpicker.ContactElement;
import com.onegravity.contactpicker.Helper;
import com.onegravity.contactpicker.OnContactCheckedListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

/*
 * Copyright (C) 2015-2017 Emanuel Moecklin
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.onegravity.contactpicker.core;



/**
 * The concrete but abstract implementation of ContactElement.
 */
abstract class ContactElementImpl implements ContactElement {

    final private long mId;
    private String mDisplayName;

    transient private List<OnContactCheckedListener> mListeners = new ArrayList<>();
    transient private boolean mChecked = false;

    ContactElementImpl(long id, String displayName) {
        mId = id;
        mDisplayName = Helper.isNullOrEmpty(displayName) ? "---" : displayName;