Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事にトラックバックする(FC2ブログユーザー)
http://garlicg.blog92.fc2.com/tb.php/16-4479d960

トラックバック

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

Garlic電話帳 グループ完全削除

IS04で本体連絡先グループを作成・削除した場合、 デフォルトの電話帳で削除したはずのグループが残っている・消えないとのコメントを頂きました。

group2.png
よくわかんないなーと思いきや、GalaxyのDOCOMOアカウントでもその現象が起きていました。
「どこも」は削除したはずのグループです。


group1.png
色々と調べて、Garlic電話帳にグループ完全削除機能を実装しました。
端末内部に残っている削除したはずのグループ一覧を表示、完全削除します


group3.png
「どこも」がデフォルト電話帳から消えました!

Garlic電話帳ver1.5.3から完全削除機能を搭載しているので、気になっている方は試して見て下さい。
追記:Googleアカウントなど同期機能があるものは、同期をONにすることで通常は消えます。グループ完全削除をした場合にサーバー上にグループデータが残ってしまいます。
同期機能がないアカウント(本体など)のグループを完全削除して下さい。
こっからはソースレベルの話ですが、結論から言うと同期アダプタを実装していないグループは削除したときに、端末内部に残ります。

私がグループを削除していた処理はこんな感じです
リファレンスを見ると、


public static final String DELETED

Since: API Level 5
The "deleted" flag: "0" by default, "1" if the row has been marked for deletion. When delete(Uri, String, String[]) is called on a group, it is marked for deletion. The sync adaptor deletes the group on the server and then calls ContactResolver.delete once more, this time setting the the CALLER_IS_SYNCADAPTER query parameter to finalize the data removal.

ここっぽい。DELETEDフラグが1にマークされてるグループを同期アダプタがサーバーから削除してもっかいContactResolver.deleteが呼ばれるよ。そのときCALLER_IS_SYNCADAPTERがどーのこーの。(和訳てきとう)

SyncAdapterが実装されてないアカウントはグループが完全に削除できないみたいです。deleteフラグが1になるだけ。試してみたところ、上の削除処理で、テーブルから完全に削除されるのはGoogleのグループだけでした。
別に問題はないですが、内部に消えないデータが残ってるのって気持ち悪いです。

完全削除の関数はこんな感じ


CALLER_IS_SYNCADAPTERのクエリパラメータを付与して、SyncAdapterが行うべき処理をさせています。
注意が必要なのは、Goolgeグループなどの同期機能があるグループを削除した場合、同期が働く前にグループを削除しちゃうので、Googleサーバー上にグループデータが残ってしまいます。なので通常はクエリパラメータを付与しない削除、そして完全削除の画面を別途設けてpurgeGroup関数を使っています。
上の処理で実装したものはGalaxyでは問題ありませんが、他端末はどう動作するかわかりません。 問題があればまた記事書きます。
この記事にトラックバックする(FC2ブログユーザー)
http://garlicg.blog92.fc2.com/tb.php/16-4479d960

トラックバック

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。