android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:inputType="textShortMessage|textAutoCorrect|textCapSentences|textImeMultiLine"
+ android:inputType="textShortMessage|textAutoCorrect|textCapSentences|textMultiLine|textImeMultiLine"
+ android:maxLines="4"
android:maxLength="2000"
android:hint="@string/compose_hint"/>
<Button android:id="@+id/btnSend"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_height="fill_parent"
android:text="@string/send" />
</LinearLayout>
</com.android.im.app.ChatView>
* limitations under the License.
*/
-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
+ android:layout_height="wrap_content" >
<LinearLayout
+ android:paddingLeft="15dip"
+ android:paddingTop="15dip"
+ android:paddingRight="15dip"
+ android:paddingBottom="15dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:orientation="horizontal" >
+ android:orientation="vertical" >
<ImageView android:id="@+id/imgAvatar"
- android:layout_alignParentTop="true"
- android:layout_width="58dip"
- android:layout_height="58dip"
- android:layout_marginRight="10dip"
+ android:layout_width="60dip"
+ android:layout_height="60dip"
+ android:padding="2dip"
android:background="@drawable/picture_frame_background" />
- <LinearLayout
+ <TextView android:id="@+id/labelName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_marginRight="10dip"
- android:orientation="vertical" >
+ android:layout_marginTop="12dip"
+ android:textStyle="bold"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/label_username" />
- <TextView android:id="@+id/labelName"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:textStyle="bold"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:text="@string/label_username" />
+ <TextView android:id="@+id/txtName"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"/>
- <TextView android:id="@+id/txtName"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"/>
+ <TextView android:id="@+id/labelStatus"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dip"
+ android:textStyle="bold"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/label_status" />
- <TextView android:id="@+id/labelStatus"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:textStyle="bold"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:text="@string/label_status" />
+ <TextView android:id="@+id/txtStatus"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content" />
- <TextView android:id="@+id/txtStatus"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" />
+ <TextView android:id="@+id/txtStatusText"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="8dip"
+ android:layout_marginTop="4dip"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:maxLines="4"
+ android:textStyle="italic" />
- <TextView android:id="@+id/labelClientType"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:textStyle="bold"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:text="@string/label_client_type" />
+ <TextView android:id="@+id/labelClientType"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dip"
+ android:textStyle="bold"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/label_client_type" />
- <TextView android:id="@+id/txtClientType"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" />
- </LinearLayout>
+ <TextView android:id="@+id/txtClientType"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content" />
</LinearLayout>
- <TextView android:id="@+id/txtStatusText"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginRight="8dip"
- android:layout_marginTop="4dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:maxLines="4"
- android:textStyle="italic" />
-
-</LinearLayout>
+</ScrollView>
<string name="save">"Uložit"</string>
<string name="chat_with">"Chat s uživatelem <xliff:g id="USER">%1$s</xliff:g>"</string>
<string name="me">"Já"</string>
+ <!-- no translation found for compose_hint (1735533889811320962) -->
+ <skip />
<string name="contact_online">"uživatel <xliff:g id="USER">%1$s</xliff:g> je online"</string>
<string name="contact_away">"uživatel <xliff:g id="USER">%1$s</xliff:g> je pryč"</string>
<string name="contact_busy">"<xliff:g id="USER">%1$s</xliff:g> je zaneprázdněn"</string>
<string name="contact_offline">"uživatel <xliff:g id="USER">%1$s</xliff:g> je offline"</string>
<string name="contact_joined">"Uživatel <xliff:g id="USER">%1$s</xliff:g> se připojil"</string>
<string name="contact_left">"uživatel <xliff:g id="USER">%1$s</xliff:g> odešel"</string>
- <string name="time_stamp">"Posláno hh:mm dne EEEE"</string>
+ <!-- no translation found for time_stamp (8952691401963972802) -->
+ <skip />
<string name="send">"Odeslat"</string>
<string name="msg_sent_failed">"Zprávu nelze odeslat."</string>
<string name="disconnected_warning">"Spojení se serverem bylo ztraceno. Zpráva bude odeslána, jakmile se jej podaří obnovit."</string>
<string name="save">"Speichern"</string>
<string name="chat_with">"Mit <xliff:g id="USER">%1$s</xliff:g> chatten"</string>
<string name="me">"Eigene"</string>
+ <!-- no translation found for compose_hint (1735533889811320962) -->
+ <skip />
<string name="contact_online">"<xliff:g id="USER">%1$s</xliff:g> ist online."</string>
<string name="contact_away">"<xliff:g id="USER">%1$s</xliff:g> ist abwesend."</string>
<string name="contact_busy">"<xliff:g id="USER">%1$s</xliff:g> ist beschäftigt."</string>
<string name="contact_offline">"<xliff:g id="USER">%1$s</xliff:g> ist offline."</string>
<string name="contact_joined">"<xliff:g id="USER">%1$s</xliff:g> hat Teilnahme begonnen."</string>
<string name="contact_left">"<xliff:g id="USER">%1$s</xliff:g> hat Chat verlassen."</string>
- <string name="time_stamp">"\'Gesendet\' hh:mm a \'am\' EEEE"</string>
+ <!-- no translation found for time_stamp (8952691401963972802) -->
+ <skip />
<string name="send">"Senden"</string>
<string name="msg_sent_failed">"Die Nachricht kann nicht gesendet werden."</string>
<string name="disconnected_warning">"Verbindung zum Server getrennt. Nachrichten werden gesendet, sobald eine Online-Verbindung besteht."</string>
<string name="save">"Guardar"</string>
<string name="chat_with">"Chat con <xliff:g id="USER">%1$s</xliff:g>"</string>
<string name="me">"Yo"</string>
+ <!-- no translation found for compose_hint (1735533889811320962) -->
+ <skip />
<string name="contact_online">"<xliff:g id="USER">%1$s</xliff:g> está conectado"</string>
<string name="contact_away">"<xliff:g id="USER">%1$s</xliff:g> está ausente"</string>
<string name="contact_busy">"<xliff:g id="USER">%1$s</xliff:g> está ocupado"</string>
<string name="contact_offline">"<xliff:g id="USER">%1$s</xliff:g> está desconectado"</string>
<string name="contact_joined">"<xliff:g id="USER">%1$s</xliff:g> se ha unido al chat"</string>
<string name="contact_left">"<xliff:g id="USER">%1$s</xliff:g> se ha desconectado"</string>
- <string name="time_stamp">"\"Enviado a las\" hh:mm \"el\" EEEE"</string>
+ <!-- no translation found for time_stamp (8952691401963972802) -->
+ <skip />
<string name="send">"Enviar"</string>
<string name="msg_sent_failed">"No se ha podido enviar el mensaje."</string>
<string name="disconnected_warning">"Se ha perdido la conexión con el servidor. Los mensajes se enviarán cuando se restablezca la conexión."</string>
<string name="save">"Enregistrer"</string>
<string name="chat_with">"Chatter avec <xliff:g id="USER">%1$s</xliff:g>"</string>
<string name="me">"Moi"</string>
+ <!-- no translation found for compose_hint (1735533889811320962) -->
+ <skip />
<string name="contact_online">"<xliff:g id="USER">%1$s</xliff:g> est en ligne"</string>
<string name="contact_away">"<xliff:g id="USER">%1$s</xliff:g> est absent"</string>
<string name="contact_busy">"<xliff:g id="USER">%1$s</xliff:g> est occupé"</string>
<string name="contact_offline">"<xliff:g id="USER">%1$s</xliff:g> est hors ligne"</string>
<string name="contact_joined">"<xliff:g id="USER">%1$s</xliff:g> a rejoint la conversation"</string>
<string name="contact_left">"<xliff:g id="USER">%1$s</xliff:g> a quitté la conversation"</string>
- <string name="time_stamp">"\"Envoyé à\" hh:mm \"sur\" EEEE"</string>
+ <!-- no translation found for time_stamp (8952691401963972802) -->
+ <skip />
<string name="send">"Envoyer"</string>
<string name="msg_sent_failed">"Ce message n\'a pas pu être envoyé."</string>
<string name="disconnected_warning">"Connexion au serveur interrompue. Les messages seront transmis lorsque vous serez de nouveau connecté."</string>
<string name="save">"Salva"</string>
<string name="chat_with">"Conversazione con <xliff:g id="USER">%1$s</xliff:g>"</string>
<string name="me">"Io"</string>
+ <!-- no translation found for compose_hint (1735533889811320962) -->
+ <skip />
<string name="contact_online">"<xliff:g id="USER">%1$s</xliff:g> è online"</string>
<string name="contact_away">"<xliff:g id="USER">%1$s</xliff:g> non è al computer"</string>
<string name="contact_busy">"<xliff:g id="USER">%1$s</xliff:g> è occupato"</string>
<string name="contact_offline">"<xliff:g id="USER">%1$s</xliff:g> è offline"</string>
<string name="contact_joined">"<xliff:g id="USER">%1$s</xliff:g> è entrato"</string>
<string name="contact_left">"<xliff:g id="USER">%1$s</xliff:g> è uscito"</string>
- <string name="time_stamp">"\'Inviato alle\' hh:mm a \'il\' EEEE"</string>
+ <!-- no translation found for time_stamp (8952691401963972802) -->
+ <skip />
<string name="send">"Invia"</string>
<string name="msg_sent_failed">"Impossibile inviare il messaggio."</string>
<string name="disconnected_warning">"Connessione al server persa. I messaggi saranno inviati quando verrà ristabilita."</string>
<string name="save">"保存"</string>
<string name="chat_with">"<xliff:g id="USER">%1$s</xliff:g>とチャット"</string>
<string name="me">"自分"</string>
+ <!-- no translation found for compose_hint (1735533889811320962) -->
+ <skip />
<string name="contact_online">"<xliff:g id="USER">%1$s</xliff:g>さんはオンラインです"</string>
<string name="contact_away">"<xliff:g id="USER">%1$s</xliff:g>さんは退席中です"</string>
<string name="contact_busy">"<xliff:g id="USER">%1$s</xliff:g>さんは取り込み中です"</string>
<string name="contact_offline">"<xliff:g id="USER">%1$s</xliff:g>さんはオフラインです"</string>
<string name="contact_joined">"<xliff:g id="USER">%1$s</xliff:g>さんが参加しました"</string>
<string name="contact_left">"<xliff:g id="USER">%1$s</xliff:g>さんが退出しました"</string>
- <string name="time_stamp">"EEEE \'の\' a hh:mm \'に送信\'"</string>
+ <!-- no translation found for time_stamp (8952691401963972802) -->
+ <skip />
<string name="send">"送信"</string>
<string name="msg_sent_failed">"メッセージを送信できませんでした。"</string>
<string name="disconnected_warning">"サーバーとの接続が失われました。オンラインになり次第メッセージを送信します。"</string>
<string name="save">"저장"</string>
<string name="chat_with">"<xliff:g id="USER">%1$s</xliff:g>님과 채팅"</string>
<string name="me">"나"</string>
+ <!-- no translation found for compose_hint (1735533889811320962) -->
+ <skip />
<string name="contact_online">"<xliff:g id="USER">%1$s</xliff:g>님이 온라인 상태입니다."</string>
<string name="contact_away">"<xliff:g id="USER">%1$s</xliff:g>님이 자리에 없습니다."</string>
<string name="contact_busy">"<xliff:g id="USER">%1$s</xliff:g>님이 다른 용무 중입니다."</string>
<string name="contact_offline">"<xliff:g id="USER">%1$s</xliff:g>님이 오프라인 상태입니다."</string>
<string name="contact_joined">"<xliff:g id="USER">%1$s</xliff:g>님이 참여하셨습니다."</string>
<string name="contact_left">"<xliff:g id="USER">%1$s</xliff:g>님이 채팅룸을 나가셨습니다."</string>
- <string name="time_stamp">"\'보낸 시간\' hh:mm \'위치\' EEEE"</string>
+ <!-- no translation found for time_stamp (8952691401963972802) -->
+ <skip />
<string name="send">"보내기"</string>
<string name="msg_sent_failed">"메시지를 보내지 못했습니다."</string>
<string name="disconnected_warning">"서버와의 연결이 끊어졌습니다. 메시지는 온라인 상태일 때 전송됩니다."</string>
<string name="menu_invite_contact">"Inviter…"</string>
<string name="menu_switch_chats">"Bytt mellom samtaler"</string>
<string name="menu_insert_smiley">"Sett inn smilefjes"</string>
- <!-- no translation found for menu_plus (5000617247235760106) -->
- <skip />
+ <string name="menu_plus">"Meny+"</string>
<string name="default_input_title">"Inndata"</string>
<string name="confirm">"Bekreft"</string>
- <string name="confirm_delete_contact">"Kontakten \\\"<xliff:g id="USER">%1$s</xliff:g>\\\" vil bli slettet."</string>
- <string name="confirm_block_contact">"Kontakten \\\"<xliff:g id="USER">%1$s</xliff:g>\\\" vil bli blokkert."</string>
- <string name="confirm_unblock_contact">"Kontakten \\\"<xliff:g id="USER">%1$s</xliff:g>\\\" vil bli avblokkert."</string>
+ <string name="confirm_delete_contact">"Kontakten \\\\\\\"<xliff:g id="USER">%1$s</xliff:g>\\\\\\\" vil bli slettet."</string>
+ <string name="confirm_block_contact">"Kontakten \\\\\\\"<xliff:g id="USER">%1$s</xliff:g>\\\\\\\" vil bli blokkert."</string>
+ <string name="confirm_unblock_contact">"Kontakten \\\\\\\"<xliff:g id="USER">%1$s</xliff:g>\\\\\\\" vil bli avblokkert."</string>
<string name="ok">"OK"</string>
<string name="cancel">"Avbryt"</string>
<string name="yes">"OK"</string>
<string name="remember_password">"Husk passord."</string>
<string name="keep_me_signed_in">"Logg inn automatisk."</string>
<string name="sign_up">"Mangler du konto?"</string>
- <string name="check_auto_sign_in">"Dette valget logger deg automatisk inn hver gang du åpner applikasjonen. For å avmerke valget, logg ut og fjern så haken ved \\\"Logg inn automatis\\\"."</string>
+ <string name="check_auto_sign_in">"Dette valget logger deg automatisk inn hver gang du åpner applikasjonen. For å avmerke valget, logg ut og fjern så haken ved \\\\\\\"Logg inn automatis\\\\\\\"."</string>
<string name="sign_in">"Logg inn"</string>
<string name="signing_in_to">"Logger inn på <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
<string name="signing_in_wait">"Logger inn…"</string>
<string name="save">"Save"</string>
<string name="chat_with">"Samtale med <xliff:g id="USER">%1$s</xliff:g>"</string>
<string name="me">"Meg"</string>
+ <!-- no translation found for compose_hint (1735533889811320962) -->
+ <skip />
<string name="contact_online">"<xliff:g id="USER">%1$s</xliff:g> er tilgjengelig"</string>
<string name="contact_away">"<xliff:g id="USER">%1$s</xliff:g> er borte"</string>
<string name="contact_busy">"<xliff:g id="USER">%1$s</xliff:g> er opptatt"</string>
<string name="empty_chat_list">"Ingen aktive samtaler."</string>
<string name="add_contact_title">"Legg til kontakt"</string>
<string name="input_contact_label">"E-postadresse til den du ønsker å invitere:"</string>
- <!-- no translation found for choose_list_label (1430489448508574145) -->
- <skip />
+ <string name="choose_list_label">"Velg en liste:"</string>
<string name="invite_instruction">"Skriv inn et navn som skal legges til fra kontaktene."</string>
<string name="invite_label">"Send invitasjon"</string>
<string name="setting_title">"Generelle innstillinger"</string>
<string name="subscription_notify_text">"Ny venneinvitasjon fra <xliff:g id="USER">%s</xliff:g>"</string>
<string name="notify_groupchat_label">"Invitasjon til gruppesamtale"</string>
<string name="group_chat_invite_notify_text">"Ny invitasjon til gruppesamtale fra <xliff:g id="USER">%s</xliff:g>"</string>
- <string name="add_contact_success">"Kontakten \\\"<xliff:g id="USER">%1$s</xliff:g>\\\" ble lagt til."</string>
- <string name="delete_contact_success">"Kontakten \\\"<xliff:g id="USER">%1$s</xliff:g>\\\" ble slettet."</string>
- <string name="block_contact_success">"Kontakten \\\"<xliff:g id="USER">%1$s</xliff:g>\\\" ble blokkert."</string>
- <string name="unblock_contact_success">"Kontakten \\\"<xliff:g id="USER">%1$s</xliff:g>\\\" ble avblokkert."</string>
+ <string name="add_contact_success">"Kontakten \\\\\\\"<xliff:g id="USER">%1$s</xliff:g>\\\\\\\" ble lagt til."</string>
+ <string name="delete_contact_success">"Kontakten \\\\\\\"<xliff:g id="USER">%1$s</xliff:g>\\\\\\\" ble slettet."</string>
+ <string name="block_contact_success">"Kontakten \\\\\\\"<xliff:g id="USER">%1$s</xliff:g>\\\\\\\" ble blokkert."</string>
+ <string name="unblock_contact_success">"Kontakten \\\\\\\"<xliff:g id="USER">%1$s</xliff:g>\\\\\\\" ble avblokkert."</string>
<string name="perm_label">"start lynmeldingstjeneste"</string>
<string name="perm_desc">"Tillater applikasjoner å starte lynmeldingstjenesten."</string>
<string name="error">"NB"</string>
<string name="load_contact_list_failed">"Kontaktlisten ble ikke lastet."</string>
<string name="cant_connect_to_server">"Kan ikke koble til tjeneren. Sjekk tilkoblingen."</string>
<string name="contact_already_exist">"<xliff:g id="USER">%1$s</xliff:g> finnes allerede i kontaktlisten."</string>
- <string name="contact_blocked">"Kontakten \\\"<xliff:g id="USER">%1$s</xliff:g>\\\" er nå blokkert."</string>
+ <string name="contact_blocked">"Kontakten \\\\\\\"<xliff:g id="USER">%1$s</xliff:g>\\\\\\\" er nå blokkert."</string>
<string name="contact_not_loaded">"Vent mens kontaktlisten lastes."</string>
<string name="network_error">"Det oppsto en nettfeil."</string>
<string name="service_not_support">"Tjeneren støtter ikke denne funksjonen."</string>
<item>":-!"</item>
<item>":-["</item>
<item>"O:-)"</item>
- <item>":-\\\\"</item>
- <item>":\\\'("</item>
+ <item>":-\\\\\\\\"</item>
+ <item>":\\\\\\\'("</item>
<item>":-X"</item>
<item>":-D"</item>
<item>"o_O"</item>
<string name="save">"Opslaan"</string>
<string name="chat_with">"Chatten met <xliff:g id="USER">%1$s</xliff:g>"</string>
<string name="me">"Ik"</string>
+ <!-- no translation found for compose_hint (1735533889811320962) -->
+ <skip />
<string name="contact_online">"<xliff:g id="USER">%1$s</xliff:g> is online"</string>
<string name="contact_away">"<xliff:g id="USER">%1$s</xliff:g> is afwezig"</string>
<string name="contact_busy">"<xliff:g id="USER">%1$s</xliff:g> is bezet"</string>
<string name="contact_offline">"<xliff:g id="USER">%1$s</xliff:g> is offline"</string>
<string name="contact_joined">"<xliff:g id="USER">%1$s</xliff:g> is online gekomen"</string>
<string name="contact_left">"<xliff:g id="USER">%1$s</xliff:g> is weggegaan"</string>
- <string name="time_stamp">"\'Verzonden om\' uu:mm a \'op\' EEEE"</string>
+ <!-- no translation found for time_stamp (8952691401963972802) -->
+ <skip />
<string name="send">"Verzenden"</string>
<string name="msg_sent_failed">"Dit bericht kan niet worden verzonden."</string>
<string name="disconnected_warning">"Verbinding met de server is verbroken. Berichten worden verzonden wanneer u online bent."</string>
<string name="save">"Zapisz"</string>
<string name="chat_with">"Czatuj z użytkownikiem <xliff:g id="USER">%1$s</xliff:g>"</string>
<string name="me">"Ja"</string>
+ <!-- no translation found for compose_hint (1735533889811320962) -->
+ <skip />
<string name="contact_online">"Użytkownik <xliff:g id="USER">%1$s</xliff:g> jest dostępny"</string>
<string name="contact_away">"Użytkownik <xliff:g id="USER">%1$s</xliff:g> jest niedostępny"</string>
<string name="contact_busy">"Użytkownik <xliff:g id="USER">%1$s</xliff:g> jest zajęty"</string>
<string name="contact_offline">"Użytkownik <xliff:g id="USER">%1$s</xliff:g> jest niedostępny"</string>
<string name="contact_joined">"Użytkownik <xliff:g id="USER">%1$s</xliff:g> dołączył do czatu"</string>
<string name="contact_left">"Użytkownik <xliff:g id="USER">%1$s</xliff:g> opuścił czat"</string>
- <string name="time_stamp">"„Wysłano o” gg:mm „w” EEEE"</string>
+ <!-- no translation found for time_stamp (8952691401963972802) -->
+ <skip />
<string name="send">"Wyślij"</string>
<string name="msg_sent_failed">"Nie można wysłać wiadomości."</string>
<string name="disconnected_warning">"Utracono połączenie z serwerem. Wiadomości zostaną wysłane po przejściu w tryb online."</string>
<string name="save">"Сохранить"</string>
<string name="chat_with">"Чат: <xliff:g id="USER">%1$s</xliff:g>"</string>
<string name="me">"Я"</string>
+ <!-- no translation found for compose_hint (1735533889811320962) -->
+ <skip />
<string name="contact_online">"<xliff:g id="USER">%1$s</xliff:g> в сети"</string>
<string name="contact_away">"<xliff:g id="USER">%1$s</xliff:g> отсутствует"</string>
<string name="contact_busy">"Пользователь <xliff:g id="USER">%1$s</xliff:g> занят"</string>
<string name="contact_offline">"<xliff:g id="USER">%1$s</xliff:g> не в сети"</string>
<string name="contact_joined">"<xliff:g id="USER">%1$s</xliff:g> в чате"</string>
<string name="contact_left">"<xliff:g id="USER">%1$s</xliff:g> не в чате"</string>
- <string name="time_stamp">"\"Отправлено в\" чч:мм EEEE"</string>
+ <!-- no translation found for time_stamp (8952691401963972802) -->
+ <skip />
<string name="send">"Отправить"</string>
<string name="msg_sent_failed">"Не удалось отправить сообщение."</string>
<string name="disconnected_warning">"Подключение к серверу прервано. Сообщения будут отправлены при подключении к Интернету."</string>
<string name="save">"保存"</string>
<string name="chat_with">"与<xliff:g id="USER">%1$s</xliff:g>聊天"</string>
<string name="me">"我"</string>
+ <!-- no translation found for compose_hint (1735533889811320962) -->
+ <skip />
<string name="contact_online">"<xliff:g id="USER">%1$s</xliff:g>在线"</string>
<string name="contact_away">"<xliff:g id="USER">%1$s</xliff:g>离开"</string>
<string name="contact_busy">"<xliff:g id="USER">%1$s</xliff:g>正忙"</string>
<string name="contact_offline">"<xliff:g id="USER">%1$s</xliff:g>脱机"</string>
<string name="contact_joined">"<xliff:g id="USER">%1$s</xliff:g>已加入"</string>
<string name="contact_left">"<xliff:g id="USER">%1$s</xliff:g>已离开"</string>
- <string name="time_stamp">"“发送时间”hh:mm“位于时区”EEEE"</string>
+ <!-- no translation found for time_stamp (8952691401963972802) -->
+ <skip />
<string name="send">"发送"</string>
<string name="msg_sent_failed">"该消息无法发送。"</string>
<string name="disconnected_warning">"与服务器断开连接。消息将在您上线时发送。"</string>
<string name="save">"儲存"</string>
<string name="chat_with">"與 <xliff:g id="USER">%1$s</xliff:g> 交談"</string>
<string name="me">"我"</string>
+ <!-- no translation found for compose_hint (1735533889811320962) -->
+ <skip />
<string name="contact_online">"<xliff:g id="USER">%1$s</xliff:g> 在線上"</string>
<string name="contact_away">"<xliff:g id="USER">%1$s</xliff:g> 顯示離開"</string>
<string name="contact_busy">"<xliff:g id="USER">%1$s</xliff:g> 目前忙碌"</string>
<string name="contact_offline">"<xliff:g id="USER">%1$s</xliff:g> 顯示離線"</string>
<string name="contact_joined">"<xliff:g id="USER">%1$s</xliff:g> 加入交談"</string>
<string name="contact_left">"<xliff:g id="USER">%1$s</xliff:g> 已離開"</string>
- <string name="time_stamp">"hh:mm [傳送] 一個 [on] EEEE"</string>
+ <!-- no translation found for time_stamp (8952691401963972802) -->
+ <skip />
<string name="send">"傳送"</string>
<string name="msg_sent_failed">"訊息無法傳送。"</string>
<string name="disconnected_warning">"與伺服器連線中斷。您的訊息將在下次登入時傳送。"</string>
<string name="signing_in_to">Signing in to <xliff:g id="account">%1$s</xliff:g></string>
<!-- This is the progress/status text displayed in the middle of the sign-in progress screen. -->
<string name="signing_in_wait">Signing in\u2026</string>
+ <!-- Dialog title -->
+ <!-- This is the title for the background data prompt dialog, asking the user whether
+ to enable the background data if it is disabled when launch the IM app -->
+ <string name="bg_data_prompt_title">Background data disabled</string>
+ <!-- Dialog messages: -->
+ <!-- This is the message displayed in the prompt dialog when we launch IM but found
+ the background data is disabled -->
+ <string name="bg_data_prompt_message">
+ <xliff:g id="provider">%1$s</xliff:g> needs background data to be enabled.
+ </string>
+ <!-- Dialog buttons: -->
+ <!-- OK button for the prompt dialog -->
+ <string name="bg_data_prompt_ok">Enable</string>
+ <!-- Cancel button for the prompt dialog -->
+ <string name="bg_data_prompt_cancel">Quit</string>
<!-- These strings are displayed on the contact list page. -->
<!-- The title of the ongoing chat group. May be overrided by the plugin.-->
<string name="menu_add_contact">"Legg til kontakt"</string>
<string name="menu_remove_contact">"Fjern kontakt"</string>
<string name="menu_block_contact">"Blokker kontakt"</string>
- <!-- no translation found for menu_contact_list (7408048984312793527) -->
- <skip />
+ <string name="menu_contact_list">"Kontaktliste"</string>
<string name="menu_start_chat">"Start samtale"</string>
<string name="menu_view_profile">"Vis profil"</string>
<string name="menu_end_conversation">"Avslutt samtale"</string>
<string name="menu_switch_chats">"Bytt mellom samtaler"</string>
<string name="menu_insert_smiley">"Sett inn smilefjes"</string>
<string name="sign_up">"Mangler du konto?"</string>
- <!-- no translation found for check_save_password (3554564072443242779) -->
- <skip />
- <!-- no translation found for buddy_list_title (5837732412636822107) -->
- <skip />
+ <string name="check_save_password">"Av sikkerhetsgrunner, gå til nettstedet og endre passordet om telefonen blir tapt eller stjåler."</string>
+ <string name="buddy_list_title">"Kontaktliste - <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="label_username">"Brukernavn:"</string>
<string name="ongoing_conversation">"Pågående samtaler (<xliff:g id="NUMBER">%1$d</xliff:g>)"</string>
<string name="contact_profile_title">"Kontaktprofil"</string>
<string name="add_contact_title">"Legg til kontakt"</string>
<string name="input_contact_label">"E-postadresse til den du ønsker å invitere:"</string>
<string name="invite_label">"Send invitasjon"</string>
- <!-- no translation found for smiley_names:0 (811476776139578986) -->
- <!-- no translation found for smiley_names:1 (2764363456492352853) -->
- <!-- no translation found for smiley_names:2 (416624764294712159) -->
- <!-- no translation found for smiley_names:3 (7152979870122929989) -->
- <!-- no translation found for smiley_names:4 (5784780866600056743) -->
- <!-- no translation found for smiley_names:5 (5454185003381226454) -->
- <!-- no translation found for smiley_names:6 (1413668617851210441) -->
- <!-- no translation found for smiley_names:7 (232246158381043538) -->
- <!-- no translation found for smiley_names:8 (2440257511131202785) -->
- <!-- no translation found for smiley_names:9 (4571282940807190133) -->
- <!-- no translation found for smiley_names:10 (3260099163589753993) -->
- <!-- no translation found for smiley_names:11 (3042531792218744865) -->
- <!-- no translation found for smiley_names:12 (5227319381647888452) -->
- <!-- no translation found for smiley_names:13 (6952104030566994554) -->
- <!-- no translation found for smiley_names:14 (9199616532683270084) -->
- <!-- no translation found for smiley_names:15 (4338502150254517147) -->
- <!-- no translation found for smiley_names:16 (1014703928300075245) -->
- <!-- no translation found for smiley_texts:0 (6682271134385564589) -->
- <!-- no translation found for smiley_texts:1 (5242689844155076377) -->
- <!-- no translation found for smiley_texts:2 (521632995149320343) -->
- <!-- no translation found for smiley_texts:3 (3442897533435789796) -->
- <!-- no translation found for smiley_texts:4 (682698687423187022) -->
- <!-- no translation found for smiley_texts:5 (1531701168660725626) -->
- <!-- no translation found for smiley_texts:6 (7958357467119008619) -->
- <!-- no translation found for smiley_texts:7 (4638775565490840154) -->
- <!-- no translation found for smiley_texts:8 (6225545209385623235) -->
- <!-- no translation found for smiley_texts:9 (5725425598368680891) -->
- <!-- no translation found for smiley_texts:10 (5365880622794795497) -->
- <!-- no translation found for smiley_texts:11 (8260692119195572132) -->
- <!-- no translation found for smiley_texts:12 (6879285154649424413) -->
- <!-- no translation found for smiley_texts:13 (554517875650930417) -->
- <!-- no translation found for smiley_texts:14 (8169228040168187510) -->
- <!-- no translation found for smiley_texts:15 (5444890977206638254) -->
- <!-- no translation found for smiley_texts:16 (8814856019116253585) -->
+ <string-array name="smiley_names">
+ <item>"Glad"</item>
+ <item>"Trist"</item>
+ <item>"Blunker"</item>
+ <item>"Rekker tunge"</item>
+ <item>"Overrasket"</item>
+ <item>"Kyss"</item>
+ <item>"Roper"</item>
+ <item>"Kul"</item>
+ <item>"Pengemunn"</item>
+ <item>"Fot i munnen"</item>
+ <item>"Flau"</item>
+ <item>"Engel"</item>
+ <item>"Usikker"</item>
+ <item>"Gråter"</item>
+ <item>"Stille som graven"</item>
+ <item>"Ler"</item>
+ <item>"Forvirret"</item>
+ </string-array>
+ <string-array name="smiley_texts">
+ <item>":-)"</item>
+ <item>":-("</item>
+ <item>";-)"</item>
+ <item>":-P"</item>
+ <item>"=-O"</item>
+ <item>":-*"</item>
+ <item>":O"</item>
+ <item>"B-)"</item>
+ <item>":-$"</item>
+ <item>":-!"</item>
+ <item>":-["</item>
+ <item>"O:-)"</item>
+ <item>":-\\\\"</item>
+ <item>":\\\'("</item>
+ <item>":-X"</item>
+ <item>":-D"</item>
+ <item>"o_O"</item>
+ </string-array>
</resources>
try {
if (c.moveToFirst()) {
providerId = c.getLong(c.getColumnIndexOrThrow(Im.Provider._ID));
+ String origFullName = c.getString(
+ c.getColumnIndexOrThrow(Im.Provider.FULLNAME));
+ String origCategory = c.getString(
+ c.getColumnIndexOrThrow(Im.Provider.CATEGORY));
+ String origSignupUrl = c.getString(
+ c.getColumnIndexOrThrow(Im.Provider.SIGNUP_URL));
+ ContentValues values = new ContentValues();
+ if (origFullName == null || !origFullName.equals(providerFullName)) {
+ values.put(Im.Provider.FULLNAME, providerFullName);
+ }
+ if (origCategory == null) {
+ values.put(Im.Provider.CATEGORY, ImApp.IMPS_CATEGORY);
+ }
+ if (origSignupUrl == null || !origSignupUrl.equals(signUpUrl)) {
+ values.put(Im.Provider.SIGNUP_URL, signUpUrl);
+ }
+ if (values.size() > 0) {
+ Uri uri = ContentUris.withAppendedId(Im.Provider.CONTENT_URI, providerId);
+ cr.update(uri, values, null, null);
+ }
} else {
ContentValues values = new ContentValues(3);
values.put(Im.Provider.NAME, providerName);
private Map<Integer, Integer> loadBrandingResource(String className, String srcPath) {
Map retVal = null;
-
+
if (LOCAL_DEBUG) log("loadBrandingResource: className=" + className +
", srcPath=" + srcPath);
*/
return getClassLoader();
}
-
+
private void log(String msg) {
Log.d(TAG, "[ImFrontDoor] " + msg);
}
import android.content.pm.ServiceInfo;
import android.content.res.Resources;
import android.database.Cursor;
+import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.Broadcaster;
import android.os.Bundle;
return mImService != null;
}
+ public boolean isBackgroundDataEnabled() {
+ ConnectivityManager manager =
+ (ConnectivityManager) mApplicationContext.getSystemService(CONNECTIVITY_SERVICE);
+ return manager.getBackgroundDataSetting();
+ }
+
public static long insertOrUpdateAccount(ContentResolver cr,
long providerId, String userName, String pw) {
String selection = Im.Account.PROVIDER + "=? AND " + Im.Account.USERNAME + "=?";
import android.widget.ImageView;
public class SigningInActivity extends Activity {
+ private static final String SYNC_SETTINGS_ACTION = "android.settings.SYNC_SETTINGS";
+ private static final String SYNC_SETTINGS_CATEGORY = "android.intent.category.DEFAULT";
+
private IImConnection mConn;
private IConnectionListener mListener;
private SimpleAlertHandler mHandler;
private ImApp mApp;
private long mProviderId;
+ private long mAccountId;
+ private String mProviderName;
+
+ private String mUserName;
+ private String mPassword;
+
private String mToAddress;
protected static final int ID_CANCEL_SIGNIN = Menu.FIRST + 1;
}
mProviderId = c.getLong(c.getColumnIndexOrThrow(Im.Account.PROVIDER));
- final long accountId = c.getLong(c.getColumnIndexOrThrow(Im.Account._ID));
- final String username = c.getString(c.getColumnIndexOrThrow(Im.Account.USERNAME));
+ mAccountId = c.getLong(c.getColumnIndexOrThrow(Im.Account._ID));
+ mUserName = c.getString(c.getColumnIndexOrThrow(Im.Account.USERNAME));
String pwExtra = intent.getStringExtra(ImApp.EXTRA_INTENT_PASSWORD);
- final String pw = pwExtra != null ? pwExtra
+ mPassword = pwExtra != null ? pwExtra
: c.getString(c.getColumnIndexOrThrow(Im.Account.PASSWORD));
final boolean isActive = c.getInt(c.getColumnIndexOrThrow(Im.Account.ACTIVE)) == 1;
c.close();
mApp = ImApp.getApplication(this);
final ProviderDef provider = mApp.getProvider(mProviderId);
+ mProviderName = provider.mName;
BrandingResources brandingRes = mApp.getBrandingResource(mProviderId);
getWindow().setFeatureDrawable(Window.FEATURE_LEFT_ICON,
BrandingResourceIDs.DRAWABLE_SPLASH_SCREEN));
mHandler = new SimpleAlertHandler(this);
- mListener = new MyConnectionListener(mHandler, provider.mName);
+ mListener = new MyConnectionListener(mHandler);
mApp.callWhenServiceConnected(mHandler, new Runnable() {
public void run() {
if (mApp.serviceConnected()) {
if (!isActive) {
- activateAccount(mProviderId, accountId);
+ activateAccount(mProviderId, mAccountId);
}
- signInAccount(provider, accountId, username, pw);
+ signInAccount();
}
}
});
setResult(RESULT_OK);
}
- void signInAccount(ProviderDef provider, long accountId,
- String username, String pw) {
+ @Override
+ protected void onRestart() {
+ super.onRestart();
+
+ if (mApp.serviceConnected() && mApp.isBackgroundDataEnabled()) {
+ signInAccount();
+ } else {
+ if(Log.isLoggable(ImApp.LOG_TAG, Log.DEBUG)) {
+ log("onRestart: service disconnected or background data disabled...");
+ }
+ setResult(RESULT_CANCELED);
+ finish();
+ }
+ }
+
+ void signInAccount() {
try {
- IImConnection conn = mApp.getConnection(provider.mId);
+ IImConnection conn = mApp.getConnection(mProviderId);
if (conn != null) {
mConn = conn;
// register listener before get state so that we won't miss
if (state != ImConnection.LOGGING_IN) {
// already signed in or failed
conn.unregisterConnectionListener(mListener);
- handleConnectionEvent(provider.mName, state, null);
+ handleConnectionEvent(state, null);
}
} else {
- mConn = mApp.createConnection(provider.mId);
- mConn.registerConnectionListener(mListener);
- mConn.login(accountId, username, pw, true);
+ if (mApp.isBackgroundDataEnabled()) {
+ mConn = mApp.createConnection(mProviderId);
+ mConn.registerConnectionListener(mListener);
+ mConn.login(mAccountId, mUserName, mPassword, true);
+ } else {
+ promptForBackgroundDataSetting();
+ return;
+ }
}
} catch (RemoteException e) {
}
@Override
- protected void onDestroy() {
+ protected void onStop() {
+ super.onStop();
+
if (mApp != null) {
mApp.removePendingCall(mHandler);
}
Log.w(ImApp.LOG_TAG, "<SigningInActivity> Connection disappeared!");
}
}
- super.onDestroy();
+ // When background data is enabled, we don't want this activity in the backlist
+ // so we always call finish() when we leave signing in screen. Otherwise, we
+ // don't finish since we need to keep signing in if user choose to enable background.
+ if (mApp.isBackgroundDataEnabled()) {
+ finish();
+ }
}
@Override
}
}
- void handleConnectionEvent(String serviceName, int state, ImErrorInfo error) {
+ /**
+ * Popup a dialog to ask the user whether he/she wants to enable
+ * background connection to continue. If yes, enable the setting
+ * and broadcast the change. Otherwise, quit the signing in window
+ * immediately.
+ */
+ private void promptForBackgroundDataSetting() {
+ new AlertDialog.Builder(SigningInActivity.this)
+ .setTitle(R.string.bg_data_prompt_title)
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .setMessage(getString(R.string.bg_data_prompt_message, mProviderName))
+ .setPositiveButton(R.string.bg_data_prompt_ok, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ Intent intent = new Intent(SYNC_SETTINGS_ACTION);
+ intent.addCategory(SYNC_SETTINGS_CATEGORY);
+ startActivity(intent);
+ }
+ })
+ .setNegativeButton(R.string.bg_data_prompt_cancel,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ setResult(RESULT_CANCELED);
+ finish();
+ }
+ })
+ .show();
+ }
+
+ void handleConnectionEvent(int state, ImErrorInfo error) {
if (isFinishing()) {
return;
}
if(session == null) {
session = manager.createChatSession(mToAddress);
}
- Uri data = ContentUris.withAppendedId(Im.Chats.CONTENT_URI, session.getId());
+ Uri data = ContentUris.withAppendedId(Im.Chats.CONTENT_URI, session.getId());
intent = new Intent(Intent.ACTION_VIEW, data);
intent.putExtra("from", mToAddress);
intent.putExtra("providerId", mProviderId);
Resources r = getResources();
new AlertDialog.Builder(this)
.setTitle(R.string.error)
- .setMessage(r.getString(R.string.login_service_failed, serviceName,
+ .setMessage(r.getString(R.string.login_service_failed, mProviderName,
error == null? "": ErrorResUtils.getErrorRes(r, error.getCode())))
.setPositiveButton(R.string.ok,
new DialogInterface.OnClickListener() {
}
private final class MyConnectionListener extends ConnectionListenerAdapter {
- private final String mServiceName;
-
- MyConnectionListener(Handler handler, String serviceName) {
+ MyConnectionListener(Handler handler) {
super(handler);
- mServiceName = serviceName;
}
@Override
public void onConnectionStateChange(IImConnection connection,
int state, ImErrorInfo error) {
- handleConnectionEvent(mServiceName, state, error);
+ handleConnectionEvent(state, error);
}
}
}
import java.util.Vector;
import android.app.Service;
+import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
+import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
private int mNetworkType;
private boolean mNeedCheckAutoLogin;
+ private boolean mBackgroundDataEnabled;
+
+ private SettingsMonitor mSettingsMonitor;
+
Vector<ImConnectionAdapter> mConnections;
final RemoteCallbackList<IConnectionCreationListener> mRemoteListeners
= new RemoteCallbackList<IConnectionCreationListener>();
mNetworkConnectivityListener.registerHandler(mServiceHandler, EVENT_NETWORK_STATE_CHANGED);
mNetworkConnectivityListener.startListening(this);
+ mSettingsMonitor = new SettingsMonitor();
+
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED);
+ registerReceiver(mSettingsMonitor, intentFilter);
+
+ ConnectivityManager manager
+ = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
+ setBackgroundData(manager.getBackgroundDataSetting());
+
findAvaiablePlugins();
AndroidSystemService.getInstance().initialize(this);
}
mNetworkConnectivityListener.unregisterHandler(mServiceHandler);
mNetworkConnectivityListener.stopListening();
mNetworkConnectivityListener = null;
+
+ unregisterReceiver(mSettingsMonitor);
}
@Override
return mNetworkConnectivityListener.getState() == State.CONNECTED;
}
+ private boolean isBackgroundDataEnabled() {
+ return mBackgroundDataEnabled;
+ }
+
+ private void setBackgroundData(boolean flag) {
+ mBackgroundDataEnabled = flag;
+ }
+
+ void handleBackgroundDataSettingChange(){
+ if (!isBackgroundDataEnabled()) {
+ for (ImConnectionAdapter conn : mConnections) {
+ conn.logout();
+ }
+ }
+ }
+
void networkStateChanged() {
if (mNetworkConnectivityListener == null) {
return;
};
+ private final class SettingsMonitor extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+
+ if (ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED.equals(action)) {
+ ConnectivityManager manager =
+ (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
+ setBackgroundData(manager.getBackgroundDataSetting());
+ handleBackgroundDataSettingChange();
+ }
+ }
+ }
+
private final class ServiceHandler extends Handler {
public ServiceHandler() {
}