平台下 packages/apps/Contacts/ 里面
/src/com/android/contacts/editor/ContactEditorBaseFragment.java 中
import android.widget.LinearLayout;
import android.widget.ListPopupWindow;
import android.widget.Toast;
-
+import android.content.DialogInterface;
+import android.app.AlertDialog;
+import android.view.WindowManager;
import com.mediatek.contacts.ExtensionManager;
import com.mediatek.contacts.editor.ContactEditorUtilsEx;
import com.mediatek.contacts.editor.SubscriberAccount;
@@ -148,9 +150,9 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
private static final String KEY_NEED_QUIT_EDIT = "isQuitEdit";
private static final String KEY_SIM_DATA = "simData";
private static final String KEY_OLD_SIM_DATA = "oldsimData";
-
+ private AlertDialog mSmileyDialog;
private static final String KEY_ENABLED = "enabled";
-
+ private boolean mIsSave = false;
// Aggregation PopupWindow
private static final String KEY_AGGREGATION_SUGGESTIONS_RAW_CONTACT_ID =
"aggregationSuggestionsRawContactId";
@@ -894,8 +896,49 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_save:
- Log.d(TAG, "[onOptionsItemSelected]save");
- return save(SaveMode.CLOSE, /* backPressed =*/ true);
+ String name = "";
+ for (int n = 0; n < mState.size(); n++) {
+ RawContactDelta field = mState.get(n);
+ ArrayList<ValuesDelta> dataname = field.getMimeEntries("vnd.android.cursor.item/name");
+ if(dataname != null){
+ for (int m = 0; m < dataname.size(); m++) {
+ name = dataname.get(m).getAsString("data1");
+ Log.i("rmy", "name = "+name);
+ }
+ }
+ }
+
+ String[] projection = { ContactsContract.PhoneLookup.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER };
+ final Cursor cursor = mContext.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,projection,ContactsContract.Contacts.DISPLAY_NAME + " = '"+name+"'", null, null);
+ Log.i("rmy", "cursor.getCount()="+cursor.getCount());
+ if(cursor.getCount() != 0){
+ new AlertDialog.Builder(mContext)
+ .setCancelable(false)
+ .setTitle(R.string.contacts_repeat_save_dialog_title)
+ .setMessage(R.string.contacts_repeat_save_dialog_message)
+ .setPositiveButton("yes", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ Log.i("rmy", "true");
+ Log.i("rmy", "IsSave()="+IsSave());
+ mIsSave = IsSave();
+ //public boolean save(int saveMode, boolean backPressed) {
+ //}
+ dialog.dismiss();
+ cursor.close();
+ }
+ })
+ .setNegativeButton("no", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ Log.i("rmy", "false");
+ dialog.dismiss();
+ cursor.close();
+ }
+ })
+ .show();
+ }else if(cursor.getCount() == 0){
+ mIsSave = IsSave();
+ }
+ return mIsSave;
case R.id.menu_discard:
return revert();
case R.id.menu_delete:
@@ -924,6 +967,10 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
return false;
}
+ public boolean IsSave() {
+ return save(SaveMode.CLOSE, /* backPressed =*/ true);
+ }
+
@Override
public boolean revert() {
Log.d(TAG, "[revert]");
/res/values/strings.xml
<!-- Quick contact display name with phonetic name -->
<string name="quick_contact_display_name_with_phonetic"><xliff:g id="display_name">%s</xliff:g> (<xliff:g id="phonetic_name">%s</xliff:g>)</string>
+
+ <string name="contacts_repeat_save_dialog_title">Prompt</string>
+ <string name="contacts_repeat_save_dialog_message">The contact already exists, continue saving?</string>
</resources>