Show badge icon if any participant in the conversation is work contact am: 7ad7ac27f1
am: abff43da92
Change-Id: Ia600581af777a880fc1e2f3a8cbcc726818ee600
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
-->
|
||||
<resources>
|
||||
<!-- DB version -->
|
||||
<string name="database_version" translatable="false">1</string>
|
||||
<string name="database_version" translatable="false">2</string>
|
||||
|
||||
<!-- Version for shared preferences. This is used for handling prefs migration when old pref
|
||||
keys are moved or renamed. You don't need to bump up the version number if you are just
|
||||
|
||||
@@ -841,6 +841,11 @@ public class BugleDatabaseOperations {
|
||||
values.put(ConversationColumns.NAME,
|
||||
getDefaultConversationName(participants));
|
||||
|
||||
// Fill in IS_ENTERPRISE.
|
||||
final boolean hasAnyEnterpriseContact =
|
||||
ConversationListItemData.hasAnyEnterpriseContact(participants);
|
||||
values.put(ConversationColumns.IS_ENTERPRISE, hasAnyEnterpriseContact);
|
||||
|
||||
fillParticipantData(values, participants);
|
||||
|
||||
// Used by background thread when refreshing conversation so conversation could be deleted.
|
||||
|
||||
@@ -149,6 +149,9 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||
// is present (TP-Reply-Path), so that we could use it for the subsequent message to send.
|
||||
// Refer to TS 23.040 D.6 and SmsMessageSender.java in Android Messaging app.
|
||||
public static final String SMS_SERVICE_CENTER = "sms_service_center";
|
||||
|
||||
// A conversation is enterprise if one of the participant is a enterprise contact.
|
||||
public static final String IS_ENTERPRISE = "IS_ENTERPRISE";
|
||||
}
|
||||
|
||||
// Conversation table SQL
|
||||
@@ -182,7 +185,8 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||
+ ConversationColumns.NOTIFICATION_SOUND_URI + " TEXT, "
|
||||
+ ConversationColumns.NOTIFICATION_VIBRATION + " INT DEFAULT(1), "
|
||||
+ ConversationColumns.INCLUDE_EMAIL_ADDRESS + " INT DEFAULT(0), "
|
||||
+ ConversationColumns.SMS_SERVICE_CENTER + " TEXT "
|
||||
+ ConversationColumns.SMS_SERVICE_CENTER + " TEXT ,"
|
||||
+ ConversationColumns.IS_ENTERPRISE + " INT DEFAULT(0)"
|
||||
+ ");";
|
||||
|
||||
private static final String CONVERSATIONS_TABLE_SMS_THREAD_ID_INDEX_SQL =
|
||||
@@ -668,6 +672,12 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||
}
|
||||
}
|
||||
|
||||
public static void rebuildAllViews(final DatabaseWrapper db) {
|
||||
for (final String sql : DatabaseHelper.CREATE_VIEW_SQLS) {
|
||||
db.execSQL(sql);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Drops all user-defined tables from the given database.
|
||||
*/
|
||||
@@ -733,7 +743,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||
/**
|
||||
* Drops all user-defined views from the given database.
|
||||
*/
|
||||
private static void dropAllViews(final SQLiteDatabase db) {
|
||||
public static void dropAllViews(final SQLiteDatabase db) {
|
||||
final Cursor viewCursor =
|
||||
db.query(MASTER_TABLE, MASTER_COLUMNS, "type='view'", null, null, null, null);
|
||||
if (viewCursor != null) {
|
||||
|
||||
@@ -15,8 +15,10 @@
|
||||
*/
|
||||
package com.android.messaging.datamodel;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
|
||||
import com.android.messaging.Factory;
|
||||
import com.android.messaging.util.Assert;
|
||||
import com.android.messaging.util.LogUtil;
|
||||
|
||||
@@ -30,8 +32,61 @@ public class DatabaseUpgradeHelper {
|
||||
}
|
||||
|
||||
LogUtil.i(TAG, "Database upgrade started from version " + oldVersion + " to " + newVersion);
|
||||
try {
|
||||
doUpgradeWithExceptions(db, oldVersion, newVersion);
|
||||
LogUtil.i(TAG, "Finished database upgrade");
|
||||
} catch (final Exception ex) {
|
||||
LogUtil.e(TAG, "Failed to perform db upgrade from version " +
|
||||
oldVersion + " to version " + newVersion, ex);
|
||||
DatabaseHelper.rebuildTables(db);
|
||||
}
|
||||
}
|
||||
|
||||
// Add future upgrade code here
|
||||
public void doUpgradeWithExceptions(final SQLiteDatabase db, final int oldVersion,
|
||||
final int newVersion) throws Exception {
|
||||
int currentVersion = oldVersion;
|
||||
if (currentVersion < 2) {
|
||||
currentVersion = upgradeToVersion2(db);
|
||||
}
|
||||
// Rebuild all the views
|
||||
final Context context = Factory.get().getApplicationContext();
|
||||
DatabaseHelper.dropAllViews(db);
|
||||
DatabaseHelper.rebuildAllViews(new DatabaseWrapper(context, db));
|
||||
// Finally, check if we have arrived at the final version.
|
||||
checkAndUpdateVersionAtReleaseEnd(currentVersion, Integer.MAX_VALUE, newVersion);
|
||||
}
|
||||
|
||||
private int upgradeToVersion2(final SQLiteDatabase db) {
|
||||
db.execSQL("ALTER TABLE " + DatabaseHelper.CONVERSATIONS_TABLE + " ADD COLUMN " +
|
||||
DatabaseHelper.ConversationColumns.IS_ENTERPRISE + " INT DEFAULT(0)");
|
||||
LogUtil.i(TAG, "Ugraded database to version 2");
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks db version correctness at the end of each milestone release. If target database
|
||||
* version lies beyond the version range that the current release may handle, we snap the
|
||||
* current version to the end of the release, so that we may go on to the next release' upgrade
|
||||
* path. Otherwise, if target version is within reach of the current release, but we are not
|
||||
* at the target version, then throw an exception to force a table rebuild.
|
||||
*/
|
||||
private int checkAndUpdateVersionAtReleaseEnd(final int currentVersion,
|
||||
final int maxVersionForRelease, final int targetVersion) throws Exception {
|
||||
if (maxVersionForRelease < targetVersion) {
|
||||
// Target version is beyond the current release. Snap to max version for the
|
||||
// current release so we can go on to the upgrade path for the next release.
|
||||
return maxVersionForRelease;
|
||||
}
|
||||
|
||||
// If we are here, this means the current release' upgrade handler should upgrade to
|
||||
// target version...
|
||||
if (currentVersion != targetVersion) {
|
||||
// No more upgrade handlers. So we can't possibly upgrade to the final version.
|
||||
throw new Exception("Missing upgrade handler from version " +
|
||||
currentVersion + " to version " + targetVersion);
|
||||
}
|
||||
// Upgrade succeeded.
|
||||
return targetVersion;
|
||||
}
|
||||
|
||||
public void onDowngrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
|
||||
|
||||
@@ -67,6 +67,7 @@ public class ConversationListItemData {
|
||||
private String mDraftSubject;
|
||||
private String mSnippetSenderFirstName;
|
||||
private String mSnippetSenderDisplayDestination;
|
||||
private boolean mIsEnterprise;
|
||||
|
||||
public ConversationListItemData() {
|
||||
}
|
||||
@@ -118,6 +119,7 @@ public class ConversationListItemData {
|
||||
mSnippetSenderFirstName = cursor.getString(INDEX_SNIPPET_SENDER_FIRST_NAME);
|
||||
mSnippetSenderDisplayDestination =
|
||||
cursor.getString(INDEX_SNIPPET_SENDER_DISPLAY_DESTINATION);
|
||||
mIsEnterprise = cursor.getInt(INDEX_IS_ENTERPRISE) == 1;
|
||||
}
|
||||
|
||||
public String getConversationId() {
|
||||
@@ -157,20 +159,19 @@ public class ConversationListItemData {
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DatabaseHelper.ConversationColumns#PARTICIPANT_CONTACT_ID
|
||||
* @return the contact id of the participant if it is a 1:1 conversation, -1 for group.
|
||||
*/
|
||||
* @see ConversationColumns#PARTICIPANT_CONTACT_ID
|
||||
* @return the contact id of the participant if it is a 1:1 conversation, -1 for group.
|
||||
*/
|
||||
public long getParticipantContactId() {
|
||||
return mParticipantContactId;
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: support group conversation.
|
||||
* @see android.provider.ContactsContract#isEnterpriseContactId(long)
|
||||
* @return is the participant an enterprise contact. False if it is a group conversation.
|
||||
* @see ConversationColumns#IS_ENTERPRISE
|
||||
* @return whether the conversation is enterprise.
|
||||
*/
|
||||
public boolean isParticipantEnterpriseContact() {
|
||||
return ContactUtil.isEnterpriseContactId(getParticipantContactId());
|
||||
public boolean isEnterprise() {
|
||||
return mIsEnterprise;
|
||||
}
|
||||
|
||||
public String getParticipantLookupKey() {
|
||||
@@ -345,7 +346,9 @@ public class ConversationListItemData {
|
||||
+ DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.FIRST_NAME
|
||||
+ " as " + ConversationListViewColumns.SNIPPET_SENDER_FIRST_NAME + ", "
|
||||
+ DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.DISPLAY_DESTINATION
|
||||
+ " as " + ConversationListViewColumns.SNIPPET_SENDER_DISPLAY_DESTINATION;
|
||||
+ " as " + ConversationListViewColumns.SNIPPET_SENDER_DISPLAY_DESTINATION + ", "
|
||||
+ DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.IS_ENTERPRISE
|
||||
+ " as " + ConversationListViewColumns.IS_ENTERPRISE;
|
||||
|
||||
private static final String JOIN_PARTICIPANTS =
|
||||
" LEFT JOIN " + DatabaseHelper.PARTICIPANTS_TABLE + " ON ("
|
||||
@@ -404,6 +407,7 @@ public class ConversationListItemData {
|
||||
static final String SNIPPET_SENDER_FIRST_NAME = "snippet_sender_first_name";
|
||||
static final String SNIPPET_SENDER_DISPLAY_DESTINATION =
|
||||
"snippet_sender_display_destination";
|
||||
static final String IS_ENTERPRISE = ConversationColumns.IS_ENTERPRISE;
|
||||
}
|
||||
|
||||
public static final String[] PROJECTION = {
|
||||
@@ -436,6 +440,7 @@ public class ConversationListItemData {
|
||||
ConversationListViewColumns.MESSAGE_RAW_TELEPHONY_STATUS,
|
||||
ConversationListViewColumns.SNIPPET_SENDER_FIRST_NAME,
|
||||
ConversationListViewColumns.SNIPPET_SENDER_DISPLAY_DESTINATION,
|
||||
ConversationListViewColumns.IS_ENTERPRISE,
|
||||
};
|
||||
|
||||
private static final int INDEX_ID = 0;
|
||||
@@ -467,9 +472,20 @@ public class ConversationListItemData {
|
||||
private static final int INDEX_MESSAGE_RAW_TELEPHONY_STATUS = 26;
|
||||
private static final int INDEX_SNIPPET_SENDER_FIRST_NAME = 27;
|
||||
private static final int INDEX_SNIPPET_SENDER_DISPLAY_DESTINATION = 28;
|
||||
private static final int INDEX_IS_ENTERPRISE = 29;
|
||||
|
||||
private static final String DIVIDER_TEXT = ", ";
|
||||
|
||||
public static boolean hasAnyEnterpriseContact(
|
||||
final List<ParticipantData> participants) {
|
||||
for (final ParticipantData participant : participants) {
|
||||
if (ContactUtil.isEnterpriseContactId(participant.getContactId())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a conversation from the local DB based on the conversation id.
|
||||
*
|
||||
|
||||
@@ -186,8 +186,7 @@ public class ConversationListItemView extends FrameLayout implements OnClickList
|
||||
}
|
||||
|
||||
private void setWorkProfileIcon() {
|
||||
mWorkProfileIconView.setVisibility(
|
||||
mData.isParticipantEnterpriseContact() ? View.VISIBLE : View.GONE);
|
||||
mWorkProfileIconView.setVisibility(mData.isEnterprise() ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
private void setConversationName() {
|
||||
|
||||
Reference in New Issue
Block a user