1ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak/*
2ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Copyright (c) 2015, Motorola Mobility LLC
3ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * All rights reserved.
4ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *
5ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * Redistribution and use in source and binary forms, with or without
6ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * modification, are permitted provided that the following conditions are met:
7ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *     - Redistributions of source code must retain the above copyright
8ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *       notice, this list of conditions and the following disclaimer.
9ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *     - Redistributions in binary form must reproduce the above copyright
10ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *       notice, this list of conditions and the following disclaimer in the
11ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *       documentation and/or other materials provided with the distribution.
12ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *     - Neither the name of Motorola Mobility nor the
13ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *       names of its contributors may be used to endorse or promote products
14ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *       derived from this software without specific prior written permission.
15ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak *
16ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
18ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MOTOROLA MOBILITY LLC BE LIABLE
20ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
26ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak * DAMAGE.
27ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak */
28ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
29ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakpackage com.android.service.ims.presence;
30ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
31ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport android.content.Context;
32ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakimport android.content.SharedPreferences;
33ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
34ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiakpublic class SharedPrefUtil {
35ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    public static final String EAB_SHARED_PREF = "com.android.vt.eab";
36ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    public static final String INIT_DONE = "init_done";
37ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    private static final String CONTACT_CHANGED_PREF_KEY = "timestamp_change";
38ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    private static final String CONTACT_DELETE_PREF_KEY = "timestamp_delete";
39ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    private static final String CONTACT_PROFILE_CHANGED_PREF_KEY = "profile_timestamp_change";
40ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
41ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    public static boolean isInitDone(Context context) {
42ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        SharedPreferences eabPref = context.getSharedPreferences(
43ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                EAB_SHARED_PREF, Context.MODE_PRIVATE);
44ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        return eabPref.getBoolean(INIT_DONE, false);
45ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    }
46ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
47ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    public static void setInitDone(Context context, boolean initDone){
48ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        SharedPreferences.Editor eabPref = context.getSharedPreferences(
49ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                EAB_SHARED_PREF, Context.MODE_PRIVATE).edit();
50ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        eabPref.putBoolean(INIT_DONE, initDone).commit();
51ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    }
52ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
53ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    public static long getLastContactChangedTimestamp(Context context, long time) {
548e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing        long contactModifySyncTime = 0;
55ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        SharedPreferences pref = context.getSharedPreferences(EAB_SHARED_PREF,
56ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                Context.MODE_PRIVATE);
578e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing        contactModifySyncTime = pref.getLong(CONTACT_CHANGED_PREF_KEY, time);
588e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing        return validateDeviceTimestamp(context, contactModifySyncTime);
59ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    }
60ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
61ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    public static void saveLastContactChangedTimestamp(Context context, long time) {
62ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        SharedPreferences.Editor eabPref = context.getSharedPreferences(
63ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                EAB_SHARED_PREF, Context.MODE_PRIVATE).edit();
64ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        eabPref.putLong(CONTACT_CHANGED_PREF_KEY, time).commit();
65ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    }
66ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
67ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    public static long getLastProfileContactChangedTimestamp(Context context, long time) {
688e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing        long profileModifySyncTime = 0;
69ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        SharedPreferences pref = context.getSharedPreferences(EAB_SHARED_PREF,
70ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                Context.MODE_PRIVATE);
718e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing        profileModifySyncTime = pref.getLong(CONTACT_PROFILE_CHANGED_PREF_KEY, time);
728e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing        return validateDeviceTimestamp(context, profileModifySyncTime);
73ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    }
74ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
75ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    public static void saveLastProfileContactChangedTimestamp(Context context, long time) {
76ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        SharedPreferences.Editor eabPref = context.getSharedPreferences(
77ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                EAB_SHARED_PREF, Context.MODE_PRIVATE).edit();
78ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        eabPref.putLong(CONTACT_PROFILE_CHANGED_PREF_KEY, time).commit();
79ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    }
80ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
81ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    public static long getLastContactDeletedTimestamp(Context context, long time) {
828e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing        long contactDeleteSyncTime = 0;
83ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        SharedPreferences pref = context.getSharedPreferences(EAB_SHARED_PREF,
84ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                Context.MODE_PRIVATE);
858e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing        contactDeleteSyncTime = pref.getLong(CONTACT_DELETE_PREF_KEY, time);
868e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing        return validateDeviceTimestamp(context, contactDeleteSyncTime);
87ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    }
88ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
89ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    public static void saveLastContactDeletedTimestamp(Context context, long time) {
90ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        SharedPreferences.Editor eabPref = context.getSharedPreferences(
91ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                EAB_SHARED_PREF, Context.MODE_PRIVATE).edit();
92ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        eabPref.putLong(CONTACT_DELETE_PREF_KEY, time).commit();
93ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    }
94ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
958e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing    private static long validateDeviceTimestamp(Context context, long lastSyncedTimestamp) {
968e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing        long deviceCurrentTimeMillis = System.currentTimeMillis();
978e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing        if((lastSyncedTimestamp != 0) && lastSyncedTimestamp > deviceCurrentTimeMillis) {
988e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing            SharedPreferences.Editor eabPref = context.getSharedPreferences(
998e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing                    EAB_SHARED_PREF, Context.MODE_PRIVATE).edit();
1008e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing            eabPref.putLong(CONTACT_CHANGED_PREF_KEY, 0);
1018e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing            eabPref.putLong(CONTACT_DELETE_PREF_KEY, 0);
1028e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing            eabPref.putLong(CONTACT_PROFILE_CHANGED_PREF_KEY, 0);
1038e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing            eabPref.commit();
1048e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing            lastSyncedTimestamp = 0;
1058e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing        }
1068e4834fa676fce0101da34950279b1a2bf8eb81cGao Bing        return lastSyncedTimestamp;
107ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    }
108ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak
109ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    public static void resetEABSharedPref(Context context) {
110ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        SharedPreferences.Editor eabPref = context.getSharedPreferences(
111ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak                EAB_SHARED_PREF, Context.MODE_PRIVATE).edit();
112ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        eabPref.putBoolean(INIT_DONE, false);
113ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        eabPref.putLong(CONTACT_CHANGED_PREF_KEY, 0);
114ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        eabPref.putLong(CONTACT_DELETE_PREF_KEY, 0);
115ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        eabPref.putLong(CONTACT_PROFILE_CHANGED_PREF_KEY, 0);
116ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak        eabPref.commit();
117ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak    }
118ac76c57e7a49d4f1431c751db3c810467a60ca48Pavel Zhamaitsiak}
119