Full Code of pfleidi/yaxim for AI

master 3795e161c947 cached
195 files
1.2 MB
356.5k tokens
951 symbols
1 requests
Download .txt
Showing preview only (1,385K chars total). Download the full file or copy to clipboard to get everything.
Repository: pfleidi/yaxim
Branch: master
Commit: 3795e161c947
Files: 195
Total size: 1.2 MB

Directory structure:
gitextract_2gxd348s/

├── .fbprefs
├── .gitignore
├── .gitmodules
├── AndroidManifest.xml
├── ChangeLog
├── LICENSE.txt
├── README.md
├── base.rdf.xml
├── bruno/
│   ├── res/
│   │   ├── drawable/
│   │   │   ├── ic_action_contacts_all.xml
│   │   │   ├── ic_action_contacts_online.xml
│   │   │   └── ic_action_person_add.xml
│   │   └── values/
│   │       ├── colors.xml
│   │       ├── prefArrays.xml
│   │       ├── strings.xml
│   │       ├── styles.xml
│   │       └── themes.xml
│   └── src/
│       └── org/
│           └── yaxim/
│               └── androidclient/
│                   └── FlavorConfig.java
├── bruno.rdf.sh
├── build.gradle
├── build.xml
├── export-icons.sh
├── free/
│   └── src/
│       └── org/
│           └── yaxim/
│               └── androidclient/
│                   └── service/
│                       ├── InstallReferrerReceiver.java
│                       └── PushManager.java
├── libs/
│   ├── android-remote-stacktrace-logger.aar
│   ├── jzlib.jar
│   └── libidn-1.26.jar
├── play/
│   ├── AndroidManifest.xml
│   ├── res/
│   │   └── values/
│   │       └── push.xml
│   └── src/
│       └── org/
│           └── yaxim/
│               └── androidclient/
│                   └── service/
│                       ├── InstallReferrerReceiver.java
│                       ├── PushManager.java
│                       └── PushMessageReceiver.java
├── proguard.cfg
├── project.properties
├── rdf.sh
├── res/
│   ├── drawable/
│   │   ├── count_bcg.xml
│   │   ├── group_indicator.xml
│   │   ├── ic_action_attach.xml
│   │   ├── ic_action_camera.xml
│   │   ├── ic_action_contacts_all.xml
│   │   ├── ic_action_contacts_online.xml
│   │   ├── ic_action_file.xml
│   │   ├── ic_action_person_add.xml
│   │   ├── ic_action_photo.xml
│   │   ├── ic_action_search.xml
│   │   ├── ic_status_available.xml
│   │   ├── ic_status_away.xml
│   │   ├── ic_status_chat.xml
│   │   ├── ic_status_dnd.xml
│   │   ├── ic_status_offline.xml
│   │   ├── ic_status_subscribe.xml
│   │   ├── ic_status_unknown.xml
│   │   └── ic_status_xa.xml
│   ├── layout/
│   │   ├── aboutview.xml
│   │   ├── activity_entitylist.xml
│   │   ├── addrosteritemdialog.xml
│   │   ├── chat_action_title.xml
│   │   ├── chatrow.xml
│   │   ├── edittext_dialog.xml
│   │   ├── firststartdialog.xml
│   │   ├── groupnameview.xml
│   │   ├── main.xml
│   │   ├── mainchat.xml
│   │   ├── mainchild_row.xml
│   │   ├── maingroup_row.xml
│   │   ├── moverosterentrytogroupview.xml
│   │   ├── muc_new_dialog.xml
│   │   ├── password_view.xml
│   │   ├── qrcode_dialog.xml
│   │   ├── status_action_provider.xml
│   │   ├── status_spinner_item.xml
│   │   └── statusview.xml
│   ├── menu/
│   │   ├── chat_contextmenu.xml
│   │   ├── contact_options.xml
│   │   ├── muc_options.xml
│   │   ├── noncontact_options.xml
│   │   ├── roster_group_contextmenu.xml
│   │   ├── roster_item_contextmenu.xml
│   │   └── roster_options.xml
│   ├── values/
│   │   ├── array.xml
│   │   ├── attrs.xml
│   │   ├── developers.xml
│   │   ├── prefArrays.xml
│   │   ├── servers.xml
│   │   ├── strings.xml
│   │   ├── styles.xml
│   │   └── themes.xml
│   ├── values-cs/
│   │   └── strings.xml
│   ├── values-de/
│   │   └── strings.xml
│   ├── values-el/
│   │   └── strings.xml
│   ├── values-en-rGB/
│   │   └── strings.xml
│   ├── values-es/
│   │   └── strings.xml
│   ├── values-eu/
│   │   └── strings.xml
│   ├── values-fi/
│   │   └── strings.xml
│   ├── values-fr/
│   │   └── strings.xml
│   ├── values-he/
│   │   └── strings.xml
│   ├── values-hi/
│   │   └── strings.xml
│   ├── values-hr/
│   │   └── strings.xml
│   ├── values-id/
│   │   └── strings.xml
│   ├── values-it/
│   │   └── strings.xml
│   ├── values-ja/
│   │   └── strings.xml
│   ├── values-kn/
│   │   └── strings.xml
│   ├── values-lt/
│   │   └── strings.xml
│   ├── values-nb/
│   │   └── strings.xml
│   ├── values-nl/
│   │   └── strings.xml
│   ├── values-pl/
│   │   └── strings.xml
│   ├── values-pt/
│   │   └── strings.xml
│   ├── values-pt-rBR/
│   │   └── strings.xml
│   ├── values-ro/
│   │   └── strings.xml
│   ├── values-ru/
│   │   └── strings.xml
│   ├── values-sk/
│   │   └── strings.xml
│   ├── values-sr/
│   │   └── strings.xml
│   ├── values-sv/
│   │   └── strings.xml
│   ├── values-tr/
│   │   └── strings.xml
│   ├── values-uk/
│   │   └── strings.xml
│   ├── values-uz/
│   │   └── strings.xml
│   ├── values-zh-rCN/
│   │   └── strings.xml
│   └── xml/
│       ├── accountprefs.xml
│       ├── automotive_app_desc.xml
│       ├── mainprefs.xml
│       ├── notificationprefs.xml
│       └── provider_paths.xml
├── settings.gradle
├── src/
│   ├── eu/
│   │   └── siacs/
│   │       └── conversations/
│   │           ├── ui/
│   │           │   └── text/
│   │           │       ├── DividerSpan.java
│   │           │       └── QuoteSpan.java
│   │           └── utils/
│   │               ├── ImStyleParser.java
│   │               └── StylingHelper.java
│   └── org/
│       └── yaxim/
│           └── androidclient/
│               ├── FileHttpUploadTask.java
│               ├── IXMPPRosterCallback.aidl
│               ├── MainWindow.java
│               ├── ThemedActivity.java
│               ├── XMPPRosterServiceAdapter.java
│               ├── YaximApplication.java
│               ├── chat/
│               │   ├── ChatWindow.java
│               │   ├── MUCChatWindow.java
│               │   ├── XMPPChatServiceAdapter.java
│               │   └── XMPPMucServiceAdapter.java
│               ├── data/
│               │   ├── ChatHelper.java
│               │   ├── ChatProvider.java
│               │   ├── ChatRoomHelper.java
│               │   ├── EntityInfo.java
│               │   ├── EntityList.java
│               │   ├── RosterProvider.java
│               │   └── YaximConfiguration.java
│               ├── dialogs/
│               │   ├── AddRosterItemDialog.java
│               │   ├── ChangePasswordDialog.java
│               │   ├── ChangeStatusDialog.java
│               │   ├── ConfirmDialog.java
│               │   ├── EditMUCDialog.java
│               │   ├── FirstStartDialog.java
│               │   └── GroupNameView.java
│               ├── exceptions/
│               │   ├── YaximXMPPAdressMalformedException.java
│               │   └── YaximXMPPException.java
│               ├── list/
│               │   ├── EntityListActivity.java
│               │   ├── EntityListAdapter.java
│               │   ├── EntityListLoader.java
│               │   ├── EntityViewLoader.java
│               │   ├── SearchActivity.java
│               │   └── ServiceDiscoveryActivity.java
│               ├── packet/
│               │   ├── InviteRegister.java
│               │   ├── MuclumbusIQ.java
│               │   ├── MuclumbusResult.java
│               │   ├── Oob.java
│               │   └── PreAuth.java
│               ├── preferences/
│               │   ├── AccountPrefs.java
│               │   ├── AppCompatPreferenceActivity.java
│               │   ├── EditTextPreferenceWithValue.java
│               │   ├── MainPrefs.java
│               │   └── NotificationPrefs.java
│               ├── service/
│               │   ├── GenericService.java
│               │   ├── IXMPPChatService.aidl
│               │   ├── IXMPPMucService.aidl
│               │   ├── IXMPPRosterService.aidl
│               │   ├── InvitationTask.java
│               │   ├── MUCController.java
│               │   ├── Smackable.java
│               │   ├── SmackableImp.java
│               │   ├── XMPPService.java
│               │   ├── XMPPServiceCallback.java
│               │   └── YaximBroadcastReceiver.java
│               ├── util/
│               │   ├── AdapterConstants.java
│               │   ├── ConnectionState.java
│               │   ├── ErrorReportManager.java
│               │   ├── FileHelper.java
│               │   ├── JULHandler.java
│               │   ├── LogConstants.java
│               │   ├── MessageStylingHelper.java
│               │   ├── PreferenceConstants.java
│               │   ├── SimpleCursorTreeAdapter.java
│               │   ├── StatusMode.java
│               │   ├── XEP0392Helper.java
│               │   └── XMPPHelper.java
│               └── widget/
│                   └── AutoCompleteJidEdit.java
├── template/
│   └── version.xml
├── yaxim/
│   └── src/
│       └── org/
│           └── yaxim/
│               └── androidclient/
│                   └── FlavorConfig.java
└── yaxim.rdf.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .fbprefs
================================================
#FindBugs User Preferences
#Wed Mar 25 22:24:48 CET 2009
detectorAppendingToAnObjectOutputStream=AppendingToAnObjectOutputStream|true
detectorBadAppletConstructor=BadAppletConstructor|false
detectorBadResultSetAccess=BadResultSetAccess|true
detectorBadSyntaxForRegularExpression=BadSyntaxForRegularExpression|true
detectorBadUseOfReturnValue=BadUseOfReturnValue|true
detectorBadlyOverriddenAdapter=BadlyOverriddenAdapter|true
detectorBooleanReturnNull=BooleanReturnNull|true
detectorCallToUnsupportedMethod=CallToUnsupportedMethod|true
detectorCheckImmutableAnnotation=CheckImmutableAnnotation|true
detectorCheckTypeQualifiers=CheckTypeQualifiers|true
detectorCloneIdiom=CloneIdiom|true
detectorComparatorIdiom=ComparatorIdiom|true
detectorConfusedInheritance=ConfusedInheritance|true
detectorConfusionBetweenInheritedAndOuterMethod=ConfusionBetweenInheritedAndOuterMethod|true
detectorCrossSiteScripting=CrossSiteScripting|true
detectorDoInsideDoPrivileged=DoInsideDoPrivileged|true
detectorDontCatchIllegalMonitorStateException=DontCatchIllegalMonitorStateException|true
detectorDontUseEnum=DontUseEnum|true
detectorDroppedException=DroppedException|true
detectorDumbMethodInvocations=DumbMethodInvocations|true
detectorDumbMethods=DumbMethods|true
detectorDuplicateBranches=DuplicateBranches|true
detectorEmptyZipFileEntry=EmptyZipFileEntry|true
detectorEqualsOperandShouldHaveClassCompatibleWithThis=EqualsOperandShouldHaveClassCompatibleWithThis|true
detectorFinalizerNullsFields=FinalizerNullsFields|true
detectorFindBadCast2=FindBadCast2|true
detectorFindBadForLoop=FindBadForLoop|true
detectorFindCircularDependencies=FindCircularDependencies|false
detectorFindDeadLocalStores=FindDeadLocalStores|true
detectorFindDoubleCheck=FindDoubleCheck|true
detectorFindEmptySynchronizedBlock=FindEmptySynchronizedBlock|true
detectorFindFieldSelfAssignment=FindFieldSelfAssignment|true
detectorFindFinalizeInvocations=FindFinalizeInvocations|true
detectorFindFloatEquality=FindFloatEquality|true
detectorFindHEmismatch=FindHEmismatch|true
detectorFindInconsistentSync2=FindInconsistentSync2|true
detectorFindJSR166LockMonitorenter=FindJSR166LockMonitorenter|true
detectorFindLocalSelfAssignment2=FindLocalSelfAssignment2|true
detectorFindMaskedFields=FindMaskedFields|true
detectorFindMismatchedWaitOrNotify=FindMismatchedWaitOrNotify|true
detectorFindNakedNotify=FindNakedNotify|true
detectorFindNonSerializableStoreIntoSession=FindNonSerializableStoreIntoSession|true
detectorFindNonSerializableValuePassedToWriteObject=FindNonSerializableValuePassedToWriteObject|true
detectorFindNonShortCircuit=FindNonShortCircuit|true
detectorFindNullDeref=FindNullDeref|true
detectorFindNullDerefsInvolvingNonShortCircuitEvaluation=FindNullDerefsInvolvingNonShortCircuitEvaluation|true
detectorFindOpenStream=FindOpenStream|true
detectorFindPuzzlers=FindPuzzlers|true
detectorFindRefComparison=FindRefComparison|true
detectorFindReturnRef=FindReturnRef|true
detectorFindRunInvocations=FindRunInvocations|true
detectorFindSelfComparison=FindSelfComparison|true
detectorFindSelfComparison2=FindSelfComparison2|true
detectorFindSleepWithLockHeld=FindSleepWithLockHeld|true
detectorFindSpinLoop=FindSpinLoop|true
detectorFindSqlInjection=FindSqlInjection|true
detectorFindTwoLockWait=FindTwoLockWait|true
detectorFindUncalledPrivateMethods=FindUncalledPrivateMethods|true
detectorFindUnconditionalWait=FindUnconditionalWait|true
detectorFindUninitializedGet=FindUninitializedGet|true
detectorFindUnrelatedTypesInGenericContainer=FindUnrelatedTypesInGenericContainer|true
detectorFindUnreleasedLock=FindUnreleasedLock|true
detectorFindUnsatisfiedObligation=FindUnsatisfiedObligation|true
detectorFindUnsyncGet=FindUnsyncGet|true
detectorFindUselessControlFlow=FindUselessControlFlow|true
detectorFormatStringChecker=FormatStringChecker|true
detectorHugeSharedStringConstants=HugeSharedStringConstants|true
detectorIDivResultCastToDouble=IDivResultCastToDouble|true
detectorIncompatMask=IncompatMask|true
detectorInconsistentAnnotations=InconsistentAnnotations|true
detectorInefficientMemberAccess=InefficientMemberAccess|false
detectorInefficientToArray=InefficientToArray|true
detectorInfiniteLoop=InfiniteLoop|true
detectorInfiniteRecursiveLoop=InfiniteRecursiveLoop|true
detectorInfiniteRecursiveLoop2=InfiniteRecursiveLoop2|false
detectorInheritanceUnsafeGetResource=InheritanceUnsafeGetResource|true
detectorInitializationChain=InitializationChain|true
detectorInstantiateStaticClass=InstantiateStaticClass|true
detectorInvalidJUnitTest=InvalidJUnitTest|true
detectorIteratorIdioms=IteratorIdioms|true
detectorLazyInit=LazyInit|true
detectorLoadOfKnownNullValue=LoadOfKnownNullValue|true
detectorMethodReturnCheck=MethodReturnCheck|true
detectorMultithreadedInstanceAccess=MultithreadedInstanceAccess|true
detectorMutableLock=MutableLock|true
detectorMutableStaticFields=MutableStaticFields|true
detectorNaming=Naming|true
detectorNumberConstructor=NumberConstructor|true
detectorOverridingEqualsNotSymmetrical=OverridingEqualsNotSymmetrical|true
detectorPreferZeroLengthArrays=PreferZeroLengthArrays|true
detectorPublicSemaphores=PublicSemaphores|false
detectorQuestionableBooleanAssignment=QuestionableBooleanAssignment|true
detectorReadReturnShouldBeChecked=ReadReturnShouldBeChecked|true
detectorRedundantInterfaces=RedundantInterfaces|true
detectorRepeatedConditionals=RepeatedConditionals|true
detectorRuntimeExceptionCapture=RuntimeExceptionCapture|true
detectorSerializableIdiom=SerializableIdiom|true
detectorStartInConstructor=StartInConstructor|true
detectorStaticCalendarDetector=StaticCalendarDetector|true
detectorStringConcatenation=StringConcatenation|true
detectorSuperfluousInstanceOf=SuperfluousInstanceOf|true
detectorSuspiciousThreadInterrupted=SuspiciousThreadInterrupted|true
detectorSwitchFallthrough=SwitchFallthrough|true
detectorSynchronizeAndNullCheckField=SynchronizeAndNullCheckField|true
detectorSynchronizeOnClassLiteralNotGetClass=SynchronizeOnClassLiteralNotGetClass|true
detectorSynchronizingOnContentsOfFieldToProtectField=SynchronizingOnContentsOfFieldToProtectField|true
detectorURLProblems=URLProblems|true
detectorUncallableMethodOfAnonymousClass=UncallableMethodOfAnonymousClass|true
detectorUnnecessaryMath=UnnecessaryMath|true
detectorUnreadFields=UnreadFields|true
detectorUseObjectEquals=UseObjectEquals|false
detectorUselessSubclassMethod=UselessSubclassMethod|false
detectorVarArgsProblems=VarArgsProblems|true
detectorVolatileUsage=VolatileUsage|true
detectorWaitInLoop=WaitInLoop|true
detectorWrongMapIterator=WrongMapIterator|true
detectorXMLFactoryBypass=XMLFactoryBypass|true
detector_threshold=2
effort=default
filter_settings=Medium|BAD_PRACTICE,CORRECTNESS,EXPERIMENTAL,I18N,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,SECURITY,STYLE|false
filter_settings_neg=|
run_at_full_build=true


================================================
FILE: .gitignore
================================================
.classpath
.project
.settings
bin/
build/
gen/
*.class
local.properties
build.properties
res/values/version.xml
lint.xml
play-publish-credentials.json


================================================
FILE: .gitmodules
================================================
[submodule "MemorizingTrustManager"]
	path = MemorizingTrustManager
	url = git://github.com/ge0rg/MemorizingTrustManager.git


================================================
FILE: AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" >

	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
	<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
	<uses-permission android:name="android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING" />
	<uses-permission android:name="android.permission.INTERNET" />
	<uses-permission android:name="android.permission.NFC" />
	<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
	<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
	<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
	<uses-permission android:name="android.permission.VIBRATE" />
	<uses-permission android:name="android.permission.WAKE_LOCK" />
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

	<application android:icon="@drawable/icon"
		android:name=".YaximApplication"
		android:theme="@style/YaximDarkTheme"
		android:supportsRtl="true"
		android:label="@string/app_name">

		<uses-library android:name="org.apache.http.legacy" android:required="false"/>

		<activity android:name=".MainWindow" android:label="@string/app_name"
			android:launchMode="singleTask"
			android:exported="true"
			android:clearTaskOnLaunch="true"
			android:configChanges="orientation|keyboardHidden|screenSize">
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.category.LAUNCHER" />
			</intent-filter>
			<intent-filter android:icon="@drawable/icon" android:label="@string/app_name">
				<action android:name="android.intent.action.SEND"></action>
				<category android:name="android.intent.category.DEFAULT"></category>
				<data android:mimeType="text/*"></data>
			</intent-filter>
			<intent-filter android:icon="@drawable/icon" android:label="@string/app_name">
				<action android:name="android.intent.action.SEND"></action>
				<category android:name="android.intent.category.DEFAULT"></category>
				<data android:mimeType="*/*"></data>
			</intent-filter>
			<intent-filter android:icon="@drawable/icon" android:label="@string/Menu_addFriend">
				<action android:name="android.intent.action.SENDTO" />
				<category android:name="android.intent.category.DEFAULT" />
				<category android:name="android.intent.category.BROWSABLE" />
				<data android:host="jabber" android:scheme="imto" />
			</intent-filter>
			<intent-filter android:icon="@drawable/icon" android:label="@string/Menu_addFriend">
				<action android:name="android.intent.action.VIEW" />
				<category android:name="android.intent.category.DEFAULT" />
				<category android:name="android.intent.category.BROWSABLE" />
				<data android:scheme="xmpp" />
			</intent-filter>
			<intent-filter android:icon="@drawable/icon" android:label="@string/Menu_addFriend">
				<action android:name="android.intent.action.VIEW" />
				<category android:name="android.intent.category.DEFAULT" />
				<category android:name="android.intent.category.BROWSABLE" />
				<data android:scheme="https" android:host="join.jabber.network" />
				<data android:scheme="https" android:host="xmpp.link" />
				<data android:pathPrefix="/" />
			</intent-filter>
			<intent-filter android:icon="@drawable/icon" android:label="@string/Menu_addFriend">
				<action android:name="android.intent.action.VIEW" />
				<category android:name="android.intent.category.DEFAULT" />
				<category android:name="android.intent.category.BROWSABLE" />
				<data android:scheme="https" android:host="yax.im" />
				<data android:scheme="https" android:host="conversations.im" />
				<data android:pathPrefix="/i/" />
				<data android:pathPrefix="/j/" />
			</intent-filter>
			<intent-filter android:icon="@drawable/icon" android:label="@string/Menu_addFriend">
				<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
				<category android:name="android.intent.category.DEFAULT"/>
				<data android:scheme="xmpp"/>
			</intent-filter>
		</activity>

		<activity android:name=".chat.ChatWindow" android:label="@string/app_name"
			android:parentActivityName=".MainWindow"
			android:configChanges="orientation|keyboardHidden|screenSize"
			android:windowSoftInputMode="stateHidden">
			<meta-data
				android:name="android.support.PARENT_ACTIVITY"
				android:value=".MainWindow"/>
		</activity>

		<activity android:name=".chat.MUCChatWindow" android:label="@string/app_name"
			android:parentActivityName=".MainWindow"
			android:configChanges="orientation|keyboardHidden|screenSize"
			android:windowSoftInputMode="stateHidden">
			<meta-data
				android:name="android.support.PARENT_ACTIVITY"
				android:value=".MainWindow"/>
		</activity>

		<activity android:name=".list.EntityListActivity" android:label="@string/app_name"
			android:parentActivityName=".MainWindow"
			android:configChanges="orientation|keyboardHidden|screenSize"
			android:windowSoftInputMode="stateHidden">
			<meta-data
				android:name="android.support.PARENT_ACTIVITY"
				android:value=".MainWindow"/>
		</activity>
		<activity android:name=".list.ServiceDiscoveryActivity" android:label="@string/title_service_disco"
			android:parentActivityName=".MainWindow"
			android:configChanges="orientation|keyboardHidden|screenSize"
			android:windowSoftInputMode="stateHidden">
			<meta-data
				android:name="android.support.PARENT_ACTIVITY"
				android:value=".MainWindow"/>
		</activity>
		<activity android:name=".list.SearchActivity" android:label="@string/Menu_muc"
			android:parentActivityName=".MainWindow"
			android:configChanges="orientation|keyboardHidden|screenSize"
			android:windowSoftInputMode="stateHidden">
			<meta-data
				android:name="android.support.PARENT_ACTIVITY"
				android:value=".MainWindow"/>
		</activity>
		<activity android:name=".preferences.MainPrefs"
			android:label="@string/Menu_Settings">
		</activity>

		<activity android:name=".preferences.AccountPrefs"
			android:label="@string/account_settings_title">
		</activity>

		<activity android:name=".preferences.NotificationPrefs"
				  android:label="@string/preftitle_notify">
		</activity>

		<service android:name=".service.XMPPService"
			android:exported="true"
			android:foregroundServiceType="remoteMessaging">
			<intent-filter>
				<action android:name="de.hdmstuttgart.yaxim.XMPPSERVICE" />
			</intent-filter>
		</service>

		<receiver android:name=".service.YaximBroadcastReceiver" android:exported="false">
			<intent-filter>
				<action android:name="android.intent.action.ACTION_SHUTDOWN" />
				<action android:name="android.intent.action.BOOT_COMPLETED" />
				<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
			</intent-filter>
			<intent-filter>
				<action android:name="org.yaxim.androidclient.ACTION_MESSAGE_HEARD" />
				<action android:name="org.yaxim.androidclient.ACTION_MESSAGE_REPLY" />
			</intent-filter>
		</receiver>

		<provider android:name=".data.ChatProvider"
			android:exported="false"
			android:authorities="${applicationId}.provider.Chats" />
		<provider android:name=".data.RosterProvider"
			android:exported="false"
			android:authorities="${applicationId}.provider.Roster" />
		<provider
			android:name="android.support.v4.content.FileProvider"
			android:authorities="${applicationId}.provider.Files"
			android:exported="false"
			android:grantUriPermissions="true">
			<meta-data
				android:name="android.support.FILE_PROVIDER_PATHS"
				android:resource="@xml/provider_paths"/>
		</provider>

		<activity android:name="de.duenndns.ssl.MemorizingActivity" />

		<meta-data android:name="com.google.android.gms.car.application"
			android:resource="@xml/automotive_app_desc" />
	</application>
</manifest>


================================================
FILE: ChangeLog
================================================
0.9.9c:
 * Startup: show absolute sync progress instead of broken percent
0.9.9b:
 * First startup: improve error handling
 * Service: use default DNS server instead of Google
 * Last Message Correction: always use first message's @id
0.9.9a:
 * Service: enforce "foreground service" on Android 8+
0.9.9:
 * User Interface: major rework for Material Design and Notification Channels
 * Performance: significant improvement with many messages
 * Easy Onboarding: implement account registration and contact adding (XEP-0401)
 * Easy Onboarding: support Google Play referrers (XEP-0379 + XEP-0401)
 * Reliable Messaging: implement Push (XEP-0357) and MAM (XEP-0313)
 * Service Discovery: allow browsing other servers and join rooms (XEP-0030)
 * The Matrix: support for the official Bifröst bridge on matrix.org
 * Chat Rooms: use account-synchronized nickname (XEP-0172; #163)
 * Chat Rooms: room search, bookmarks
 * Chat: support message search
 * Android: Support for new OS versions
 * XMPP Backend: upgrade to Smack 4.3.5
 * License: switched from GPLv2 to GPLv3 (#89)

0.9.3:
 * File Upload: support sharing of pictures and files, and inline display (thanks Igor; XEP-0363)
 * Chat: support *bold*, _emphasis_, ~strikethrough~ and `code` (thanks Conversations!; XEP-0393)
 * Chat: new "Quote" menu option, fix copy on more incoming messages
 * Easy XMPP: integrate (display of) QR codes in yaxim
 * Chat Rooms: new nickname colors (XEP-0392)
 * Notifications: custom ringtones
 * Chat: improve clickable link support
 * Roster: support adding contacts from clipboard
 * About: add "Rate" and "Contact" buttons
 * Optimization: faster loading of long histories
 * Message Sync: fix duplicate messages bug
 * Server: better discovery of MUC and File Upload
 * Server: create new resurce string on resource conflict
 * Offline: fix delivery of offline MUC messages
 * Chat Rooms: use nickname from VCard

0.9.2:
 * Fixes: Crash and connection problems fixed (among others: chatme.im)

0.9.1:
 * Chat: Smiley Hugification™
 * Chat: fix notification after user pressed <Home>
 * Chat Rooms: repair participant list, fix crashes
 * Icons: toned down status icon contrast
 * Network: Android 7 improvements
 * Build: switch from ant to gradle. finally!

0.9.0:
 * New artwork: yaxim is now "yak's IM" ;-)
 * Mobile Optimization: Support google:queue (almost XEP-0352)
 * Roster: proper display of errors and subscription status
 * Group Chats: finally implement XEP-0045 (huge rework)
 * Notifications: many improvements, support Android Auto and Wear
 * Easy XMPP: Easier account creation
 * Easy XMPP: "Create Invitation" function (XEP-0379)
 * Easy XMPP: Share contacts via NFC (Android Beam) and via other apps
 * Security: fix for CVE-2017-5589 vulnerability
 * Smarter Away: Set "DND" in silent mode

0.8.8:
 * Security: fix for CVE-2014-5075 Smack vulnerability
 * Preferences: new password change dialog
 * Start wizard: re-enter password on account creation
 * Contacts: Revamped status dialog (icons, status message history)
 * Contacts: New "mark as read" context menu option
 * Contacts: Option to disable contact groups display
 * Security: closed export of chat and roster ContentProviders
 * Security: TLSv1.2 enabled by default, fallback to v1.1 or v1
 * Network: minor improvements to XEP-0198 ack requests
 * Chat: glued chat window "OK" button to the bottom
 * UI: Improved text contrast in light theme

0.8.7b:
 * Server connection: fixed several reconnection issues
 * Preferences: No more crashes with incorrect JID
 * UI: Action Bar updates
 * Notification: Removed distracting ticker for online/offline changes

0.8.7:
 * XEP-0198: Stream Management now fully supported
 * Chat: Returned messages (errors) are displayed in red
 * Settings: IDNA servers are supported now
 * Roster: Ask user about new contact requests
 * Preferences: Auto-reconnect option removed (use "Quit" or set status to "Offline")
 * Status notification: improve display of connection status, error messages
 * XEP-0092: Software Version replies implemented
 * XEP-0280: incoming carbons now only ring once
 * XEP-0184 + XEP-0280: ack status fixed for CC'ed messages
 * Action Bar: ActionBarSherlock updated from 4.2.0 to 4.4.0

0.8.6b:
 * Also fix client-to-server pings (Oops, sorry!)

0.8.6:
 * Fix server-to-client pings (error caused periodic reconnects)
 * Better connectivity when changing WiFi networks
 * Implement Message Carbons (XEP-0280)
 * Share with yaxim: using main contact list now
 * Contact context menu: display JID
 * Sent messages context menu: new "Resend" option
 * Contact sorting is case insensitive now
 * Large contact list loads slightly faster
 * Minor bug fix when aborting a connection

0.8.5:
 * Implement XEP-0199 (client-to-server ping)
 * Implement XEP-0184 (message delivery receipts)
 * Privacy setting to suppress message content in notification
 * Display number of new messages in roster
 * Repair scrolling in chat window (fixes #53)
 * Work around WiFi/3G reconnection bug
 * Implement account creation with yaxim
 * New actionbar
 * Dark/light theme
 * Font size preference
 * Display number of members in roster group (fixes #41)
 * Backend database changes

0.8.4:
 * New user-friendly first startup dialog
 * Support Android 3.x and 4.x
 * Remember which roster groups were collapsed (fixes #51)
 * Support offline timestamps (sending and receiving)
 * New roster implementation (using SQLite, fixes #5)
 * Enforce SSL by default (fixes #65)
 * Support negative priorities (fixes #61)
 * Updated ASMACK from flow, fixed SMACK debugging
 * Support jabber servers with SRV record (finally!)

0.8.3:
 * Fix another auto-reconnect iussue
 * Support negative priority (fixes #61)
 * Display 'Error' messages as such (fixes #44)
 * Show MD5 checksum of SSL certificates (fixes #54)
 * Improved UI

0.8.2:
 * Fix for annoying auto-reconnect bug! Sorry folks!
 * New group separator image
 * Auto-clear notification when opening chat window


================================================
FILE: LICENSE.txt
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.


================================================
FILE: README.md
================================================
yaxim (Yet Another XMPP Instant Messenger)
==========================================

yaxim is a lean Jabber/XMPP client for Android. It aims at usability, low overhead and security, and works on low-end Android devices starting with Android 4.0.

Check the [yaxim homepage](https://yaxim.org/) for latest news and downloads.

## Features

 * Easy configuration and usability, using one XMPP account
 * Keeping your connection when the phone is started and on mobile/WiFi network changes
 * Chatting with friends and in group chats
 * Sending and receiving of text messages, images and files
 * Managing of your contact list
 * [more...](https://yaxim.org/features/)


## Links

 * [Google Play](https://play.google.com/store/apps/details?id=org.yaxim.androidclient) (recommended, with auto-updates)
 * [F-Droid](https://f-droid.org/repository/browse/?fdid=org.yaxim.androidclient) (this version uses a different signing key, not interchangeable with official yaxim binaries!)
 * [Download APK](http://yax.im/apk)
 * [Screenshots](https://yaxim.org/screenshots/)
 * [Project Home](https://yaxim.org/)
 * [Source on GitHub](https://github.com/yaxim-org/yaxim)
 * [Translation](https://translations.launchpad.net/yaxim/master/+pots/yaxim/)


## Build Instructions

yaxim is written in Java and source code is maintained in `git`. The official
repository is [yaxim-org](https://github.com/yaxim-org/yaxim), whereas
experimental development work happens in
[ge0rg's repo](https://github.com/ge0rg/yaxim). You will need Android Studio 3.x
to compile the app.

To compile yaxim, the following steps need to be taken:

	# fetch source code from github
	git clone https://github.com/yaxim-org/yaxim.git
	cd yaxim
	
	# initialize submodules
	git submodule init
	git submodule update
	
	# you can stop here, or go on to compile with gradle:

	# compile and install debug version of yaxim or Bruno
	gradle installYaximDebug
	gradle installBrunoDebug
	
	# compile release APKs for both
	# create RELEASE_STORE_FILE according to http://stackoverflow.com/a/25391891/539443
	gradle assembleRelease


## License

 * yaxim is licensed under GNU GPLv3 (see LICENSE.txt)

 * [MemorizingTrustManager](https://github.com/ge0rg/memorizingtrustmanager) is MIT licensed.

 * [android-remote-stacktrace](http://code.google.com/p/android-remote-stacktrace/) is MIT licensed.


### MIT License

*android-remote-stacktrace*: Copyright (c) 2009 Mads Kristiansen, Nullwire ApS

*MemorizingTrustManager*: Copyright (c) 2010 Georg Lukas

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: base.rdf.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="style.xsl" type="text/xsl"?>
<rdf:RDF xmlns="http://usefulinc.com/ns/doap#"
        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:xmpp="https://linkmauve.fr/ns/xmpp-doap#"
        xmlns:foaf="http://xmlns.com/foaf/0.1/"
        xmlns:schema="https://schema.org/">
  <Project>

    <name>${NAME}</name>

    <shortdesc xml:lang="en">${SHORTDESC}</shortdesc>
    <description xml:lang="en">${DESCRIPTION}</description>
    <schema:logo rdf:resource="${LOGO}"/>
    <schema:screenshot rdf:resource="${SCREENSHOT}"/>
    <schema:documentation rdf:resource="https://github.com/yaxim-org/yaxim/wiki"/>

    <homepage rdf:resource="${HOMEPAGE}" />
    <wiki rdf:resource="https://github.com/yaxim-org/yaxim/wiki" />
    <bug-database rdf:resource="https://github.com/yaxim-org/yaxim/issues" />
    <category rdf:resource="https://linkmauve.fr/ns/xmpp-doap#category-client" />
    <category rdf:resource="http://api.gnome.org/doap-extensions#apps" />
    <license rdf:resource="http://usefulinc.com/doap/licenses/gplv3" />

    <programming-language>Java</programming-language>
    <os>Android</os>

    <repository>
      <GitRepository>
        <location rdf:resource="https://github.com/yaxim-org/yaxim.git" />
        <browse rdf:resource="https://github.com/yaxim-org/yaxim" />
      </GitRepository>
    </repository>

    <implements rdf:resource="https://xmpp.org/rfcs/rfc6120.html" />
    <implements rdf:resource="https://xmpp.org/rfcs/rfc6121.html" />
    <implements rdf:resource="https://xmpp.org/rfcs/rfc6122.html" />
    <implements rdf:resource="https://xmpp.org/rfcs/rfc7590.html" />

    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0030.html" />
	<xmpp:version>2.5rc3</xmpp:version>
        <xmpp:status>complete</xmpp:status>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0045.html" />
	<xmpp:version>1.32.0</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:since>0.9.0</xmpp:since>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0048.html" />
	<xmpp:version>1.1</xmpp:version>
        <xmpp:status>partial</xmpp:status>
        <xmpp:since>0.9.3</xmpp:since>
        <xmpp:note>Loading, but no editing support</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0049.html" />
	<xmpp:version>1.2</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:since>0.9.3</xmpp:since>
        <xmpp:note>Used for Bookmarks</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0066.html" />
	<xmpp:version>1.5</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:since>0.9.0</xmpp:since>
        <xmpp:note>Used for inline images</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0077.html" />
	<xmpp:version>2.4</xmpp:version>
        <xmpp:status>partial</xmpp:status>
        <xmpp:note>No forms support</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0091.html" />
	<xmpp:version>1.4</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:note>Supported, obsoleted by XEP-0203</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0092.html" />
	<xmpp:version>1.1</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:note>Not possible yet to query other entities</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0115.html" />
	<xmpp:version>1.5.1</xmpp:version>
        <xmpp:status>complete</xmpp:status>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0147.html" />
	<xmpp:version>1.2</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:since>0.9.0</xmpp:since>
	<xmpp:note>Support for xmpp: URIs and yax.im landing page</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0172.html" />
	<xmpp:version>1.1</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:since>0.9.9</xmpp:since>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0184.html" />
	<xmpp:version>1.4.0</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:note>Green checkmark for acknowledged messages</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0198.html" />
	<xmpp:version>1.6</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:note>Fast reconnects on 3G/WiFi switching, stream ACKs</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0199.html" />
	<xmpp:version>2.0.1</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:note>Automatic server pinging every 15 minutes</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0203.html" />
	<xmpp:version>2.0</xmpp:version>
        <xmpp:status>complete</xmpp:status>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0245.html" />
	<xmpp:version>1.0</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:since>0.9.0</xmpp:since>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0249.html" />
	<xmpp:version>1.2</xmpp:version>
        <xmpp:status>partial</xmpp:status>
        <xmpp:since>0.9.0</xmpp:since>
        <xmpp:note>Receive-only support</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0280.html" />
	<xmpp:version>0.13.1</xmpp:version>
        <xmpp:status>complete</xmpp:status>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0286.html" />
	<xmpp:version>1.0.0</xmpp:version>
        <xmpp:status>complete</xmpp:status>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0297.html" />
	<xmpp:version>1.0</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:note>Used for MAM and Carbons</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0308.html" />
	<xmpp:version>1.1.0</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:since>0.9.0</xmpp:since>
        <xmpp:note>Last 10 messages; sending support since 0.9.3</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0313.html" />
	<xmpp:version>0.6.3</xmpp:version>
        <xmpp:status>partial</xmpp:status>
        <xmpp:since>0.9.9</xmpp:since>
        <xmpp:note>Not used for MUCs; no configuration</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0352.html" />
	<xmpp:version>0.3.0</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:since>0.9.0</xmpp:since>
        <xmpp:note>Using google:queue in 0.9.x; proper CSI since 0.9.9</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0357.html" />
	<xmpp:version>0.3</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:since>0.9.9</xmpp:since>
        <xmpp:note>Registers for push on push.yax.im</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0359.html" />
	<xmpp:version>0.6.0</xmpp:version>
        <xmpp:status>partial</xmpp:status>
        <xmpp:since>0.9.9</xmpp:since>
        <xmpp:note>Only the subset required for MAM</xmpp:note>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0363.html" />
	<xmpp:version>0.9.0</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:since>0.9.3</xmpp:since>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0379.html" />
	<xmpp:version>0.3.1</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:since>0.9.0</xmpp:since>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0392.html" />
	<xmpp:version>0.6.0</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:since>0.9.3</xmpp:since>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0393.html" />
	<xmpp:version>0.1.4</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:since>0.9.3</xmpp:since>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0401.html" />
	<xmpp:version>0.3.0</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:note>Requesting invitations and allowing onboarding using an invitation</xmpp:note>
        <xmpp:since>0.9.9</xmpp:since>
      </xmpp:SupportedXep>
    </implements>
    <implements>
      <xmpp:SupportedXep>
        <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0410.html" />
	<xmpp:version>1.0.1</xmpp:version>
        <xmpp:status>complete</xmpp:status>
        <xmpp:note>Automatic pinging of MUCs every 15 minutes</xmpp:note>
        <xmpp:since>0.9.0</xmpp:since>
      </xmpp:SupportedXep>
    </implements>
  </Project>
</rdf:RDF>


================================================
FILE: bruno/res/drawable/ic_action_contacts_all.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:tint="?attr/colorControlNormal"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="6.34992"
    android:viewportHeight="6.34992">
  <path
      android:pathData="M3.17238,0.59066C2.86797,0.59066 2.62099,0.81739 2.621,1.09657C2.62099,1.34184 2.81169,1.54557 3.06437,1.59162C3.06629,1.75423 3.21016,2.12321 3.35169,2.32593A0.71804,0.7648 89.99998,0 1,3.50155 2.25927C3.51293,2.2282 3.52978,2.201 3.55736,2.18744C3.50543,2.14403 3.36513,2.00241 3.33929,1.57354C3.33153,1.44747 3.23876,1.34296 3.1145,1.32032C2.97847,1.29553 2.89488,1.19801 2.89488,1.09553C2.89488,0.97864 3.00377,0.86558 3.17289,0.86558C3.25777,0.86558 3.32948,0.89732 3.37805,0.94154C3.35687,0.92226 3.36027,0.92727 3.38838,0.95756C3.47035,1.04582 3.60027,1.07034 3.70877,1.01802C3.72594,1.0098 3.73915,1.00309 3.75114,0.99838C3.75183,0.99839 3.75252,0.99839 3.75321,0.99838C3.85848,0.95595 3.98281,0.92915 4.11391,0.92397C4.27687,0.91809 4.44944,0.94547 4.61826,1.01079C4.63276,1.01642 4.66202,1.0305 4.70663,1.05161C4.74315,1.06888 4.78302,1.07788 4.82342,1.07796L4.82548,1.07796C4.9095,1.07798 4.9889,1.03952 5.04097,0.97358C5.05748,0.95275 5.06553,0.94383 5.06578,0.94361C5.11503,0.89844 5.18589,0.86764 5.26938,0.86764C5.43632,0.86764 5.54387,0.98153 5.54533,1.0976C5.54528,1.09785 5.54533,1.1012 5.54533,1.10122C5.54531,1.10294 5.54531,1.10466 5.54533,1.10639C5.54533,1.10642 5.54516,1.11134 5.54533,1.1131C5.54406,1.21286 5.46707,1.30724 5.33501,1.33428C5.21573,1.3581 5.12636,1.45757 5.11539,1.5787C4.92825,2.09963 4.85778,2.27775 4.90662,2.52179C4.93255,2.6514 5.0682,2.72184 5.19703,2.77293C5.3826,2.88172 5.48848,2.99866 5.48848,3.08402C5.48848,3.15383 5.47837,3.16429 5.47298,3.17083C5.4676,3.17739 5.44707,3.19706 5.37531,3.21683C5.26353,3.24761 5.09846,3.25191 4.81205,3.2561C4.55857,3.24377 4.48044,3.39029 4.34903,3.54083C4.37191,3.54085 4.5961,3.5398 4.6193,3.5398C5.45857,3.5398 5.76237,3.5347 5.76237,3.08454C5.76237,2.81577 5.52737,2.57874 5.15414,2.43032C5.2814,2.1517 5.36801,1.85219 5.38978,1.60402C5.63622,1.55357 5.82076,1.35276 5.82076,1.11155C5.82076,1.10974 5.82027,1.10716 5.82024,1.10535C5.82027,1.10354 5.82076,1.10045 5.82076,1.09864C5.82076,0.81945 5.57378,0.59325 5.26938,0.59325C5.11718,0.59325 4.97949,0.64958 4.87974,0.74104C4.85923,0.75988 4.84154,0.78149 4.82445,0.80305C4.78883,0.7862 4.75308,0.76903 4.71697,0.75499C4.51278,0.676 4.30225,0.64236 4.10254,0.64957C3.94206,0.65591 3.78849,0.68712 3.65089,0.74259C3.63007,0.75074 3.60998,0.76089 3.58992,0.77049C3.58033,0.76017 3.57246,0.74848 3.56201,0.73897C3.46227,0.64812 3.32458,0.59118 3.17238,0.59118L3.17238,0.59066z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="M4.28237,1.82675C3.87192,1.81917 3.54661,2.0297 3.47468,2.26754A0.71804,0.7648 89.99998,0 1,3.66846 2.22362C3.76692,2.10176 3.98934,1.97648 4.27255,1.97919C4.59594,2.03155 4.77344,2.12341 4.83892,2.19364C4.90551,2.26512 4.90078,2.30241 4.85804,2.38226C4.8153,2.46207 4.70878,2.55963 4.57382,2.62514C4.53838,2.64234 4.5013,2.65713 4.46324,2.66958A0.71804,0.7648 89.99998,0 1,4.50716 2.81375C5.06013,2.63144 5.43209,2.005 4.28237,1.82675z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="4.96668625"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m1.71977,3.17497 l-0.59531,0.52916c-0.32878,0 -0.59531,-0.23691 -0.5953,-0.52916 -0,-0.29224 0.26653,-0.52916 0.5953,-0.52916 0.32878,0 0.59531,0.23691 0.59531,0.52916z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m4.14098,3.15036c0,0.30584 -0.27548,0.55377 -0.6153,0.55377l-0.6153,-0.55377c-0,-0.30583 0.27548,-0.55377 0.6153,-0.55377 0.33982,0 0.6153,0.24794 0.6153,0.55377z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m2.19227,2.66518c-0.5765,0.0202 -1.07273,0.33248 -1.16064,0.84227 -0.10804,0.62645 0.72965,2.02741 1.38294,2.03256 0.76937,0.00634 1.52429,-1.94681 1.11459,-2.34699 -0.39166,-0.38256 -0.8885,-0.54355 -1.33689,-0.52784zM2.91895,3.34094c0.14335,0.00014 0.25949,0.125 0.2595,0.27896 0,0.15398 -0.11614,0.27886 -0.2595,0.27899 -0.14353,0.00012 -0.25994,-0.12481 -0.25994,-0.27899 0.00001,-0.15415 0.11642,-0.27907 0.25994,-0.27896zM1.76804,3.38924c0.14335,0.00014 0.25949,0.125 0.2595,0.27896 0,0.15398 -0.11614,0.27886 -0.2595,0.27899 -0.14353,0.00011 -0.25994,-0.12482 -0.25994,-0.27899 0.00001,-0.15415 0.11642,-0.27907 0.25994,-0.27896zM2.41545,4.02514c1.60857,0.2494 0.61214,1.2667 -0.18112,1.18099 -1.29234,-0.25665 -0.73919,-1.19802 0.18112,-1.18099z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="1.65870702"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.30559,4.57998c0.00019,0.01612 -0.00576,0.03026 -0.00736,0.04692 0.0456,0.08107 -0.19453,0.69698 -1.0639,0.57922 -0.5026,-0.06803 -0.83435,-0.45885 -0.8551,-0.6164 -0.44387,0.16043 -0.73553,0.42706 -0.73553,0.72977 -0,0.49068 0.71269,0.50129 1.65484,0.50129 0.94214,0 1.75713,-0.01069 1.75713,-0.50129 0,-0.30876 -0.29118,-0.58027 -0.75009,-0.73951z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.57111174"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m2.35449,4.76243c-0.08858,0.00181 -0.2739,-0.29963 -0.23168,-0.3775 0.04222,-0.07781 0.39644,-0.08741 0.44278,-0.01187 0.04634,0.07555 -0.12254,0.38703 -0.21109,0.3894z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.04823632"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m2.19227,2.66518c-0.5765,0.0202 -1.07273,0.33248 -1.16064,0.84227 -0.10804,0.62645 0.72965,2.02741 1.38294,2.03256 0.76937,0.00634 1.52429,-1.94681 1.11459,-2.34699 -0.39166,-0.38256 -0.8885,-0.54355 -1.33689,-0.52784zM2.91895,3.34094c0.14335,0.00014 0.25949,0.125 0.2595,0.27896 0,0.15398 -0.11614,0.27886 -0.2595,0.27899 -0.14353,0.00012 -0.25994,-0.12481 -0.25994,-0.27899 0.00001,-0.15415 0.11642,-0.27907 0.25994,-0.27896zM1.76804,3.38924c0.14335,0.00014 0.25949,0.125 0.2595,0.27896 0,0.15398 -0.11614,0.27886 -0.2595,0.27899 -0.14353,0.00011 -0.25994,-0.12482 -0.25994,-0.27899 0.00001,-0.15415 0.11642,-0.27907 0.25994,-0.27896zM2.41545,4.02514c1.60857,0.2494 0.61214,1.2667 -0.18112,1.18099 -1.29234,-0.25665 -0.73919,-1.19802 0.18112,-1.18099z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="1.65870702"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.30559,4.57998c0.00019,0.01612 -0.00576,0.03026 -0.00736,0.04692 0.0456,0.08107 -0.19453,0.69698 -1.0639,0.57922 -0.5026,-0.06803 -0.83435,-0.45885 -0.8551,-0.6164 -0.44387,0.16043 -0.73553,0.42706 -0.73553,0.72977 -0,0.49068 0.71269,0.50129 1.65484,0.50129 0.94214,0 1.75713,-0.01069 1.75713,-0.50129 0,-0.30876 -0.29118,-0.58027 -0.75009,-0.73951z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.57111174"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m4.28157,2.46581c-0.08061,0.00181 -0.24928,-0.2727 -0.21086,-0.34357 0.03842,-0.07084 0.3608,-0.07953 0.40297,-0.01078 0.04217,0.06875 -0.11152,0.35224 -0.19211,0.35438z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.04389965"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m2.19227,2.66521c-0.5765,0.0202 -1.07273,0.33247 -1.16064,0.84226 -0.10804,0.62645 0.72965,2.02741 1.38294,2.03256 0.76937,0.00634 1.52429,-1.94681 1.11459,-2.34699 -0.39166,-0.38256 -0.8885,-0.54355 -1.33689,-0.52784zM2.91895,3.34097c0.14335,0.00013 0.25949,0.12499 0.2595,0.27895 0,0.15398 -0.11614,0.27886 -0.2595,0.27899 -0.14353,0.00012 -0.25994,-0.12481 -0.25994,-0.27899 0.00001,-0.15415 0.11642,-0.27907 0.25994,-0.27895zM1.76804,3.38927c0.14335,0.00014 0.25949,0.125 0.2595,0.27896 0,0.15398 -0.11614,0.27886 -0.2595,0.27899 -0.14353,0.00011 -0.25994,-0.12481 -0.25994,-0.27899 0.00001,-0.15415 0.11642,-0.27907 0.25994,-0.27896zM2.41545,4.02516c1.60857,0.2494 0.61214,1.2667 -0.18112,1.18099 -1.29234,-0.25665 -0.73919,-1.19802 0.18112,-1.18099z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="1.65870702"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.30559,4.57998c0.00019,0.01612 -0.00576,0.03026 -0.00736,0.04692 0.0456,0.08107 -0.19453,0.69697 -1.0639,0.57921 -0.5026,-0.06803 -0.83435,-0.45885 -0.8551,-0.6164 -0.44387,0.16043 -0.73553,0.42706 -0.73553,0.72977 -0,0.49068 0.71269,0.50129 1.65484,0.50129 0.94214,0 1.75713,-0.01069 1.75713,-0.50129 0,-0.30876 -0.29118,-0.58027 -0.75009,-0.73951z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.57111174"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.72841,1.37472c0.09966,0.0001 0.1804,0.08687 0.1804,0.19394 0,0.10704 -0.08074,0.19386 -0.1804,0.19396 -0.09978,0.00007 -0.18071,-0.08678 -0.18071,-0.19396 0.00001,-0.10717 0.08093,-0.19402 0.18071,-0.19394l0,0"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="1.15315437"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m4.75654,1.32947c0.09966,0.00009 0.1804,0.08687 0.1804,0.19393 0,0.10704 -0.08074,0.19387 -0.1804,0.19396 -0.09978,0.00007 -0.18071,-0.08678 -0.18071,-0.19396 0.00001,-0.10716 0.08093,-0.19401 0.18071,-0.19393l0,0"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="1.15315437"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.30559,4.57998c0.00019,0.01612 -0.00576,0.03026 -0.00736,0.04692 0.0456,0.08107 -0.19453,0.69697 -1.0639,0.57921 -0.5026,-0.06803 -0.83435,-0.45885 -0.8551,-0.6164 -0.44387,0.16043 -0.73553,0.42706 -0.73553,0.72977 -0,0.49068 0.71269,0.50129 1.65484,0.50129 0.94214,0 1.75713,-0.01069 1.75713,-0.50129 0,-0.30876 -0.29118,-0.58027 -0.75009,-0.73951z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.57111174"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
</vector>


================================================
FILE: bruno/res/drawable/ic_action_contacts_online.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:tint="?attr/colorControlNormal"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="6.35"
    android:viewportHeight="6.35">
  <path
      android:pathData="m3.17246,0.57443c-0.30581,0 -0.55374,0.22935 -0.55374,0.51206 -0,0.24838 0.19137,0.45511 0.44521,0.50175 0.01401,0.21467 0.09909,0.40044 0.22777,0.65872 0.03942,0.01341 0.07263,0.01805 0.11281,0.03657 0.25367,-0.27422 0.604,-0.38663 0.90211,-0.3861 1.22707,0.19747 0.75985,0.91117 0.15568,1.06882 0.01404,0.34388 -0.23155,0.56838 -0.28882,0.59882 0.02299,0.00003 0.0443,0.00021 0.06761,0.00021 0.84313,0 1.53346,-0.0098 1.53346,-0.46554 0,-0.27217 -0.23647,-0.51202 -0.61141,-0.66232 0.12784,-0.28215 0.21505,-0.58535 0.23693,-0.83665 0.24757,-0.05106 0.43294,-0.25465 0.43294,-0.49891 0,-0.00217 -0.00036,-0.00438 -0.00038,-0.00646 0.00003,-0.00217 0.00038,-0.00434 0.00038,-0.00646 0,-0.28271 -0.24793,-0.51186 -0.55374,-0.51186 -0.1529,0 -0.29143,0.05722 -0.39163,0.14986 -0.02061,0.01905 -0.03836,0.04065 -0.05553,0.06249l-0.0002,0c-0.03578,-0.01705 -0.07146,-0.03458 -0.10774,-0.04874 -0.20513,-0.07998 -0.41662,-0.11367 -0.61726,-0.10638 -0.16122,0.00586 -0.31536,0.03809 -0.45359,0.09424 -0.02092,0.0085 -0.04102,0.01813 -0.06118,0.02772 -0.00963,-0.01046 -0.01776,-0.02204 -0.02825,-0.03176 -0.1002,-0.09264 -0.23853,-0.15006 -0.39144,-0.15006zM4.7573,1.26203c0.12828,0.00013 0.23224,0.11605 0.23225,0.25907 0,0.14302 -0.10396,0.25894 -0.23225,0.25906 -0.12845,0.0001 -0.23264,-0.11585 -0.23264,-0.25906 0.00001,-0.14319 0.1042,-0.25917 0.23264,-0.25907zM3.72737,1.30673c0.12828,0.00012 0.23224,0.11605 0.23225,0.25906 0,0.14302 -0.10396,0.25914 -0.23225,0.25927 -0.12845,0.00011 -0.23264,-0.11605 -0.23264,-0.25927 0.00001,-0.14319 0.1042,-0.25917 0.23264,-0.25906zM4.26883,2.06733c-0.08916,0.00217 -0.1777,0.02291 -0.19659,0.05905 -0.02516,0.04818 0.03995,0.1874 0.1097,0.27524 0.03086,0.02243 0.05965,0.04712 0.08651,0.07341 0.0038,0.00087 0.00762,0.00217 0.01111,0.00217 0.07925,-0.00217 0.23027,-0.29167 0.1888,-0.3618 -0.02073,-0.03505 -0.11036,-0.05041 -0.19952,-0.04793z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m1.7568,3.07279 l-0.61382,0.56747c-0.339,0 -0.61382,-0.25407 -0.61382,-0.56747 -0,-0.3134 0.27481,-0.56747 0.61382,-0.56747 0.339,0 0.61382,0.25407 0.61382,0.56747z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m4.09238,3.08985c0,0.3134 -0.27481,0.56747 -0.61382,0.56747l-0.61382,-0.56747c-0,-0.3134 0.27481,-0.56747 0.61382,-0.56747 0.339,0 0.61382,0.25407 0.61382,0.56747z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m2.17906,2.57153c-0.57191,0.02078 -1.0642,0.34235 -1.15142,0.86728 -0.10719,0.64505 0.72385,2.08762 1.37195,2.09292 0.76325,0.00629 1.51217,-2.00463 1.10573,-2.41669 -0.38855,-0.39392 -0.88144,-0.5597 -1.32626,-0.54352zM2.89996,3.26735c0.14221,0.00014 0.25742,0.12871 0.25743,0.28725 0,0.15854 -0.11522,0.28714 -0.25743,0.28727 -0.14239,0.00012 -0.25788,-0.12852 -0.25787,-0.28727 0.00001,-0.15873 0.11549,-0.28736 0.25787,-0.28725zM1.7582,3.31706c0.14221,0.00014 0.25742,0.12871 0.25743,0.28725 0,0.15854 -0.11522,0.28714 -0.25743,0.28727 -0.14239,0.00012 -0.25788,-0.12852 -0.25787,-0.28727 0.00001,-0.15873 0.11549,-0.28736 0.25787,-0.28725zM2.40047,3.97184c1.59578,0.25681 0.60727,1.30432 -0.17968,1.21607 -1.28207,-0.26428 -0.73332,-1.2336 0.17968,-1.21607z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="8.37494659"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.28352,4.54318c0.00018,0.01657 -0.00572,0.03115 -0.00729,0.04832 0.04524,0.08349 -0.19298,0.71768 -1.05544,0.59642 -0.4986,-0.07006 -0.82772,-0.47248 -0.8483,-0.63471 -0.44034,0.1652 -0.72969,0.43974 -0.72969,0.75144 -0,0.50526 0.70703,0.51618 1.64168,0.51618 0.93465,0 1.74316,-0.01098 1.74316,-0.51618 0,-0.31792 -0.28886,-0.59749 -0.74413,-0.76148z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="2.88358951"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m2.37029,4.61434c-0.08787,0.00203 -0.27173,-0.30853 -0.22984,-0.38872 0.04188,-0.08016 0.39329,-0.09002 0.43926,-0.01224 0.04597,0.07778 -0.12156,0.39853 -0.20942,0.40097z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.11974473"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m1.7568,3.07279 l-0.61382,0.56747c-0.339,0 -0.61382,-0.25407 -0.61382,-0.56747 -0,-0.3134 0.27481,-0.56747 0.61382,-0.56747 0.339,0 0.61382,0.25407 0.61382,0.56747z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m4.09238,3.08985c0,0.3134 -0.27481,0.56747 -0.61382,0.56747l-0.61382,-0.56747c-0,-0.3134 0.27481,-0.56747 0.61382,-0.56747 0.339,0 0.61382,0.25407 0.61382,0.56747z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m2.17906,2.57153c-0.57191,0.02078 -1.0642,0.34235 -1.15142,0.86728 -0.10719,0.64505 0.72385,2.08762 1.37195,2.09292 0.76325,0.00629 1.51217,-2.00463 1.10573,-2.41669 -0.38855,-0.39392 -0.88144,-0.5597 -1.32626,-0.54352zM2.89996,3.26735c0.14221,0.00014 0.25742,0.12871 0.25743,0.28725 0,0.15854 -0.11522,0.28714 -0.25743,0.28727 -0.14239,0.00012 -0.25788,-0.12852 -0.25787,-0.28727 0.00001,-0.15873 0.11549,-0.28736 0.25787,-0.28725zM1.7582,3.31706c0.14221,0.00014 0.25742,0.12871 0.25743,0.28725 0,0.15854 -0.11522,0.28714 -0.25743,0.28727 -0.14239,0.00012 -0.25788,-0.12852 -0.25787,-0.28727 0.00001,-0.15873 0.11549,-0.28736 0.25787,-0.28725zM2.40047,3.97184c1.59578,0.25681 0.60727,1.30432 -0.17968,1.21607 -1.28207,-0.26428 -0.73332,-1.2336 0.17968,-1.21607z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="8.37494659"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.28352,4.54318c0.00018,0.01657 -0.00572,0.03115 -0.00729,0.04832 0.04524,0.08349 -0.19298,0.71768 -1.05544,0.59642 -0.4986,-0.07006 -0.82772,-0.47248 -0.8483,-0.63471 -0.44034,0.1652 -0.72969,0.43974 -0.72969,0.75144 -0,0.50526 0.70703,0.51618 1.64168,0.51618 0.93465,0 1.74316,-0.01098 1.74316,-0.51618 0,-0.31792 -0.28886,-0.59749 -0.74413,-0.76148z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="2.88358951"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m2.37029,4.61434c-0.08787,0.00203 -0.27173,-0.30853 -0.22984,-0.38872 0.04188,-0.08016 0.39329,-0.09002 0.43926,-0.01224 0.04597,0.07778 -0.12156,0.39853 -0.20942,0.40097z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.11974473"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m1.7568,3.07279 l-0.61382,0.56747c-0.339,0 -0.61382,-0.25407 -0.61382,-0.56747 -0,-0.3134 0.27481,-0.56747 0.61382,-0.56747 0.339,0 0.61382,0.25407 0.61382,0.56747z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m4.09238,3.07552c0,0.3134 -0.27481,0.56747 -0.61382,0.56747l-0.61382,-0.56747c-0,-0.3134 0.27481,-0.56747 0.61382,-0.56747 0.339,0 0.61382,0.25407 0.61382,0.56747z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m2.17906,2.57153c-0.57191,0.02078 -1.0642,0.34235 -1.15142,0.86728 -0.10719,0.64505 0.72385,2.08762 1.37195,2.09292 0.76325,0.00629 1.51217,-2.00463 1.10573,-2.41669 -0.38855,-0.39392 -0.88144,-0.5597 -1.32626,-0.54352zM2.89996,3.26736c0.14221,0.00014 0.25742,0.12871 0.25743,0.28725 0,0.15854 -0.11522,0.28714 -0.25743,0.28727 -0.14239,0.00012 -0.25788,-0.12852 -0.25787,-0.28727 0.00001,-0.15873 0.11549,-0.28736 0.25787,-0.28725zM1.7582,3.31706c0.14221,0.00014 0.25742,0.12871 0.25743,0.28725 0,0.15854 -0.11522,0.28714 -0.25743,0.28727 -0.14239,0.00012 -0.25788,-0.12852 -0.25787,-0.28727 0.00001,-0.15873 0.11549,-0.28736 0.25787,-0.28725zM2.40047,3.97184c1.59578,0.25681 0.60727,1.30432 -0.17968,1.21607 -1.28207,-0.26428 -0.73332,-1.2336 0.17968,-1.21607z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="8.37494659"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.28352,4.54316c0.00018,0.01657 -0.00572,0.03115 -0.00729,0.04832 0.04524,0.08349 -0.19298,0.71768 -1.05544,0.59642 -0.4986,-0.07006 -0.82772,-0.47248 -0.8483,-0.63471 -0.44034,0.1652 -0.72969,0.43974 -0.72969,0.75144 -0,0.50526 0.70703,0.51618 1.64168,0.51618 0.93465,0 1.74316,-0.01098 1.74316,-0.51618 0,-0.31792 -0.28886,-0.59749 -0.74413,-0.76148z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="2.88358951"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m2.37029,4.61434c-0.08787,0.00203 -0.27173,-0.30853 -0.22984,-0.38872 0.04188,-0.08016 0.39329,-0.09002 0.43926,-0.01224 0.04597,0.07778 -0.12156,0.39853 -0.20942,0.40097z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.11974473"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m1.7568,3.07279 l-0.61382,0.56747c-0.339,0 -0.61382,-0.25407 -0.61382,-0.56747 -0,-0.3134 0.27481,-0.56747 0.61382,-0.56747 0.339,0 0.61382,0.25407 0.61382,0.56747z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m4.09238,3.07552c0,0.3134 -0.27481,0.56747 -0.61382,0.56747l-0.61382,-0.56747c-0,-0.3134 0.27481,-0.56747 0.61382,-0.56747 0.339,0 0.61382,0.25407 0.61382,0.56747z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m2.17906,2.57153c-0.57191,0.02078 -1.0642,0.34235 -1.15142,0.86728 -0.10719,0.64505 0.72385,2.08762 1.37195,2.09292 0.76325,0.00629 1.51217,-2.00463 1.10573,-2.41669 -0.38855,-0.39392 -0.88144,-0.5597 -1.32626,-0.54352zM2.89996,3.26736c0.14221,0.00014 0.25742,0.12871 0.25743,0.28725 0,0.15854 -0.11522,0.28714 -0.25743,0.28727 -0.14239,0.00012 -0.25788,-0.12852 -0.25787,-0.28727 0.00001,-0.15873 0.11549,-0.28736 0.25787,-0.28725zM1.7582,3.31706c0.14221,0.00014 0.25742,0.12871 0.25743,0.28725 0,0.15854 -0.11522,0.28714 -0.25743,0.28727 -0.14239,0.00012 -0.25788,-0.12852 -0.25787,-0.28727 0.00001,-0.15873 0.11549,-0.28736 0.25787,-0.28725zM2.40047,3.97184c1.59578,0.25681 0.60727,1.30432 -0.17968,1.21607 -1.28207,-0.26428 -0.73332,-1.2336 0.17968,-1.21607z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="8.37494659"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.28352,4.54316c0.00018,0.01657 -0.00572,0.03115 -0.00729,0.04832 0.04524,0.08349 -0.19298,0.71768 -1.05544,0.59642 -0.4986,-0.07006 -0.82772,-0.47248 -0.8483,-0.63471 -0.44034,0.1652 -0.72969,0.43974 -0.72969,0.75144 -0,0.50526 0.70703,0.51618 1.64168,0.51618 0.93465,0 1.74316,-0.01098 1.74316,-0.51618 0,-0.31792 -0.28886,-0.59749 -0.74413,-0.76148z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="2.88358951"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m2.37029,4.61434c-0.08787,0.00203 -0.27173,-0.30853 -0.22984,-0.38872 0.04188,-0.08016 0.39329,-0.09002 0.43926,-0.01224 0.04597,0.07778 -0.12156,0.39853 -0.20942,0.40097z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.11974473"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
</vector>


================================================
FILE: bruno/res/drawable/ic_action_person_add.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:tint="?attr/colorControlNormal"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="6.35"
    android:viewportHeight="6.35">
  <path
      android:pathData="m3.50099,1.94667 l-0.71003,0.63933c-0.39214,0 -0.71003,-0.28624 -0.71003,-0.63933 -0,-0.35308 0.31789,-0.63932 0.71003,-0.63932 0.39214,0 0.71003,0.28624 0.71003,0.63932z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m6.20268,1.96589c0,0.35308 -0.31789,0.63932 -0.71003,0.63932l-0.71003,-0.63932c-0,-0.35308 0.31789,-0.63932 0.71003,-0.63932 0.39214,0 0.71003,0.28624 0.71003,0.63932z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.98944,1.38193c-0.66156,0.02341 -1.23101,0.3857 -1.3319,0.9771 -0.12399,0.72673 0.83731,2.35197 1.587,2.35794 0.88289,0.00709 1.7492,-2.25847 1.27905,-2.7227 -0.44945,-0.4438 -1.01961,-0.63057 -1.53415,-0.61234zM4.82334,2.16587c0.1645,0.00016 0.29778,0.14501 0.29779,0.32362 0,0.17862 -0.13328,0.32349 -0.29779,0.32365 -0.16471,0.00013 -0.2983,-0.14479 -0.29829,-0.32365 0.00001,-0.17882 0.13359,-0.32375 0.29829,-0.32362zM3.50262,2.22186c0.1645,0.00016 0.29778,0.14501 0.29779,0.32362 0,0.17862 -0.13328,0.32349 -0.29779,0.32365 -0.16471,0.00013 -0.2983,-0.14479 -0.29829,-0.32365 0.00001,-0.17883 0.13359,-0.32375 0.29829,-0.32362zM4.24555,2.95956c1.84592,0.28932 0.70246,1.46948 -0.20784,1.37005 -1.48303,-0.29774 -0.84826,-1.38981 0.20784,-1.37005z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="3.56626511"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m5.26703,3.60324c0.00021,0.01867 -0.00661,0.03509 -0.00844,0.05444 0.05233,0.09406 -0.22323,0.80856 -1.22088,0.67194 -0.57676,-0.07893 -0.95747,-0.5323 -0.98127,-0.71508 -0.50936,0.18612 -0.84406,0.49543 -0.84406,0.84659 -0,0.56923 0.81785,0.58154 1.89902,0.58154 1.08116,0 2.0164,-0.01237 2.0164,-0.58154 0,-0.35818 -0.33414,-0.67315 -0.86077,-0.8579z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="1.22790575"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m4.21065,3.68341c-0.10165,0.00228 -0.31432,-0.3476 -0.26587,-0.43794 0.04845,-0.09031 0.45494,-0.10142 0.50811,-0.0138 0.05318,0.08763 -0.14062,0.44899 -0.24224,0.45174z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.05099035"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.50099,1.94667 l-0.71003,0.63933c-0.39214,0 -0.71003,-0.28624 -0.71003,-0.63933 -0,-0.35308 0.31789,-0.63932 0.71003,-0.63932 0.39214,0 0.71003,0.28624 0.71003,0.63932z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m6.20268,1.96589c0,0.35308 -0.31789,0.63932 -0.71003,0.63932l-0.71003,-0.63932c-0,-0.35308 0.31789,-0.63932 0.71003,-0.63932 0.39214,0 0.71003,0.28624 0.71003,0.63932z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.98944,1.38193c-0.66156,0.02341 -1.23101,0.3857 -1.3319,0.9771 -0.12399,0.72673 0.83731,2.35197 1.587,2.35794 0.88289,0.00709 1.7492,-2.25847 1.27905,-2.7227 -0.44945,-0.4438 -1.01961,-0.63057 -1.53415,-0.61234zM4.82334,2.16587c0.1645,0.00016 0.29778,0.14501 0.29779,0.32362 0,0.17862 -0.13328,0.32349 -0.29779,0.32365 -0.16471,0.00013 -0.2983,-0.14479 -0.29829,-0.32365 0.00001,-0.17882 0.13359,-0.32375 0.29829,-0.32362zM3.50262,2.22186c0.1645,0.00016 0.29778,0.14501 0.29779,0.32362 0,0.17862 -0.13328,0.32349 -0.29779,0.32365 -0.16471,0.00013 -0.2983,-0.14479 -0.29829,-0.32365 0.00001,-0.17883 0.13359,-0.32375 0.29829,-0.32362zM4.24555,2.95956c1.84592,0.28932 0.70246,1.46948 -0.20784,1.37005 -1.48303,-0.29774 -0.84826,-1.38981 0.20784,-1.37005z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="3.56626511"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m5.26703,3.60324c0.00021,0.01867 -0.00661,0.03509 -0.00844,0.05444 0.05233,0.09406 -0.22323,0.80856 -1.22088,0.67194 -0.57676,-0.07893 -0.95747,-0.5323 -0.98127,-0.71508 -0.50936,0.18612 -0.84406,0.49543 -0.84406,0.84659 -0,0.56923 0.81785,0.58154 1.89902,0.58154 1.08116,0 2.0164,-0.01237 2.0164,-0.58154 0,-0.35818 -0.33414,-0.67315 -0.86077,-0.8579z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="1.22790575"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m4.21065,3.68341c-0.10165,0.00228 -0.31432,-0.3476 -0.26587,-0.43794 0.04845,-0.09031 0.45494,-0.10142 0.50811,-0.0138 0.05318,0.08763 -0.14062,0.44899 -0.24224,0.45174z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.05099035"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.50099,1.94667 l-0.71003,0.63933c-0.39214,0 -0.71003,-0.28624 -0.71003,-0.63933 -0,-0.35308 0.31789,-0.63932 0.71003,-0.63932 0.39214,0 0.71003,0.28624 0.71003,0.63932z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m6.20268,1.94974c0,0.35308 -0.31789,0.63932 -0.71003,0.63932l-0.71003,-0.63932c-0,-0.35308 0.31789,-0.63932 0.71003,-0.63932 0.39214,0 0.71003,0.28624 0.71003,0.63932z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.98944,1.38194c-0.66156,0.02341 -1.23101,0.3857 -1.3319,0.9771 -0.12399,0.72673 0.83731,2.35197 1.587,2.35794 0.88289,0.00709 1.7492,-2.25847 1.27905,-2.7227 -0.44945,-0.4438 -1.01961,-0.63057 -1.53415,-0.61234zM4.82334,2.16587c0.1645,0.00016 0.29778,0.14501 0.29779,0.32362 0,0.17862 -0.13328,0.32349 -0.29779,0.32365 -0.16471,0.00013 -0.2983,-0.14479 -0.29829,-0.32365 0.00001,-0.17882 0.13359,-0.32375 0.29829,-0.32362zM3.50262,2.22187c0.1645,0.00016 0.29778,0.14501 0.29779,0.32362 0,0.17862 -0.13328,0.32349 -0.29779,0.32365 -0.16471,0.00013 -0.2983,-0.14479 -0.29829,-0.32365 0.00001,-0.17883 0.13359,-0.32375 0.29829,-0.32362zM4.24555,2.95956c1.84592,0.28932 0.70246,1.46948 -0.20784,1.37005 -1.48303,-0.29774 -0.84826,-1.38981 0.20784,-1.37005z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="3.56626511"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m5.26703,3.60323c0.00021,0.01867 -0.00661,0.03509 -0.00844,0.05444 0.05233,0.09406 -0.22323,0.80856 -1.22088,0.67194 -0.57676,-0.07893 -0.95747,-0.5323 -0.98127,-0.71508 -0.50936,0.18612 -0.84406,0.49543 -0.84406,0.84659 -0,0.56923 0.81785,0.58154 1.89902,0.58154 1.08116,0 2.0164,-0.01237 2.0164,-0.58154 0,-0.35818 -0.33414,-0.67315 -0.86077,-0.8579z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="1.22790575"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m4.21065,3.68341c-0.10165,0.00228 -0.31432,-0.3476 -0.26587,-0.43794 0.04845,-0.09031 0.45494,-0.10142 0.50811,-0.0138 0.05318,0.08763 -0.14062,0.44899 -0.24224,0.45174z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.05099035"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.50099,1.94667 l-0.71003,0.63933c-0.39214,0 -0.71003,-0.28624 -0.71003,-0.63933 -0,-0.35308 0.31789,-0.63932 0.71003,-0.63932 0.39214,0 0.71003,0.28624 0.71003,0.63932z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m6.20268,1.94974c0,0.35308 -0.31789,0.63932 -0.71003,0.63932l-0.71003,-0.63932c-0,-0.35308 0.31789,-0.63932 0.71003,-0.63932 0.39214,0 0.71003,0.28624 0.71003,0.63932z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m3.98944,1.38194c-0.66156,0.02341 -1.23101,0.3857 -1.3319,0.9771 -0.12399,0.72673 0.83731,2.35197 1.587,2.35794 0.88289,0.00709 1.7492,-2.25847 1.27905,-2.7227 -0.44945,-0.4438 -1.01961,-0.63057 -1.53415,-0.61234zM4.82334,2.16587c0.1645,0.00016 0.29778,0.14501 0.29779,0.32362 0,0.17862 -0.13328,0.32349 -0.29779,0.32365 -0.16471,0.00013 -0.2983,-0.14479 -0.29829,-0.32365 0.00001,-0.17882 0.13359,-0.32375 0.29829,-0.32362zM3.50262,2.22187c0.1645,0.00016 0.29778,0.14501 0.29779,0.32362 0,0.17862 -0.13328,0.32349 -0.29779,0.32365 -0.16471,0.00013 -0.2983,-0.14479 -0.29829,-0.32365 0.00001,-0.17883 0.13359,-0.32375 0.29829,-0.32362zM4.24555,2.95956c1.84592,0.28932 0.70246,1.46948 -0.20784,1.37005 -1.48303,-0.29774 -0.84826,-1.38981 0.20784,-1.37005z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="3.56626511"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m5.26703,3.60323c0.00021,0.01867 -0.00661,0.03509 -0.00844,0.05444 0.05233,0.09406 -0.22323,0.80856 -1.22088,0.67194 -0.57676,-0.07893 -0.95747,-0.5323 -0.98127,-0.71508 -0.50936,0.18612 -0.84406,0.49543 -0.84406,0.84659 -0,0.56923 0.81785,0.58154 1.89902,0.58154 1.08116,0 2.0164,-0.01237 2.0164,-0.58154 0,-0.35818 -0.33414,-0.67315 -0.86077,-0.8579z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="1.22790575"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m4.21065,3.68341c-0.10165,0.00228 -0.31432,-0.3476 -0.26587,-0.43794 0.04845,-0.09031 0.45494,-0.10142 0.50811,-0.0138 0.05318,0.08763 -0.14062,0.44899 -0.24224,0.45174z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.05099035"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
  <path
      android:pathData="m1.05833,2.11667v0.79375H0.26458V3.43958H1.05833v0.79375h0.52917v-0.79375h0.79375V2.91042h-0.79375v-0.79375z"
      android:strokeAlpha="1"
      android:strokeLineJoin="round"
      android:strokeWidth="0.07264468"
      android:fillColor="#000000"
      android:strokeColor="#00000000"
      android:fillType="nonZero"
      android:fillAlpha="1"
      android:strokeLineCap="round"/>
</vector>


================================================
FILE: bruno/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources
  xmlns:android="http://schemas.android.com/apk/res/android">
    <color name="light_pink">#ffc7ef</color>
    <color name="dark_pink">#330626</color>
    <color name="bright_pink">#ca1f7b</color>

    <color name="dark_green">#063306</color>
    <color name="green_error">#d4d600</color>

    <color name="light_ice">#bfe8ff</color>
    <color name="ice_error">#df94a0</color>
</resources>


================================================
FILE: bruno/res/values/prefArrays.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">

    <string-array name="pref_theme_entries">
	<item>@string/pref_theme_dark</item>
	<item>@string/pref_theme_light</item>
	<item>@string/pref_theme_pine</item>
	<item>@string/pref_theme_ice</item>
    </string-array>
    <string-array name="pref_theme_values">
        <item>dark</item>
        <item>light</item>
        <item>pine</item>
        <item>ice</item>
    </string-array>
</resources>


================================================
FILE: bruno/res/values/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string name="app_name">@string/app_name_bruno</string>
	<string name="conn_title">@string/conn_title_bruno</string>
	<string name="Menu_about">@string/Menu_about_bruno</string>
</resources>



================================================
FILE: bruno/res/values/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:targetApi="17">

	<style name="StyleErrorView">
		<item name="android:textSize">18sp</item>
		<item name="android:padding">5sp</item>
		<item name="android:textColor">#000</item>
		<item name="android:background">@color/bright_pink</item>
		<item name="android:shadowColor">#44000000</item>
		<item name="android:shadowRadius">3.0</item>
	</style>

	<style name="StyleErrorView.Light.Pink">
		<item name="android:background">#f48</item>
	</style>
	<style name="StyleErrorView.Light.Green">
		<item name="android:background">@color/green_error</item>
	</style>
	<style name="StyleErrorView.Light.Ice">
		<item name="android:background">@color/ice_error</item>
	</style>
</resources>


================================================
FILE: bruno/res/values/themes.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:targetApi="11">

	<style name="YaximDialogLight" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
		<item name="colorAccent">#991272</item> <!-- more intense dark_pink -->
		<item name="android:textColorPrimary">#000000</item>
		<item name="android:background">#ffe2ff</item> <!-- very light light_pink -->
	</style>
	<style name="YaximLightTheme" parent="Theme.AppCompat.Light">
		<item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
		<item name="android:windowBackground">@color/light_pink</item>
		<item name="ErrorView">@style/StyleErrorView.Light.Pink</item>
		<item name="colorPrimary">#ffabe7</item> <!-- +50% saturated light_pink -->
		<item name="colorPrimaryDark">#e69ad0</item> <!-- 90% valued colorPrimary -->
		<item name="colorAccent">#991272</item> <!-- double-valued dark_pink -->
		<item name="alertDialogTheme">@style/YaximDialogLight</item>

		<item name="MainGroup">@style/RosterGroupName.Light</item>
		<item name="MainChild">@style/RosterGroupItem.Light</item>
		<item name="ChatMsgHeaderMeColor">#ff6d6dcc</item>
		<item name="ChatMsgHeaderYouColor">#ffcc5050</item>
		<item name="ChatNewMessageColor">#ffb0b0b0</item>
		<item name="ChatStoredMessageColor">#60b0b0b0</item>
		<item name="ChatText">@style/ChatText.Light</item>
		<item name="fontFamily">@font/comfortaa_regular</item>
	</style>

	<style name="YaximDialogDark" parent="Base.Theme.AppCompat.Dialog.Alert">
		<item name="colorAccent">@color/light_pink</item>
		<item name="android:textColorPrimary">#ffffff</item>
		<item name="android:background">#3a2634</item>
	</style>

	<style name="YaximDarkTheme" parent="Theme.AppCompat">
		<item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
		<item name="android:windowBackground">@color/dark_pink</item>
		<item name="colorPrimary">#800f5f</item> <!-- 50% saturated dark_pink -->
		<item name="colorPrimaryDark">#4f0035</item> <!-- 40% saturated dark_pink -->
		<item name="colorAccent">@color/light_pink</item>
		<item name="alertDialogTheme">@style/YaximDialogDark</item>

		<item name="MainGroup">@style/RosterGroupName.Dark</item>
		<item name="MainChild">@style/RosterGroupItem</item>
		<item name="ChatMsgHeaderMeColor">#ff8888ff</item>
		<item name="ChatMsgHeaderYouColor">#ffff8888</item>
		<item name="ChatNewMessageColor">#ff404040</item>
		<item name="ChatStoredMessageColor">#60404040</item>
		<item name="ErrorView">@style/StyleErrorView</item>
		<item name="ChatText">@style/ChatText</item>
		<item name="fontFamily">@font/comfortaa_regular</item>
	</style>

	<style name="YaximDialogDark.Pine">
		<item name="colorAccent">#c7ffc7</item>
		<item name="android:background">#233a23</item> <!-- mix of dark_green and grey -->
	</style>

	<style name="YaximPineTheme" parent="YaximDarkTheme">
		<item name="android:windowBackground">@color/dark_green</item>
		<item name="ErrorView">@style/StyleErrorView.Light.Green</item>
		<item name="colorPrimary">#031903</item> <!-- 50% saturated dark_pink -->
		<item name="colorPrimaryDark">#021002</item> <!-- 40% saturated dark_pink -->
		<item name="colorAccent">#c7ffc7</item>
		<item name="alertDialogTheme">@style/YaximDialogDark.Pine</item>
	</style>

	<style name="YaximDialogLight.Ice">
		<item name="colorAccent">#008fcc</item>
		<item name="android:background">#def3ff</item> <!-- mix of ice and white -->
	</style>
	<style name="YaximIceTheme" parent="YaximLightTheme">
		<item name="android:windowBackground">@color/light_ice</item>
		<item name="ErrorView">@style/StyleErrorView.Light.Ice</item>
		<item name="colorPrimary">#4dbfff</item> <!-- +50% saturated light_ice -->
		<item name="colorPrimaryDark">#008fcc</item> <!-- colorPrimary adapted dark -->
		<item name="colorAccent">#007bbf</item> <!-- darker, saturated ice -->
		<item name="alertDialogTheme">@style/YaximDialogLight.Ice</item>
	</style>
</resources>


================================================
FILE: bruno/src/org/yaxim/androidclient/FlavorConfig.java
================================================
package org.yaxim.androidclient;

public class FlavorConfig {
	public static int getTheme(String theme) {
		switch (theme) {
		case "ice":
			return R.style.YaximIceTheme;
		case "pine":
			return R.style.YaximPineTheme;
		case "light":
			return R.style.YaximLightTheme;
		default:
			return R.style.YaximDarkTheme;
		}
	}
}


================================================
FILE: bruno.rdf.sh
================================================
export NAME="Bruno"
export SHORTDESC="Bruno the Jabber™ Bear"
export DESCRIPTION="Bruno is an Android XMPP/Jabber client with a clean user interface and open source (GPLv3)."
export HOMEPAGE="https://yaxim.org/bruno/"
export LOGO="https://yaxim.org/images/bruno-64.png"
export SCREENSHOT="https://yaxim.org/bruno/screenshots/bruno-roster-dark.png"


================================================
FILE: build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
	repositories {
		mavenCentral()
		google()
	}
	dependencies {
		classpath 'com.android.tools.build:gradle:8.13.2'
	}
}

plugins {
	// obtain revision from git
	id 'org.ajoberstar.grgit' version '5.3.2'
	id 'com.github.triplet.play' version "3.13.0"
}

allprojects {
	repositories {
		mavenLocal()
		google()
		mavenCentral()
	}
}

/////////////// yaxim specific build rules ///////////////
apply plugin: 'com.android.application'
apply plugin: 'com.github.triplet.play'

// gradle rule to download sources for AS (because AS can't on its own)
// run as: `gradle cleanIdea idea`
apply plugin: 'idea'
idea {
    module {
        downloadJavadoc = true
        downloadSources = true
    }
}

ext {
	build_date = new Date().format('yyyy-MM-dd')
	build_revision = grgit.describe(tags: true)
	build_version = "${build_revision} ${build_date}"
}

def versionCodeDate() {
	if (project.hasProperty("RELEASE_MINOR")) {
		return new Date().format("yyyyMMdd" + RELEASE_MINOR).toInteger()
	} else {
		return new Date().format("yyyyMMdd00").toInteger()
	}
}

android {
	namespace "org.yaxim.androidclient"
	compileSdk 35
	useLibrary 'org.apache.http.legacy'
	flavorDimensions ("style", "distribution")
	buildFeatures {
		aidl = true
		buildConfig = true
	}
	defaultConfig {
		applicationId "org.yaxim"
		minSdk 14
		//noinspection ExpiredTargetSdkVersion
		targetSdk 35
		versionName "$build_revision"
		versionCode versionCodeDate()
		vectorDrawables.useSupportLibrary = true
		resValue "string", "build_revision", "$build_revision"
		resValue "string", "build_date", "$build_date"
		resValue "string", "build_version", "$build_version"
	}

	if (project.hasProperty("RELEASE_KEY_ALIAS")) {
		signingConfigs {
			release {
				storeFile file(RELEASE_STORE_FILE)
				storePassword RELEASE_STORE_PASSWORD
				keyAlias RELEASE_KEY_ALIAS
				keyPassword RELEASE_KEY_PASSWORD
			}
		}
		buildTypes {
			release {
				signingConfig signingConfigs.release
			}
		}
	}

	buildTypes {
		debug {
			minifyEnabled true
			proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.cfg'
		}
		release {
			minifyEnabled true
			proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.cfg'
		}
	}
	productFlavors {
		yaxim {
			dimension "style"
			applicationIdSuffix "androidclient"
		}
		bruno {
			dimension "style"
			applicationIdSuffix "bruno"
		}
		play {
			dimension "distribution"
		}
		free {
			dimension "distribution"
		}

		applicationVariants.all { variant ->
			variant.resValue "string", "application_id", "${variant.properties.applicationId}"
		}
	}

	sourceSets {
		main {
			manifest.srcFile 'AndroidManifest.xml'
			java.srcDirs = ['src']
			aidl.srcDirs = ['src']
			renderscript.srcDirs = ['src']
			res.srcDirs = ['res']
			assets.srcDirs = ['assets']
		}
		yaxim {
			java.srcDirs = ['yaxim/src']
			res.srcDirs = ['yaxim/res']
			assets.srcDirs = ['yaxim/assets']
		}
		bruno {
			java.srcDirs = ['bruno/src']
			res.srcDirs = ['bruno/res']
			assets.srcDirs = ['bruno/assets']
		}
		play {
			manifest.srcFile 'play/AndroidManifest.xml'
			java.srcDirs = ['play/src']
			res.srcDirs = ['play/res']
			assets.srcDirs = ['play/assets']
		}
		free {
			java.srcDirs = ['free/src']
		}
	}
	lintOptions {
		disable 'MissingTranslation'
	}
}
play {
	serviceAccountCredentials = file('play-publish-credentials.json')
	track = 'beta'
}

dependencies {
	def SMACK_VERSION = "4.3.5-SNAPSHOT"
	// Google Push via FCM
	playImplementation('com.google.firebase:firebase-messaging:17.3.4') {
		exclude group: 'com.google.firebase', module: 'firebase-core'
		exclude group: 'com.google.firebase', module: 'firebase-analytics'
		exclude group: 'com.google.firebase', module: 'firebase-measurement-connector'
	}
	implementation 'com.android.support:appcompat-v7:28.0.0'
	// implicit compile 'com.android.support:support-v4:25.+'
	implementation project('MemorizingTrustManager')
	api fileTree(include: ['*.jar'], dir: 'libs')
	api fileTree(include: ['*.aar'], dir: 'libs')
	implementation 'me.leolin:ShortcutBadger:1.1.22@aar'
	implementation 'org.hsluv:hsluv:0.2'
	implementation 'com.koushikdutta.urlimageviewhelper:urlimageviewhelper:1.0.4'
	implementation 'com.google.zxing:core:3.3.3'

	// play referrer
	playImplementation 'com.android.installreferrer:installreferrer:1.1'
	// smack4
	//compile project("Smack:smack-android-extensions")
	//compile project("Smack:smack-tcp")
	//compile project("Smack:smack-im")
	//// for Carbons, and other
	//compile project("Smack:smack-experimental")
	implementation 'org.jxmpp:jxmpp-jid:0.6.4-SNAPSHOT'
	implementation "org.igniterealtime.smack:smack-android-extensions:$SMACK_VERSION"
	implementation "org.igniterealtime.smack:smack-tcp:$SMACK_VERSION"
	implementation "org.igniterealtime.smack:smack-im:$SMACK_VERSION"
	// for Carbons, and other
	implementation "org.igniterealtime.smack:smack-experimental:$SMACK_VERSION"
}

// for smack4
configurations {
	all*.exclude group: 'xpp3', module: 'xpp3'
}


================================================
FILE: build.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project name="yaxim" default="help">

    <!-- The local.properties file is created and updated by the 'android' tool.
         It contains the path to the SDK. It should *NOT* be checked into
         Version Control Systems. -->
    <loadproperties srcFile="local.properties" />

    <!-- The ant.properties file can be created by you. It is only edited by the
         'android' tool to add properties to it.
         This is the place to change some Ant specific build properties.
         Here are some properties you may want to change/update:

         source.dir
             The name of the source directory. Default is 'src'.
         out.dir
             The name of the output directory. Default is 'bin'.

         For other overridable properties, look at the beginning of the rules
         files in the SDK, at tools/ant/build.xml

         Properties related to the SDK location or the project target should
         be updated using the 'android' tool with the 'update' action.

         This file is an integral part of the build system for your
         application and should be checked into Version Control Systems.

         -->
    <property file="ant.properties" />

    <!-- The project.properties file is created and updated by the 'android'
         tool, as well as ADT.

         This contains project specific properties such as project target, and library
         dependencies. Lower level build properties are stored in ant.properties
         (or in .classpath for Eclipse projects).

         This file is an integral part of the build system for your
         application and should be checked into Version Control Systems. -->
    <loadproperties srcFile="project.properties" />

    <!-- quick check on sdk.dir -->
    <fail
            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project'"
            unless="sdk.dir"
    />

    <!-- Custom Android task to deal with the project target, and import the proper rules.
         This requires ant 1.6.0 or above. -->
    <path id="android.antlibs">
        <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
        <pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
        <pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
        <pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />
        <pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />
    </path>

    <!-- Execute the Android Setup task that will setup some properties specific to the target,
         and import the build rules files.

         The rules file is imported from
            <SDK>/platforms/<target_platform>/templates/android_rules.xml

         To customize some build steps for your project:
         - copy the content of the main node <project> from android_rules.xml
         - paste it in this build.xml below the <setup /> task.
         - disable the import by changing the setup task below to <setup import="false" />

         This will ensure that the properties are setup correctly but that your customized
         build steps are used.
    -->

    <target name="-pre-build">
	<tstamp>
	    <format property="build.date" pattern="yyyy-MM-dd" />
	</tstamp>
	<exec executable="git" outputproperty="git.revision">
	    <arg line="describe --tags --dirty=+"/>
	</exec>
	<copy file="version.xml.tpl" tofile="${resource.absolute.dir}/values/version.xml" overwrite="true">
	    <filterchain>
		<replacetokens>
		    <token key="build_revision" value="${git.revision}"/>
		    <token key="build_date" value="${build.date}"/>
		    <token key="build_version" value="${ant.project.name} ${git.revision} ${build.date}"/>
		</replacetokens>
	    </filterchain>

	</copy>
    </target>

    <target name="check-proguard">
        <available file="tools/proguard.jar" property="have.proguard"/>
    </target>

    <target name="proguard" depends="check-proguard">
	    <fail unless="have.proguard">Please download ProGuard from http://sourceforge.net/projects/proguard/files/ and place the JAR into the tools/ directory!</fail>
    </target>

    <target name="proguard.execute" depends="-compile, -post-compile" if="have.proguard">
        <taskdef resource="proguard/ant/task.properties"
                classpath="tools/proguard.jar" />
	<!-- following lines copied from android-sdk build.xml -->
	<path id="project.jars.ref">
		<pathelement location="${out.classes.absolute.dir}" />
		<path refid="project.all.jars.path" />
	</path>
	<pathconvert property="project.jars" refid="project.jars.ref">
		<firstmatchmapper>
			<regexpmapper from='^([^ ]*)( .*)$$' to='"\1\2"'/>
			<identitymapper/>
		</firstmatchmapper>
	</pathconvert>

        <proguard configuration="proguard.cfg">
	    -injars ${project.jars}
	    -outjars ${out.absolute.dir}/classes.min.jar
	    -libraryjars ${toString:project.target.class.path}
	    -printusage ${out.absolute.dir}/proguard.usage
        </proguard>
    </target>

    <!-- Convert this project's .class files into .dex files. -->
    <target name="dex.proguard" depends="proguard.execute" if="have.proguard">
	<dex executable="${dx}" output="${intermediate.dex.file}"
                    nolocals="@{nolocals}"
                    verbose="${verbose}"
                    previousBuildType="${build.last.target}"
                    buildType="${build.target}">
		    <path path="${out.absolute.dir}/classes.min.jar" />
	</dex>
    </target>

    <!-- Convert this project's .class files into .dex files. -->
    <target name="dex.vanilla" depends="-compile, -post-compile" unless="have.proguard">
	<dex-helper>
	</dex-helper>
    </target>

    <target name="-dex" depends="dex.vanilla, dex.proguard" />

    <!-- Import the actual build file.

         To customize existing targets, there are two options:
         - Customize only one target:
             - copy/paste the target into this file, *before* the
               <import> task.
             - customize it to your needs.
         - Customize the whole content of build.xml
             - copy/paste the content of the rules files (minus the top node)
               into this file, replacing the <import> task.
             - customize to your needs.

         ***********************
         ****** IMPORTANT ******
         ***********************
         In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
         in order to avoid having your file be overridden by tools such as "android update project"
    -->
    <!-- version-tag: 1 -->
    <import file="${sdk.dir}/tools/ant/build.xml" />

</project>


================================================
FILE: export-icons.sh
================================================
#!/bin/sh

# convert a single svg file into a png in the according drawable dir
svg2png() {
	basename=$1
	width=$2
	height=$3
	dest=$4
	api=$5
	inkscape --export-png=res/$dest$api/$basename.png --export-width=$width --export-height=$height --export-background-opacity=0 -C -z asset-graphics/$basename$api.svg
}

# convert a single svg into a group of PNGs for all DPIs
svg2all() {
	basename=$1
	dpx=$2
	dpy=$3
	api=$4
	while read scale dir ; do
		svg2png $basename $(($dpx*$scale)) $(($dpy*$scale)) drawable$dir $api
	done <<EOF
1
3/2 -hdpi
2 -xhdpi
3 -xxhdpi
4 -xxxhdpi
EOF
}

# convert SVG to launcher icons (sizes at http://stackoverflow.com/a/12768159/539443)
svg2launcher() {
	basename=$1
	api=$2

	svg2all $basename 48 48 $api

	svg2png $basename 512 512 ../asset-graphics/
}

# a roster status icon is 66% of a launcher icon, making it 32dp
# action bar icons are 32dp as well
svg2rosteraction() {
	basename=$1

	svg2all $basename 32 32
}

# a notification bar icon is 16x25dp (pre-v11), or 24dp as of v11
svg2notif() {
	sbname=$1

	svg2png $sbname 16 25 drawable
	svg2png $sbname 24 38 drawable-hdpi
	svg2png $sbname 32 50 drawable-xhdpi

	svg2all $basename 24 24 -v11
}

svg2chat() {
	svg2all $1 18 10
}

# convert chat markers
for file in asset-graphics/ic_chat_*.svg
do
	basename=`basename $file .svg`
	svg2chat $basename
done

# convert launcher icon
svg2launcher icon

# convert GNU for about dialog
svg2all gnuicon 48 48

# convert statusbar notification icons
svg2notif sb_message
svg2notif ic_online
svg2notif ic_offline

# convert roster status
for file in asset-graphics/ic_action_*.svg asset-graphics/ic_status_*.svg
do
	basename=`basename $file .svg`
	svg2rosteraction $basename
done



================================================
FILE: free/src/org/yaxim/androidclient/service/InstallReferrerReceiver.java
================================================
package org.yaxim.androidclient.service;

import android.content.Context;
import android.util.Log;

public class InstallReferrerReceiver {
	static final String TAG = "yaxim.InstallReceiver";

	public static void queryInstallReferrerLibrary(final Context context) {
		Log.d(TAG, "No-Op InstallReferrer, see https://gitlab.com/fdroid/fdroidclient/-/issues/1932");
	}
}


================================================
FILE: free/src/org/yaxim/androidclient/service/PushManager.java
================================================
package org.yaxim.androidclient.service;

import android.app.Service;
import android.util.Log;

import org.jivesoftware.smack.XMPPConnection;

public class PushManager {
	private final static String TAG = "yaxim.PushManager";

	public PushManager(Service service, XMPPConnection connection) {
		Log.w(TAG, "This version of yaxim doesn't have Push support");
	}

	public boolean enableAccountPush() {
		return false;
	}

	public boolean disableAccountPush() {
		return false;
	}
}


================================================
FILE: play/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:tools="http://schemas.android.com/tools" package="org.yaxim.androidclient"
	xmlns:android="http://schemas.android.com/apk/res/android">

	<application tools:ignore="GoogleAppIndexingWarning">

		<meta-data android:name="firebase_analytics_collection_deactivated" android:value="true" />
		<meta-data android:name="google_analytics_adid_collection_enabled" android:value="false" />

		<service android:name=".service.PushMessageReceiver" android:exported="false" >
			<intent-filter>
				<action android:name="com.google.firebase.MESSAGING_EVENT" />
			</intent-filter>
		</service>

		<receiver android:name=".service.InstallReferrerReceiver"
			android:enabled="true"
			android:exported="true">
			<intent-filter>
				<action android:name="com.android.vending.INSTALL_REFERRER"/>
			</intent-filter>
		</receiver>

	</application>

</manifest>


================================================
FILE: play/res/values/push.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string name="push_service">push.yax.im</string>
	<string name="gcm_defaultSenderId" translatable="false">919923047082</string>
	<string name="google_app_id">1:919923047082:android:5c6e1f8ed3616cbf88eed3</string>
</resources>


================================================
FILE: play/src/org/yaxim/androidclient/service/InstallReferrerReceiver.java
================================================
package org.yaxim.androidclient.service;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.RemoteException;
import android.util.Log;

import com.android.installreferrer.api.InstallReferrerClient;
import com.android.installreferrer.api.InstallReferrerClient.InstallReferrerResponse;
import com.android.installreferrer.api.InstallReferrerStateListener;
import com.android.installreferrer.api.ReferrerDetails;

import org.yaxim.androidclient.MainWindow;
import org.yaxim.androidclient.data.YaximConfiguration;
import org.yaxim.androidclient.util.XMPPHelper;

import java.net.URLDecoder;

public class InstallReferrerReceiver extends BroadcastReceiver {
	static final String TAG = "yaxim.InstallReceiver";
	static boolean receivedReferrer = false;

	static synchronized void startActivity(Context context, Uri reference) {
		if (receivedReferrer)
			return;
		receivedReferrer = true;
		Log.i(TAG, "Referrer: " + reference);
		Intent ref_intent = new Intent(context, MainWindow.class)
				.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP)
				.setAction(Intent.ACTION_VIEW)
				.setData(reference);
		context.startActivity(ref_intent);
	}

	@Override
	public void onReceive(Context context, Intent intent) {
		Log.d(TAG, "onReceive " + intent);
		try {
			YaximConfiguration config = new YaximConfiguration(context);
			String ref = URLDecoder.decode(intent.getStringExtra("referrer"), "UTF-8");
			//config.storeInstallReferrer(ref);
			Log.w(TAG, "Ignoring legacy Referrer: " + ref);
			//startActivity(context, Uri.parse(ref));
		} catch (Exception e) {
			Log.e(TAG, "Error in handling referrer: " + e.getLocalizedMessage());
			e.printStackTrace();
		}
	}

	public static void queryInstallReferrerLibrary(final Context context) {
		Log.d(TAG, "Querying InstallReferrer");
		final InstallReferrerClient referrerClient = InstallReferrerClient.newBuilder(context).build();
		referrerClient.startConnection(new InstallReferrerStateListener() {
			@Override
			public void onInstallReferrerSetupFinished(int responseCode) {
				Log.d(TAG, "InstallReferrerSetup: " + responseCode);
				switch (responseCode) {
					case InstallReferrerResponse.OK:
						// Connection established.
						try {
							ReferrerDetails response = referrerClient.getInstallReferrer();
							String referrerUrl = response.getInstallReferrer();
							Log.d(TAG, "InstallReferrerSetup: " + referrerUrl);
							//long referrerClickTime = response.getReferrerClickTimestampSeconds();
							//long appInstallTime = response.getInstallBeginTimestampSeconds();
							//boolean instantExperienceLaunched = response.getGooglePlayInstantParam();
							Uri ref = XMPPHelper.transmogrifyXmppUriHelper(Uri.parse(referrerUrl));
							if (ref != null)
								startActivity(context, ref);
						} catch (RemoteException e) {
							e.printStackTrace();
						}
						break;
					case InstallReferrerResponse.FEATURE_NOT_SUPPORTED:
						// API not available on the current Play Store app.
						break;
					case InstallReferrerResponse.SERVICE_UNAVAILABLE:
						// Connection couldn't be established.
						break;
				}
			}

			@Override
			public void onInstallReferrerServiceDisconnected() {
				// Try to restart the connection on the next request to
				// Google Play by calling the startConnection() method.
			}
		});
	}
}


================================================
FILE: play/src/org/yaxim/androidclient/service/PushManager.java
================================================
package org.yaxim.androidclient.service;

import android.app.Service;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.util.Log;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.FirebaseApp;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.InstanceIdResult;

import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.commands.AdHocCommandManager;
import org.jivesoftware.smackx.commands.RemoteCommand;
import org.jivesoftware.smackx.push_notifications.PushNotificationsManager;
import org.jivesoftware.smackx.xdata.Form;
import org.jivesoftware.smackx.xdata.FormField;
import org.jivesoftware.smackx.xdata.packet.DataForm;
import org.jxmpp.jid.Jid;
import org.jxmpp.jid.impl.JidCreate;
import org.yaxim.androidclient.R;
import org.yaxim.androidclient.YaximApplication;

import java.util.HashMap;

public class PushManager {
	private final static String TAG = "yaxim.PushManager";
	private final static String NODE = "v1-register-push";

	private String deviceId = null;
	private String pushToken = null;
	private Service service;
	private XMPPConnection connection;

	public PushManager(Service service, XMPPConnection connection) {
		this.deviceId = YaximApplication.getConfig().getPushNodeId();
		this.service = service;
		this.connection = connection;
	}

	public boolean enableAccountPush() {
		if (!connection.isAuthenticated())
			return false;
		PushNotificationsManager pnm = PushNotificationsManager.getInstanceFor(connection);
		try {
			if (!pnm.isSupported()) {
				Log.i(TAG, "push not supported by account");
				return false;
			}
			getFcmPushToken();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}

	public boolean disableAccountPush() {
		try {
			if (connection.isAuthenticated()) {
				Jid push_service = JidCreate.from(service.getString(R.string.push_service));
				PushNotificationsManager.getInstanceFor(connection).disableAll(push_service);
				Log.i(TAG, "Successfully disabled push for " + push_service + " on account.");
				return true;
			}
		} catch (Exception e) {
			Log.e(TAG, "Error obtaining FCM token!");
			e.printStackTrace();
		}
		return false;
	}

	private void getFcmPushToken() {
		Log.d(TAG, "requesting FCM token");
		//FirebaseApp.initializeApp(YaximApplication.getApp());
		FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
			@Override
			public void onComplete(@NonNull Task<InstanceIdResult> task) {
				if (!task.isSuccessful()) {
					Log.w(TAG, "FCM token retrieval failed.");
					task.getException().printStackTrace();
					return;
				}
				try {
					InstanceIdResult result = task.getResult();
					pushToken = result.getToken();
					Log.d(TAG, "FCM token: " + pushToken);
				} catch (Exception e) {
					Log.e(TAG, "Error obtaining FCM token!");
					e.printStackTrace();
				}
				try {
					if (connection.isAuthenticated()) {
						Jid push_service = JidCreate.from(service.getString(R.string.push_service));
						AdHocCommandManager ahcm = AdHocCommandManager.getAddHocCommandsManager(connection);
						RemoteCommand rc = ahcm.getRemoteCommand(push_service, NODE);
						DataForm df = new DataForm(DataForm.Type.submit);
						df.addField(new FormField("type", "fcm"));
						df.addField(new FormField("node", deviceId));
						df.addField(new FormField("token", pushToken));
						rc.execute(new Form(df));
						if (rc.getForm().hasField("node") && rc.getForm().hasField("secret")) {
							String node = rc.getForm().getField("node").getFirstValue();
							String secret = rc.getForm().getField("secret").getFirstValue();
							HashMap<String, String> pub_opts = new HashMap<>();
							pub_opts.put("secret", secret);
							PushNotificationsManager.getInstanceFor(connection)
									.enable(push_service, node, pub_opts);
						}
						Log.i(TAG, "Successfully registered push for " + push_service + " on account.");
					} else
						Log.i(TAG, "Not connected to server, not registering for FCM push.");
				} catch (Exception e) {
					Log.e(TAG, "Error obtaining FCM token!");
					e.printStackTrace();
				}
			}
		});

	}
}


================================================
FILE: play/src/org/yaxim/androidclient/service/PushMessageReceiver.java
================================================
package org.yaxim.androidclient.service;

import android.content.Intent;
import android.os.Build;
import android.text.TextUtils;
import android.util.Log;

import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;

import org.yaxim.androidclient.YaximApplication;

public class PushMessageReceiver extends FirebaseMessagingService {
	private final static String TAG = "yaxim.PushMessageRcvr";

	private void startServiceIfNeeded(String action) {
		if (!YaximApplication.getConfig().autoConnect) {
			Log.d(TAG, "not starting, auto-connect disabled.");
			return;
		}
		Intent xmppServiceIntent = new Intent(this, XMPPService.class);
		if (!TextUtils.isEmpty(action))
			xmppServiceIntent.setAction(action);
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
			startForegroundService(xmppServiceIntent);
		} else
			startService(xmppServiceIntent);
	}

	@Override
	public void onMessageReceived(RemoteMessage remoteMessage) {
		Log.d(TAG, "Received push message!");
		startServiceIfNeeded(null);
	}

	@Override
	public void onNewToken(String s) {
		Log.d(TAG, "Received token update: " + s);
		startServiceIfNeeded("newtoken");
	}
}


================================================
FILE: proguard.cfg
================================================
-dontobfuscate
-optimizationpasses 5
-dontskipnonpubliclibraryclasses
-dontpreverify
-allowaccessmodification
-verbose
-optimizations !code/simplification/arithmetic,!field/*,field/propagation/value,!class/merging/*,!code/allocation/variable

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-dontwarn org.bouncycastle.**
-keepclasseswithmembers class * extends org.jivesoftware.smack.sasl.SASLMechanism {
	public <init>(org.jivesoftware.smack.SASLAuthentication);
}
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }

-keepattributes *Annotation*

# smack4
# We don't use jzlib, but instead the Android API for compression
-dontnote com.jcraft.jzlib.*

-dontnote android.os.SystemProperties

-dontnote sun.security.pkcs11.SunPKCS11

# Smack specific configuration
-keep class org.jivesoftware.smack.** { *; }
-keep class org.jivesoftware.smackx.** { *; }

-dontwarn com.kenai.jbosh.*
-dontwarn android.support.v4.app.*
-keep class android.support.v7.widget.SearchView { *; }
-dontwarn com.google.firebase.analytics.connector.AnalyticsConnector


================================================
FILE: project.properties
================================================
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system use,
# "ant.properties", and override values to adapt the script to your
# project structure.

# Indicates whether an apk should be generated for each density.
split.density=false
android.library.reference.1=MemorizingTrustManager/
android.library.reference.2=../android-sdk/extras/android/support/v7/appcompat
proguard.config=proguard.cfg
proguard.enabled=true
# Project target.
target=android-23
apk-configurations=


================================================
FILE: rdf.sh
================================================
#!/bin/bash

source yaxim.rdf.sh
envsubst < base.rdf.xml > yaxim.rdf.xml

source bruno.rdf.sh
envsubst < base.rdf.xml > bruno.rdf.xml


================================================
FILE: res/drawable/count_bcg.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <solid android:color="#FFE73C18" />
    <corners android:radius="4sp" />
</shape>


================================================
FILE: res/drawable/group_indicator.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_expanded="true"
        android:drawable="@drawable/ic_group_opened" />
    <item
        android:drawable="@drawable/ic_group_closed" />
</selector>



================================================
FILE: res/drawable/ic_action_attach.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
	android:tint="?attr/colorControlNormal"
        android:width="24sp"
        android:height="24sp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M16.5,6v11.5c0,2.21 -1.79,4 -4,4s-4,-1.79 -4,-4V5c0,-1.38 1.12,-2.5 2.5,-2.5s2.5,1.12 2.5,2.5v10.5c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1V6H10v9.5c0,1.38 1.12,2.5 2.5,2.5s2.5,-1.12 2.5,-2.5V5c0,-2.21 -1.79,-4 -4,-4S7,2.79 7,5v12.5c0,3.04 2.46,5.5 5.5,5.5s5.5,-2.46 5.5,-5.5V6h-1.5z"/>
</vector>


================================================
FILE: res/drawable/ic_action_camera.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:tint="?attr/colorControlNormal"
        android:width="24sp"
        android:height="24sp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0"/>
    <path
        android:fillColor="#FF000000"
        android:pathData="M9,2L7.17,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2L9,2zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z"/>
</vector>


================================================
FILE: res/drawable/ic_action_contacts_all.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24sp"
    android:height="24sp"
    android:tint="?attr/colorControlNormal"
    android:viewportWidth="24"
    android:viewportHeight="24">
  <path
      android:pathData="m16.3877,13.4155c-0.2567,0 -0.5489,0.0172 -0.8587,0.0431 1.0269,0.7236 1.7439,1.6971 1.7439,2.9721v2.1537h5.3115v-2.1537c0,-2.0073 -4.1341,-3.0152 -6.1967,-3.0152z"
      android:strokeAlpha="1"
      android:strokeWidth="0.87328565"
      android:fillColor="#00000000"
      android:strokeColor="#000000"
      android:fillAlpha="1"/>
  <path
      android:fillColor="#FF000000"
      android:pathData="M16,5C14.34,5 13,6.34 13,8C13,9.66 14.34,11 16,11C17.66,11 18.9902,9.66 18.9902,8C18.9902,6.34 17.66,5 16,5zM16,6C17.1,6 18,6.9 18,8C18,9.1 17.1,10 16,10C14.9,10 14,9.1 14,8C14,6.9 14.9,6 16,6z"/>
  <path
      android:fillColor="#FF000000"
      android:pathData="M8,11C9.66,11 10.99,9.66 10.99,8 10.99,6.34 9.66,5 8,5 6.34,5 5,6.34 5,8c0,1.66 1.34,3 3,3z"/>
  <path
      android:fillColor="#FF000000"
      android:pathData="M8,13C5.67,13 1,14.17 1,16.5V19H15V16.5C15,14.17 10.33,13 8,13Z"/>
</vector>


================================================
FILE: res/drawable/ic_action_contacts_online.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:tint="?attr/colorControlNormal"
    android:width="24sp"
    android:height="24sp"
    android:viewportWidth="24"
    android:viewportHeight="24">
  <path
      android:fillColor="#FF000000"
      android:pathData="M16,11c1.66,0 2.99,-1.34 2.99,-3S17.66,5 16,5c-1.66,0 -3,1.34 -3,3s1.34,3 3,3zM8,11c1.66,0 2.99,-1.34 2.99,-3S9.66,5 8,5C6.34,5 5,6.34 5,8s1.34,3 3,3zM8,13c-2.33,0 -7,1.17 -7,3.5L1,19h14v-2.5c0,-2.33 -4.67,-3.5 -7,-3.5zM16,13c-0.29,0 -0.62,0.02 -0.97,0.05 1.16,0.84 1.97,1.97 1.97,3.45L17,19h6v-2.5c0,-2.33 -4.67,-3.5 -7,-3.5z"/>
</vector>


================================================
FILE: res/drawable/ic_action_file.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
	android:tint="?attr/colorControlNormal"
        android:width="24sp"
        android:height="24sp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M6,2c-1.1,0 -1.99,0.9 -1.99,2L4,20c0,1.1 0.89,2 1.99,2L18,22c1.1,0 2,-0.9 2,-2L20,8l-6,-6L6,2zM13,9L13,3.5L18.5,9L13,9z"/>
</vector>


================================================
FILE: res/drawable/ic_action_person_add.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
	android:tint="?attr/colorControlNormal"
        android:width="24sp"
        android:height="24sp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M15,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM6,10L6,7L4,7v3L1,10v2h3v3h2v-3h3v-2L6,10zM15,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
</vector>


================================================
FILE: res/drawable/ic_action_photo.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
	android:tint="?attr/colorControlNormal"
        android:width="24sp"
        android:height="24sp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M21,19V5c0,-1.1 -0.9,-2 -2,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2zM8.5,13.5l2.5,3.01L14.5,12l4.5,6H5l3.5,-4.5z"/>
</vector>


================================================
FILE: res/drawable/ic_action_search.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:tint="?attr/colorControlNormal"
        android:width="24sp"
        android:height="24sp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/>
</vector>


================================================
FILE: res/drawable/ic_status_available.xml
================================================
<vector android:height="32sp" android:viewportHeight="480"
    android:viewportWidth="480" android:width="32sp"
    xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillAlpha="1" android:fillColor="#99cc33"
        android:pathData="M108.789,64.865L371.211,64.865A43.925,43.925 88.201,0 1,415.135 108.789L415.135,371.211A43.925,43.925 88.201,0 1,371.211 415.135L108.789,415.135A43.925,43.925 88.201,0 1,64.865 371.211L64.865,108.789A43.925,43.925 88.201,0 1,108.789 64.865z"
        android:strokeAlpha="1" android:strokeColor="#669900" android:strokeWidth="3.00193024"/>
    <path android:fillAlpha="0.50196081" android:fillColor="#ffffff"
        android:pathData="m162.285,141.042c-25.01,0 -45.174,21.209 -45.174,47.517l0,77.881c0,26.308 20.163,47.517 45.174,47.517l93.285,0 43.857,61.794 0,-61.794 19.143,0c25.01,0 45.072,-21.209 45.072,-47.517l0,-77.881c0,-26.308 -20.062,-47.517 -45.072,-47.517l-156.285,0z"
        android:strokeAlpha="1" android:strokeColor="#669900" android:strokeWidth="3.08531718"/>
</vector>


================================================
FILE: res/drawable/ic_status_away.xml
================================================
<vector android:height="32sp" android:viewportHeight="480"
    android:viewportWidth="480" android:width="32sp"
    xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillAlpha="1" android:fillColor="#ff9900"
        android:pathData="M108.789,64.865L371.211,64.865A43.925,43.925 88.201,0 1,415.135 108.789L415.135,371.211A43.925,43.925 88.201,0 1,371.211 415.135L108.789,415.135A43.925,43.925 88.201,0 1,64.865 371.211L64.865,108.789A43.925,43.925 88.201,0 1,108.789 64.865z"
        android:strokeAlpha="1" android:strokeColor="#ff6600" android:strokeWidth="3.00193024000000008"/>
    <path android:fillAlpha="0.627451" android:fillColor="#ffffff"
        android:pathData="m162.285,141.042c-25.01,0 -45.174,21.209 -45.174,47.517l0,77.881c0,26.308 20.163,47.517 45.174,47.517l93.285,0 43.857,61.794 0,-61.794 19.143,0c25.01,0 45.072,-21.209 45.072,-47.517l0,-77.881c0,-26.308 -20.062,-47.517 -45.072,-47.517l-156.285,0z"
        android:strokeAlpha="1" android:strokeColor="#ff6600" android:strokeWidth="3.08531718"/>
</vector>


================================================
FILE: res/drawable/ic_status_chat.xml
================================================
<vector android:height="32sp" android:viewportHeight="480"
    android:viewportWidth="480" android:width="32sp"
    xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillAlpha="1" android:fillColor="#83c127"
        android:pathData="m108.855,65.302c-24.315,0 -43.846,19.571 -43.846,43.846l0,261.7c0,24.275 19.531,43.846 43.846,43.846l262.29,0c24.315,0 43.846,-19.571 43.846,-43.846l0,-261.7c0,-24.275 -19.531,-43.846 -43.846,-43.846l-262.29,0z" android:strokeColor="#00000000"/>
    <path android:fillAlpha="1" android:fillColor="#99cc33"
        android:pathData="M108.891,65L371.109,65A43.891,43.891 92.752,0 1,415 108.891L415,371.109A43.891,43.891 92.752,0 1,371.109 415L108.891,415A43.891,43.891 92.752,0 1,65 371.109L65,108.891A43.891,43.891 92.752,0 1,108.891 65z"
        android:strokeAlpha="1" android:strokeColor="#669900" android:strokeWidth="3.17873645000000016"/>
    <path android:fillAlpha="1" android:fillColor="#ffffff"
        android:pathData="m202.513,173.37c-21.035,0 -37.994,17.833 -37.994,39.951l0,65.481c0,22.119 16.959,39.951 37.994,39.951l78.459,0 36.887,51.955 0,-51.955 16.101,0c21.035,0 37.909,-17.833 37.909,-39.951l0,-65.481c0,-22.119 -16.874,-39.951 -37.909,-39.951l-131.446,0z"
        android:strokeAlpha="1" android:strokeColor="#669900" android:strokeWidth="3.17873645"/>
    <path android:fillAlpha="1" android:fillColor="#ffffff"
        android:pathData="m140.806,124.681c-21.035,0 -37.947,17.795 -37.947,39.914l0,65.474c0,22.119 16.912,40.012 37.947,40.012l16.123,0 0,51.907 36.866,-51.907 78.451,0c21.035,0 37.947,-17.893 37.947,-40.012l0,-65.474c0,-22.119 -16.912,-39.914 -37.947,-39.914l-131.44,0z"
        android:strokeAlpha="1" android:strokeColor="#83c127" android:strokeWidth="3.17873645"/>
    <path android:fillAlpha="1" android:fillColor="#ffffff"
        android:pathData="m140.806,124.681c-21.035,0 -37.947,17.795 -37.947,39.914l0,65.474c0,22.119 16.912,40.012 37.947,40.012l16.123,0 0,51.907 36.866,-51.907 78.451,0c21.035,0 37.947,-17.893 37.947,-40.012l0,-65.474c0,-22.119 -16.912,-39.914 -37.947,-39.914l-131.44,0z"
        android:strokeAlpha="1" android:strokeColor="#83c127" android:strokeWidth="0.12714948"/>
    <path android:fillAlpha="1" android:fillColor="#ffffff"
        android:pathData="m272.235,122.652c21.035,0 37.994,17.833 37.994,39.951l0,65.481c0,22.119 -16.959,39.951 -37.994,39.951l-78.459,0 -36.887,51.955 0,-51.955 -16.101,0c-21.035,0 -37.909,-17.833 -37.909,-39.951l0,-65.481c0,-22.119 16.874,-39.951 37.909,-39.951l131.446,0z"
        android:strokeAlpha="1" android:strokeColor="#669900" android:strokeWidth="3.17873645"/>
</vector>


================================================
FILE: res/drawable/ic_status_dnd.xml
================================================
<vector android:height="32sp" android:viewportHeight="480"
    android:viewportWidth="480" android:width="32sp"
    xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillAlpha="1" android:fillColor="#cc0000"
        android:pathData="M108.789,64.865L371.211,64.865A43.925,43.925 88.201,0 1,415.135 108.789L415.135,371.21A43.925,43.925 88.201,0 1,371.211 415.135L108.789,415.135A43.925,43.925 88.201,0 1,64.865 371.21L64.865,108.789A43.925,43.925 88.201,0 1,108.789 64.865z"
        android:strokeAlpha="1" android:strokeColor="#990000" android:strokeWidth="3.00193024"/>
    <path android:fillAlpha="1" android:fillColor="#ff8181"
        android:pathData="m297.824,179.702c0,-8.119 7.568,-14.879 16.661,-14.879 9.092,0 16.76,6.141 16.76,14.259l-0.061,126.195c0,41.001 -37.223,74.24 -83.138,74.24 -33.813,0 -62.912,-18.025 -75.902,-43.902l-48.117,-104.584c-3.393,-7.314 0.647,-16.153 8.911,-19.208 8.399,-3.108 18.137,0.224 21.617,7.725l43.229,89.964 -0.227,-171.711c0,-8.119 7.371,-14.701 16.463,-14.701 9.092,0 16.662,6.404 16.662,14.523"
        android:strokeAlpha="1" android:strokeColor="#990000"
        android:strokeLineCap="round" android:strokeLineJoin="round" android:strokeWidth="2.70502417"/>
    <path android:fillAlpha="1" android:fillColor="#ff8181"
        android:pathData="m297.677,248.777 l0.049,-103.382c0,-8.119 -7.57,-14.524 -16.662,-14.524 -9.093,0 -16.464,6.582 -16.464,14.702"
        android:strokeAlpha="1" android:strokeColor="#990000"
        android:strokeLineCap="round" android:strokeLineJoin="miter" android:strokeWidth="2.70502417"/>
    <path android:fillAlpha="1" android:fillColor="#ff8181"
        android:pathData="m264.157,248.861 l0.246,-133.852c0,-8.12 -7.569,-14.525 -16.662,-14.525 -9.093,0 -16.464,6.582 -16.464,14.702l0,133.17"
        android:strokeAlpha="1" android:strokeColor="#990000"
        android:strokeLineCap="round" android:strokeLineJoin="miter" android:strokeWidth="2.70502417"/>
</vector>


================================================
FILE: res/drawable/ic_status_offline.xml
================================================
<vector android:height="32sp" android:viewportHeight="480"
    android:viewportWidth="480" android:width="32sp"
    xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillAlpha="1" android:fillColor="#bfbfbf"
        android:pathData="M108.789,64.865L371.211,64.865A43.925,43.925 88.201,0 1,415.135 108.789L415.135,371.211A43.925,43.925 88.201,0 1,371.211 415.135L108.789,415.135A43.925,43.925 88.201,0 1,64.865 371.211L64.865,108.789A43.925,43.925 88.201,0 1,108.789 64.865z"
        android:strokeAlpha="1" android:strokeColor="#808080" android:strokeWidth="3.00193024000000008"/>
    <path android:fillAlpha="0.75294119" android:fillColor="#ffffff"
        android:pathData="m162.285,141.042c-25.01,0 -45.174,21.209 -45.174,47.517l0,77.881c0,26.308 20.163,47.517 45.174,47.517l93.285,0 43.857,61.794 0,-61.794 19.143,0c25.01,0 45.072,-21.209 45.072,-47.517l0,-77.881c0,-26.308 -20.062,-47.517 -45.072,-47.517l-156.285,0z"
        android:strokeAlpha="1" android:strokeColor="#808080" android:strokeWidth="3.08531718"/>
</vector>


================================================
FILE: res/drawable/ic_status_subscribe.xml
================================================
<vector android:height="32sp" android:viewportHeight="480"
    android:viewportWidth="480" android:width="32sp"
    xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillAlpha="0.25098041" android:fillColor="#cc0000"
        android:pathData="M108.789,64.865L371.211,64.865A43.925,43.925 88.201,0 1,415.135 108.789L415.135,371.21A43.925,43.925 88.201,0 1,371.211 415.135L108.789,415.135A43.925,43.925 88.201,0 1,64.865 371.21L64.865,108.789A43.925,43.925 88.201,0 1,108.789 64.865z"
        android:strokeAlpha="1" android:strokeColor="#990000" android:strokeWidth="3.00193024000000008"/>
    <path android:fillAlpha="1" android:fillColor="#ffffff"
        android:pathData="m202.326,96.475l75.348,0l0,110.196l-10.674,80.387l-54,0l-10.674,-80.387zM202.326,315.135l75.348,0l0,68.464l-75.348,0z"
        android:strokeAlpha="1" android:strokeColor="#990000"
        android:strokeLineJoin="round" android:strokeWidth="3.9195869"/>
</vector>


================================================
FILE: res/drawable/ic_status_unknown.xml
================================================
<vector android:height="32sp" android:viewportHeight="480"
    android:viewportWidth="480" android:width="32sp"
    xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillAlpha="1" android:fillColor="#bfbfbf"
        android:pathData="M108.789,64.865L371.211,64.865A43.925,43.925 88.201,0 1,415.135 108.789L415.135,371.21A43.925,43.925 88.201,0 1,371.211 415.135L108.789,415.135A43.925,43.925 88.201,0 1,64.865 371.21L64.865,108.789A43.925,43.925 88.201,0 1,108.789 64.865z"
        android:strokeAlpha="1" android:strokeColor="#808080" android:strokeWidth="3.00193024000000008"/>
    <path android:fillAlpha="1" android:fillColor="#ffffff"
        android:pathData="m270.345,288.32l-66.156,0l0,-9.258q0,-15.493 6.047,-27.397 6.047,-12.092 25.473,-30.609l11.728,-10.959q10.446,-9.825 15.21,-18.516 4.948,-8.691 4.948,-17.383 0,-13.226 -8.796,-20.595 -8.796,-7.558 -24.556,-7.558 -14.844,0 -32.07,6.424 -17.226,6.235 -35.918,18.705l0,-59.328q22.174,-7.936 40.5,-11.714 18.326,-3.779 35.369,-3.779 44.715,0 68.172,18.894 23.457,18.705 23.457,54.793 0,18.516 -7.147,33.254 -7.147,14.549 -24.373,31.364l-11.728,10.77q-12.461,11.714 -16.31,18.894 -3.848,6.991 -3.848,15.493zM204.189,316.283l66.156,0l0,67.264l-66.156,0z"
        android:strokeAlpha="1" android:strokeColor="#808080"
        android:strokeLineJoin="round" android:strokeWidth="3.9195869"/>
</vector>


================================================
FILE: res/drawable/ic_status_xa.xml
================================================
<vector android:height="32sp" android:viewportHeight="480"
    android:viewportWidth="480" android:width="32sp"
    xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillAlpha="1" android:fillColor="#3366ff"
        android:pathData="M109.108,65.597L370.892,65.597A43.741,43.818 90,0 1,414.71 109.338L414.71,370.662A43.741,43.818 90,0 1,370.892 414.403L109.108,414.403A43.741,43.818 90,0 1,65.29 370.662L65.29,109.338A43.741,43.818 90,0 1,109.108 65.597z"
        android:strokeAlpha="1" android:strokeColor="#003399" android:strokeWidth="3.18152999999999997"/>
    <path android:fillAlpha="0.75294119" android:fillColor="#ffffff"
        android:pathData="m125.975,290.151c13.393,26.453 36.084,47.036 63.745,57.808 62.006,24.145 131.837,-6.455 156.024,-68.352 24.187,-61.897 -6.401,-131.678 -68.407,-155.823 0,0 67.077,70.914 -2.609,148.393 -69.686,77.48 -148.754,17.974 -148.754,17.974z"
        android:strokeAlpha="1" android:strokeColor="#003399"
        android:strokeLineCap="square" android:strokeLineJoin="miter" android:strokeWidth="3.1815299"/>
</vector>


================================================
FILE: res/layout/aboutview.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_height="fill_parent" 
	android:layout_width="fill_parent" >
	<LinearLayout
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:orientation="vertical"
		>
		<TextView
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:gravity="center"
			android:textSize="20sp"
			android:text="@string/build_version"
			style="?attr/dialogTextColor"
			android:layout_marginBottom="7sp"
			/>
		<TextView
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:drawableLeft="@drawable/icon"
			android:drawablePadding="10sp"
			android:text="@string/AboutDialog_DevelopersTitle"
			android:textSize="20sp"
			android:padding="10sp"
			style="?attr/dialogTextColor"
			/>
		<TextView
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:autoLink="web"
			android:text="@string/AboutDialog_DevelopersList"
			android:padding="2sp"
			style="?attr/dialogTextColor"
			/>
		<TextView
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:drawableLeft="@drawable/gnuicon"
			android:drawablePadding="15sp"
			android:text="@string/AboutDialog_LicenceTitle"
			android:textSize="20sp"
			android:padding="10sp"
			style="?attr/dialogTextColor"
			/>
		<TextView
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:autoLink="web"
			android:text="@string/AboutDialog_LicenceText"
			android:padding="2sp"
			style="?attr/dialogTextColor"
			/>
		<TextView
			android:id="@+id/translator_credits"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:text="@string/translator_credits"
			android:autoLink="web"
			android:padding="2sp"
			style="?attr/dialogTextColor"
			/>
	</LinearLayout>

</ScrollView>	


================================================
FILE: res/layout/activity_entitylist.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/muclist_layout"
	android:orientation="vertical"
	android:layout_width="fill_parent" 
	android:layout_height="fill_parent">
    
	<ExpandableListView android:id="@android:id/list"
		android:layout_width="fill_parent" 
		android:layout_height="fill_parent"
		android:scrollingCache="true"
		android:focusable="true"
		android:groupIndicator="@drawable/group_indicator"
		android:fadingEdge="none"
		android:cacheColorHint="#0000"
		android:divider="#0000"/>

	<TextView android:id="@android:id/empty"
		android:layout_width="fill_parent" 
		android:layout_height="fill_parent"
		android:gravity="center"
		android:textSize="18sp"
		android:text="@string/muc_synchronizing"/>
</LinearLayout>


================================================
FILE: res/layout/addrosteritemdialog.xml
================================================
<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" 
	android:layout_height="wrap_content"
	>
<LinearLayout
		android:id="@+id/statusLayout" 
		android:orientation="vertical"
		android:layout_width="fill_parent" 
		android:layout_height="wrap_content"
		android:paddingLeft="10sp"
		android:paddingRight="10sp"
		android:paddingBottom="15sp"
		android:paddingTop="10sp">

	<TextView
			android:id="@+id/Addcontact_Title"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:text="@string/addFriend_Summ"
			android:paddingBottom="20sp"
			style="?attr/dialogTextColor"
		/>
	<org.yaxim.androidclient.widget.AutoCompleteJidEdit
			android:id="@+id/AddContact_EditTextField"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:layout_marginBottom="20sp"
			android:gravity="left"
			android:singleLine="true"
			android:imeOptions="actionNext"
			android:textSize="18sp"
			android:maxWidth="200sp"
			android:inputType="textEmailAddress"
			android:hint="@string/Global_JID_hint"
			/>
	
	<EditText
			android:id="@+id/AddContactAlias_EditTextField"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:gravity="left"
			android:layout_marginBottom="20sp"
			android:singleLine="true"
			android:textSize="18sp"
			android:maxWidth="200sp"
			android:hint="@string/addFriend_aliasHint"
			/>
		<org.yaxim.androidclient.dialogs.GroupNameView
			android:id="@+id/AddRosterItem_GroupName"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:orientation="vertical"
			/>
</LinearLayout>
</ScrollView>


================================================
FILE: res/layout/chat_action_title.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
          http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:orientation="horizontal"
	>

	<ImageView android:id="@+id/action_bar_status"
		android:layout_gravity="center_vertical|left"
		android:layout_width="wrap_content"
		android:paddingRight="4sp"
		android:paddingEnd="4sp"
		android:layout_height="wrap_content" />

	<LinearLayout android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:layout_gravity="center_vertical|left"
		android:orientation="vertical" >

		<TextView android:id="@+id/action_bar_title"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:singleLine="true"
			style="@style/TextAppearance.Widget.AppCompat.Toolbar.Title"
			android:ellipsize="end" />
		<TextView android:id="@+id/action_bar_subtitle"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:layout_marginTop="-3sp"
			android:layout_marginBottom="5dip"
			android:singleLine="true"
			android:ellipsize="end"
			android:visibility="gone" />
	</LinearLayout>
</LinearLayout>


================================================
FILE: res/layout/chatrow.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
		android:layout_width="fill_parent" android:padding="4sp" 
		android:layout_height="wrap_content" android:orientation="vertical"
		android:descendantFocusability="blocksDescendants"
		>

		<LinearLayout android:layout_width="fill_parent"
			android:layout_height="wrap_content" android:orientation="horizontal">

			<TextView android:id="@+id/chat_from" android:layout_width="0sp"
				android:layout_height="wrap_content" android:layout_weight="1"
				android:singleLine="true"
				android:textSize="11sp"
				android:textColor="#88f"
				android:textStyle="bold"
				android:ellipsize="end" android:text="@string/chat_from_me" />

			<TextView android:id="@+id/chat_date" android:layout_width="wrap_content"
				android:layout_height="wrap_content"
				android:textSize="11sp"
				android:paddingRight="6sp"
				android:paddingEnd="6sp"
				/>

			<ImageView
			    android:id="@+id/iconView"
			    android:layout_width="wrap_content"
			    android:layout_height="wrap_content"
			    android:layout_gravity="center_vertical"
			    android:layout_marginLeft="6sp"
			    android:layout_marginStart="6sp"
			    android:src="@drawable/ic_chat_msg_status_unread" />

		</LinearLayout>

		<TextView android:id="@+id/chat_message"
			style="?attr/ChatText"
			android:layout_width="fill_parent" android:layout_height="wrap_content"
			android:gravity="center_vertical" />

		<ImageView android:id="@+id/chat_image"
			android:visibility="gone"
			android:scaleType="fitCenter"
			android:adjustViewBounds="true"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:gravity="center_vertical" />

	<TextView android:id="@+id/chat_error"
			  style="?attr/ChatText"
			  android:visibility="gone"
			  android:layout_width="fill_parent" android:layout_height="wrap_content"
			  android:gravity="center_vertical" />
</LinearLayout>


================================================
FILE: res/layout/edittext_dialog.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/layout_root" android:orientation="vertical"
	android:layout_width="fill_parent" android:layout_height="fill_parent"
	android:paddingLeft="15sp"
	android:paddingStart="15sp"
	android:paddingRight="15sp"
	android:paddingEnd="15sp"
	android:paddingBottom="15sp"
	android:paddingTop="10sp"
	android:layout_gravity="top">
	<TextView android:id="@+id/text" android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		style="?attr/dialogTextColor"
		android:gravity="top" android:textSize="16sp" android:paddingBottom="20sp"/>
	<EditText
		android:layout_height="wrap_content"
		android:id="@+id/editText"
		android:layout_width="match_parent"
		>
		<requestFocus></requestFocus>
	</EditText>
</LinearLayout>


================================================
FILE: res/layout/firststartdialog.xml
================================================
<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
		android:orientation="vertical"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:paddingLeft="10sp"
		android:paddingStart="10sp"
		android:paddingRight="10sp"
		android:paddingEnd="10sp"
		android:paddingBottom="15sp"
		android:paddingTop="10sp" >
    <LinearLayout
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:orientation="vertical"
		>
	<TextView
			android:id="@+id/StartupDialog_Summary"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:drawableLeft="@drawable/icon"
			android:drawableStart="@drawable/icon"
			android:text="@string/StartupDialog_Summary"
			android:drawablePadding="10sp"
			android:padding="10sp"
			style="?attr/dialogTextColor"
			android:focusable="true"
		/>
	<TextView
			android:id="@+id/StartupDialog_Username_title"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:text="@string/StartupDialog_Username_title"
			android:padding="2sp"
			style="?attr/dialogTextColor"
		/>
	<org.yaxim.androidclient.widget.AutoCompleteJidEdit
			android:id="@+id/StartupDialog_JID_EditTextField"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:padding="10sp"
			android:gravity="left"
			android:singleLine="true"
			android:imeOptions="actionNext"
			android:textSize="18sp"
			android:maxWidth="200sp"
			android:inputType="textEmailAddress"
			android:hint="@string/Global_JID_hint"
			android:contentDescription="@string/StartupDialog_Username_title"/>
	<CheckBox
			android:id="@+id/create_account"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:text="@string/StartupDialog_create_new"
			style="?attr/dialogTextColor"
		/>
	<TextView
			android:id="@+id/StartupDialog_passwd_title"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:text="@string/StartupDialog_passwd_title"
			android:padding="2sp"
			style="?attr/dialogTextColor"
		/>
	<EditText
			android:id="@+id/StartupDialog_PASSWD_EditTextField"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:password="true"
			android:padding="10sp"
			android:gravity="left"
			android:singleLine="true"
			android:textSize="18sp"
			android:maxWidth="200sp"
			android:hint="@string/StartupDialog_pwHint"
			android:contentDescription="@string/StartupDialog_passwd_title"
			/>
	<CheckBox
			android:id="@+id/password_show"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:text="@string/StartupDialog_pwshowHint"
			style="?attr/dialogTextColor"
			/>
    </LinearLayout>
</ScrollView>


================================================
FILE: res/layout/groupnameview.xml
================================================
<merge xmlns:android="http://schemas.android.com/apk/res/android">
	<Spinner android:id="@+id/groupspinner" 
		android:prompt="@string/AddContact_SpinnerPrompt" 
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:layout_marginBottom="10sp">
	</Spinner>
	<EditText
		android:id="@+id/newgroupinput"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:visible="false"
		android:enabled="false"
		android:singleLine="true"
		android:hint="@string/NewGroup_EditTextField_Hint"
		/>
</merge>


================================================
FILE: res/layout/main.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent" 
	android:layout_height="fill_parent">
    
	<TextView android:id="@+id/error_view"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		style="?ErrorView"
		android:visibility="gone"
		android:text=""
		android:maxLines = "6"
		android:onClick="onClickClipboard"
		android:focusable="true"/>

	<ExpandableListView android:id="@android:id/list"
		android:layout_width="fill_parent" 
		android:layout_height="fill_parent"
		android:scrollingCache="true"
		android:focusable="true"
		android:groupIndicator="@drawable/group_indicator"
		android:fadingEdge="none"
		android:cacheColorHint="#0000"
		android:divider="#0000"/>

	<TextView android:id="@android:id/empty"
		android:layout_width="fill_parent" 
		android:layout_height="fill_parent"
		android:gravity="center"
		android:textSize="18sp"
		android:text="@string/conn_empty_roster_hints"/>
</LinearLayout>


================================================
FILE: res/layout/mainchat.xml
================================================
<?xml version="1.0" encoding="utf-8"?>

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:orientation="vertical">

        <ListView
            android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="200sp"
            android:layout_weight="1"
            android:fastScrollEnabled="true"
            android:stackFromBottom="true"
            android:transcriptMode="normal"
            android:divider="#0000"/>

        <LinearLayout
            android:id="@+id/details"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:baselineAligned="false"
            android:gravity="bottom"
            >

            <EditText
                android:id="@+id/Chat_UserInput"
                android:layout_width="200sp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:hint="@string/chat_enterMsgHint"
                android:inputType="textShortMessage|textAutoCorrect|textCapSentences|textMultiLine"
                >
            </EditText>

            <Button
                android:id="@+id/Chat_SendButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:minWidth="60sp"
                android:text="@android:string/ok"
                />

        </LinearLayout>

    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ProgressBar
            android:id="@+id/loading_progress"
            style="@android:style/Widget.ProgressBar.Large"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:visibility="gone"/>
    </RelativeLayout>
</FrameLayout>


================================================
FILE: res/layout/mainchild_row.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal" android:layout_width="fill_parent"
	android:layout_height="wrap_content" android:gravity="center_vertical">

	<RelativeLayout android:layout_width="52sp" android:layout_height="wrap_content">
		<TextView android:id="@+id/roster_unreadmsg_cnt"
			style="@style/RosterMessageCounter" />
		<ImageView android:id="@+id/roster_icon"
			android:layout_width="wrap_content" android:layout_height="wrap_content"
			android:layout_marginEnd="4sp"
			android:layout_marginRight="4sp"
			android:longClickable="false"
			android:paddingStart="12sp"
			android:paddingLeft="12sp"
			/>
	</RelativeLayout>

	<LinearLayout android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:orientation="vertical"
		android:minHeight="52sp" android:layout_gravity="center_vertical"
		android:gravity="center_vertical">

		<LinearLayout android:layout_width="fill_parent"
			android:layout_height="wrap_content" android:orientation="horizontal"
			android:layout_gravity="center_vertical"
			android:gravity="center_vertical">

			<TextView android:id="@+id/roster_screenname"
				style="?attr/MainChild"
				android:paddingStart="10sp"
				android:paddingLeft="10sp" android:longClickable="false"
				android:layout_weight="1"
				android:layout_width="fill_parent"
				android:layout_height="wrap_content" android:singleLine="true" />

			<TextView android:id="@+id/roster_nusers"
				style="?attr/MainChild"
				android:visibility="gone"
				android:layout_width="wrap_content"
				android:layout_height="wrap_content" android:singleLine="true" />
		</LinearLayout>

		<TextView android:id="@+id/roster_statusmsg"
			android:paddingStart="10sp"
			android:paddingLeft="10sp"
			android:textSize="13sp" android:layout_width="fill_parent"
			android:layout_height="wrap_content" android:singleLine="true"
			android:ellipsize="end" android:visibility="gone" 
			/>

	</LinearLayout>
</LinearLayout>


================================================
FILE: res/layout/maingroup_row.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:gravity="center_vertical"
	style="?attr/MainGroup"
	>

	<TextView android:id="@+id/groupname"
		style="@style/RosterGroupName"
		android:paddingLeft="40sp"
		android:paddingStart="40sp"
		android:paddingRight="4sp"
		android:paddingEnd="4sp"
		android:layout_weight="1"
		android:layout_width="100sp"
		android:layout_height="wrap_content"
		android:singleLine="true"
		android:ellipsize="end"
		/>

	<ProgressBar
		android:id="@+id/loading_progress"
		style="@android:style/Widget.ProgressBar.Small"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:layout_centerInParent="true"
		android:visibility="gone"
		/>

	<TextView android:id="@+id/members"
		style="@style/RosterGroupName"
		android:paddingRight="6sp"
		android:paddingEnd="6sp"
		android:paddingLeft="4sp"
		android:paddingStart="4sp"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		/>

</LinearLayout>


================================================
FILE: res/layout/moverosterentrytogroupview.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
		android:id="@+id/moverosterentrytogroupview" 
		android:orientation="vertical"
		android:paddingTop="10sp"
		android:paddingLeft="10sp"
		android:paddingRight="10sp"
		android:paddingBottom="10sp"
		android:layout_width="fill_parent" 
		android:layout_height="fill_parent">

		<TextView
			android:id="@+id/moverosterentrytogroupview_summary"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:text="@string/MoveRosterEntryToGroupDialog_summ"
			android:layout_marginBottom="10sp"
			android:focusable="true"
			style="?attr/dialogTextColor"
			/>
		<org.yaxim.androidclient.dialogs.GroupNameView
			android:id="@+id/moverosterentrytogroupview_gv"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:orientation="vertical"
			/>
	</LinearLayout>


================================================
FILE: res/layout/muc_new_dialog.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="10sp"
    android:paddingRight="10sp"
    android:paddingBottom="15sp"
    android:paddingTop="10sp"
    >

    <TextView
	android:id="@+id/muc_invitation"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:layout_marginBottom="15sp"
	android:visibility="gone"
	/>
    <org.yaxim.androidclient.widget.AutoCompleteJidEdit
	android:id="@+id/muc_new_jid"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:layout_marginBottom="15sp"
	android:singleLine="true"
	android:hint="@string/muc_jid_hint"
	android:contentDescription="@string/muc_jid_hint"
	android:inputType="textEmailAddress"
	/>

    <TextView
	android:id="@+id/muc_status"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:layout_marginBottom="15sp"
	android:visibility="gone"
	/>
    <EditText
	android:id="@+id/muc_new_nick"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:layout_marginBottom="15sp"
	android:singleLine="true"
	android:contentDescription="@string/muc_nickname_hint"
	android:hint="@string/muc_nickname_hint" />

    <EditText
	android:id="@+id/muc_new_pw"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:singleLine="true"
	android:contentDescription="@string/muc_password_hint"
	android:hint="@string/muc_password_hint"
	android:inputType="textPassword" />

	<CheckBox
		android:id="@+id/password_show"
		style="?attr/dialogTextColor"
		android:layout_width="match_parent"
		android:layout_height="wrap_content"
		android:text="@string/StartupDialog_pwshowHint"
		/>

</LinearLayout>


================================================
FILE: res/layout/password_view.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/StartupDialog_ScrollView" 
	android:layout_height="wrap_content" 
	android:layout_width="fill_parent" >
	<LinearLayout 
		android:orientation="vertical"
		android:layout_width="fill_parent" 
		android:layout_height="wrap_content"
		android:paddingLeft="10sp"
		android:paddingStart="10sp"
		android:paddingRight="10sp"
		android:paddingEnd="10sp"
		android:paddingBottom="15sp"
		android:paddingTop="10sp" >

		<CheckBox
			android:id="@+id/password_change_on_server"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:text="@string/account_jabberPW_change_on_server"
			style="?attr/dialogTextColor"
			/>

		<TextView
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:visibility="gone"
			android:text="@string/account_jabberPW_password_old"
			android:padding="2sp"
			style="?attr/dialogTextColor"
			/>
		<EditText
			android:id="@+id/password_old"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:visibility="gone"
			android:inputType="textPassword"
			android:padding="10sp"
			android:singleLine="true"
			/>

		<TextView
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:text="@string/account_jabberPW_password_new"
			android:padding="2sp"
			style="?attr/dialogTextColor"
			/>
		<EditText
			android:id="@+id/password_new"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:padding="10sp"
			android:inputType="textPassword"
			android:singleLine="true"
			android:hint="@string/StartupDialog_pwHint"
			/>
		<CheckBox
			android:id="@+id/password_show"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:text="@string/StartupDialog_pwshowHint"
			style="?attr/dialogTextColor"
			/>

		<TextView
		    android:id="@+id/password_warning"
		    style="?attr/dialogTextColor"
		    android:layout_width="fill_parent"
		    android:layout_height="wrap_content"
		    android:padding="2sp"
		    android:text="@string/account_jabberPW_warning"
		    android:textColor="#b00"
		    android:textStyle="bold" />

	</LinearLayout>
</ScrollView>


================================================
FILE: res/layout/qrcode_dialog.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/layout_root" android:orientation="vertical"
	android:layout_width="fill_parent" android:layout_height="fill_parent"
	android:paddingLeft="15sp"
	android:paddingStart="15sp"
	android:paddingRight="15sp"
	android:paddingEnd="15sp"
	android:paddingBottom="15sp"
	android:paddingTop="10sp"
	android:layout_gravity="top">

	<ImageView
		android:id="@+id/qr_code"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:adjustViewBounds="true"
		android:gravity="center_vertical"
		android:scaleType="centerInside"/>

	<TextView android:id="@+id/text"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		style="?attr/dialogTextColor"
		android:gravity="center"
		android:textSize="20sp"
		android:paddingTop="20sp"
		android:paddingBottom="20sp"/>
</LinearLayout>


================================================
FILE: res/layout/status_action_provider.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageButton
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_status_offline"
        android:background="@android:color/transparent" />

</RelativeLayout>

================================================
FILE: res/layout/status_spinner_item.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="6dip">
  <ImageView
      android:id="@+id/status_icon"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content" />
  <TextView
      android:id="@+id/status_text"
      style="?android:attr/spinnerItemStyle"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:gravity="center_vertical"
      android:layout_marginLeft="10dip" />
</LinearLayout>


================================================
FILE: res/layout/statusview.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
		android:layout_width="fill_parent" 
		android:layout_height="fill_parent"
		>
<LinearLayout
		android:id="@+id/statusLayout" 
		android:orientation="vertical"
		android:layout_width="fill_parent" 
		android:minWidth="240sp" 
		android:layout_height="fill_parent"
		android:paddingLeft="10sp"
		android:paddingRight="10sp"
		android:paddingBottom="15sp"
		android:paddingTop="10sp"
		>

	<CheckBox
		android:id="@+id/statusview_dnd_when_silent"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:text="@string/pref_dnd_when_silent"
		android:visibility="gone"
		style="?attr/dialogTextColor"
		/>
	<Spinner android:id="@+id/statusview_spinner"
		android:layout_height="wrap_content"
		android:layout_width="fill_parent"
		android:prompt="@string/setStatusTitle"
		android:layout_marginBottom="15sp"
	/>

	<RelativeLayout
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:layout_marginBottom="15sp"
	    >
	  <AutoCompleteTextView android:id="@+id/statusview_message"
		android:layout_height="wrap_content"
		android:layout_width="fill_parent"
		android:hint="@string/setStatusmsgHint"
		android:inputType="textCapSentences"
		android:singleLine="true"
		android:imeOptions="actionDone"
	  />
	  <Button
	      android:id="@+id/statusview_message_
Download .txt
gitextract_2gxd348s/

├── .fbprefs
├── .gitignore
├── .gitmodules
├── AndroidManifest.xml
├── ChangeLog
├── LICENSE.txt
├── README.md
├── base.rdf.xml
├── bruno/
│   ├── res/
│   │   ├── drawable/
│   │   │   ├── ic_action_contacts_all.xml
│   │   │   ├── ic_action_contacts_online.xml
│   │   │   └── ic_action_person_add.xml
│   │   └── values/
│   │       ├── colors.xml
│   │       ├── prefArrays.xml
│   │       ├── strings.xml
│   │       ├── styles.xml
│   │       └── themes.xml
│   └── src/
│       └── org/
│           └── yaxim/
│               └── androidclient/
│                   └── FlavorConfig.java
├── bruno.rdf.sh
├── build.gradle
├── build.xml
├── export-icons.sh
├── free/
│   └── src/
│       └── org/
│           └── yaxim/
│               └── androidclient/
│                   └── service/
│                       ├── InstallReferrerReceiver.java
│                       └── PushManager.java
├── libs/
│   ├── android-remote-stacktrace-logger.aar
│   ├── jzlib.jar
│   └── libidn-1.26.jar
├── play/
│   ├── AndroidManifest.xml
│   ├── res/
│   │   └── values/
│   │       └── push.xml
│   └── src/
│       └── org/
│           └── yaxim/
│               └── androidclient/
│                   └── service/
│                       ├── InstallReferrerReceiver.java
│                       ├── PushManager.java
│                       └── PushMessageReceiver.java
├── proguard.cfg
├── project.properties
├── rdf.sh
├── res/
│   ├── drawable/
│   │   ├── count_bcg.xml
│   │   ├── group_indicator.xml
│   │   ├── ic_action_attach.xml
│   │   ├── ic_action_camera.xml
│   │   ├── ic_action_contacts_all.xml
│   │   ├── ic_action_contacts_online.xml
│   │   ├── ic_action_file.xml
│   │   ├── ic_action_person_add.xml
│   │   ├── ic_action_photo.xml
│   │   ├── ic_action_search.xml
│   │   ├── ic_status_available.xml
│   │   ├── ic_status_away.xml
│   │   ├── ic_status_chat.xml
│   │   ├── ic_status_dnd.xml
│   │   ├── ic_status_offline.xml
│   │   ├── ic_status_subscribe.xml
│   │   ├── ic_status_unknown.xml
│   │   └── ic_status_xa.xml
│   ├── layout/
│   │   ├── aboutview.xml
│   │   ├── activity_entitylist.xml
│   │   ├── addrosteritemdialog.xml
│   │   ├── chat_action_title.xml
│   │   ├── chatrow.xml
│   │   ├── edittext_dialog.xml
│   │   ├── firststartdialog.xml
│   │   ├── groupnameview.xml
│   │   ├── main.xml
│   │   ├── mainchat.xml
│   │   ├── mainchild_row.xml
│   │   ├── maingroup_row.xml
│   │   ├── moverosterentrytogroupview.xml
│   │   ├── muc_new_dialog.xml
│   │   ├── password_view.xml
│   │   ├── qrcode_dialog.xml
│   │   ├── status_action_provider.xml
│   │   ├── status_spinner_item.xml
│   │   └── statusview.xml
│   ├── menu/
│   │   ├── chat_contextmenu.xml
│   │   ├── contact_options.xml
│   │   ├── muc_options.xml
│   │   ├── noncontact_options.xml
│   │   ├── roster_group_contextmenu.xml
│   │   ├── roster_item_contextmenu.xml
│   │   └── roster_options.xml
│   ├── values/
│   │   ├── array.xml
│   │   ├── attrs.xml
│   │   ├── developers.xml
│   │   ├── prefArrays.xml
│   │   ├── servers.xml
│   │   ├── strings.xml
│   │   ├── styles.xml
│   │   └── themes.xml
│   ├── values-cs/
│   │   └── strings.xml
│   ├── values-de/
│   │   └── strings.xml
│   ├── values-el/
│   │   └── strings.xml
│   ├── values-en-rGB/
│   │   └── strings.xml
│   ├── values-es/
│   │   └── strings.xml
│   ├── values-eu/
│   │   └── strings.xml
│   ├── values-fi/
│   │   └── strings.xml
│   ├── values-fr/
│   │   └── strings.xml
│   ├── values-he/
│   │   └── strings.xml
│   ├── values-hi/
│   │   └── strings.xml
│   ├── values-hr/
│   │   └── strings.xml
│   ├── values-id/
│   │   └── strings.xml
│   ├── values-it/
│   │   └── strings.xml
│   ├── values-ja/
│   │   └── strings.xml
│   ├── values-kn/
│   │   └── strings.xml
│   ├── values-lt/
│   │   └── strings.xml
│   ├── values-nb/
│   │   └── strings.xml
│   ├── values-nl/
│   │   └── strings.xml
│   ├── values-pl/
│   │   └── strings.xml
│   ├── values-pt/
│   │   └── strings.xml
│   ├── values-pt-rBR/
│   │   └── strings.xml
│   ├── values-ro/
│   │   └── strings.xml
│   ├── values-ru/
│   │   └── strings.xml
│   ├── values-sk/
│   │   └── strings.xml
│   ├── values-sr/
│   │   └── strings.xml
│   ├── values-sv/
│   │   └── strings.xml
│   ├── values-tr/
│   │   └── strings.xml
│   ├── values-uk/
│   │   └── strings.xml
│   ├── values-uz/
│   │   └── strings.xml
│   ├── values-zh-rCN/
│   │   └── strings.xml
│   └── xml/
│       ├── accountprefs.xml
│       ├── automotive_app_desc.xml
│       ├── mainprefs.xml
│       ├── notificationprefs.xml
│       └── provider_paths.xml
├── settings.gradle
├── src/
│   ├── eu/
│   │   └── siacs/
│   │       └── conversations/
│   │           ├── ui/
│   │           │   └── text/
│   │           │       ├── DividerSpan.java
│   │           │       └── QuoteSpan.java
│   │           └── utils/
│   │               ├── ImStyleParser.java
│   │               └── StylingHelper.java
│   └── org/
│       └── yaxim/
│           └── androidclient/
│               ├── FileHttpUploadTask.java
│               ├── IXMPPRosterCallback.aidl
│               ├── MainWindow.java
│               ├── ThemedActivity.java
│               ├── XMPPRosterServiceAdapter.java
│               ├── YaximApplication.java
│               ├── chat/
│               │   ├── ChatWindow.java
│               │   ├── MUCChatWindow.java
│               │   ├── XMPPChatServiceAdapter.java
│               │   └── XMPPMucServiceAdapter.java
│               ├── data/
│               │   ├── ChatHelper.java
│               │   ├── ChatProvider.java
│               │   ├── ChatRoomHelper.java
│               │   ├── EntityInfo.java
│               │   ├── EntityList.java
│               │   ├── RosterProvider.java
│               │   └── YaximConfiguration.java
│               ├── dialogs/
│               │   ├── AddRosterItemDialog.java
│               │   ├── ChangePasswordDialog.java
│               │   ├── ChangeStatusDialog.java
│               │   ├── ConfirmDialog.java
│               │   ├── EditMUCDialog.java
│               │   ├── FirstStartDialog.java
│               │   └── GroupNameView.java
│               ├── exceptions/
│               │   ├── YaximXMPPAdressMalformedException.java
│               │   └── YaximXMPPException.java
│               ├── list/
│               │   ├── EntityListActivity.java
│               │   ├── EntityListAdapter.java
│               │   ├── EntityListLoader.java
│               │   ├── EntityViewLoader.java
│               │   ├── SearchActivity.java
│               │   └── ServiceDiscoveryActivity.java
│               ├── packet/
│               │   ├── InviteRegister.java
│               │   ├── MuclumbusIQ.java
│               │   ├── MuclumbusResult.java
│               │   ├── Oob.java
│               │   └── PreAuth.java
│               ├── preferences/
│               │   ├── AccountPrefs.java
│               │   ├── AppCompatPreferenceActivity.java
│               │   ├── EditTextPreferenceWithValue.java
│               │   ├── MainPrefs.java
│               │   └── NotificationPrefs.java
│               ├── service/
│               │   ├── GenericService.java
│               │   ├── IXMPPChatService.aidl
│               │   ├── IXMPPMucService.aidl
│               │   ├── IXMPPRosterService.aidl
│               │   ├── InvitationTask.java
│               │   ├── MUCController.java
│               │   ├── Smackable.java
│               │   ├── SmackableImp.java
│               │   ├── XMPPService.java
│               │   ├── XMPPServiceCallback.java
│               │   └── YaximBroadcastReceiver.java
│               ├── util/
│               │   ├── AdapterConstants.java
│               │   ├── ConnectionState.java
│               │   ├── ErrorReportManager.java
│               │   ├── FileHelper.java
│               │   ├── JULHandler.java
│               │   ├── LogConstants.java
│               │   ├── MessageStylingHelper.java
│               │   ├── PreferenceConstants.java
│               │   ├── SimpleCursorTreeAdapter.java
│               │   ├── StatusMode.java
│               │   ├── XEP0392Helper.java
│               │   └── XMPPHelper.java
│               └── widget/
│                   └── AutoCompleteJidEdit.java
├── template/
│   └── version.xml
├── yaxim/
│   └── src/
│       └── org/
│           └── yaxim/
│               └── androidclient/
│                   └── FlavorConfig.java
└── yaxim.rdf.sh
Download .txt
SYMBOL INDEX (951 symbols across 73 files)

FILE: bruno/src/org/yaxim/androidclient/FlavorConfig.java
  class FlavorConfig (line 3) | public class FlavorConfig {
    method getTheme (line 4) | public static int getTheme(String theme) {

FILE: free/src/org/yaxim/androidclient/service/InstallReferrerReceiver.java
  class InstallReferrerReceiver (line 6) | public class InstallReferrerReceiver {
    method queryInstallReferrerLibrary (line 9) | public static void queryInstallReferrerLibrary(final Context context) {

FILE: free/src/org/yaxim/androidclient/service/PushManager.java
  class PushManager (line 8) | public class PushManager {
    method PushManager (line 11) | public PushManager(Service service, XMPPConnection connection) {
    method enableAccountPush (line 15) | public boolean enableAccountPush() {
    method disableAccountPush (line 19) | public boolean disableAccountPush() {

FILE: play/src/org/yaxim/androidclient/service/InstallReferrerReceiver.java
  class InstallReferrerReceiver (line 21) | public class InstallReferrerReceiver extends BroadcastReceiver {
    method startActivity (line 25) | static synchronized void startActivity(Context context, Uri reference) {
    method onReceive (line 37) | @Override
    method queryInstallReferrerLibrary (line 52) | public static void queryInstallReferrerLibrary(final Context context) {

FILE: play/src/org/yaxim/androidclient/service/PushManager.java
  class PushManager (line 31) | public class PushManager {
    method PushManager (line 40) | public PushManager(Service service, XMPPConnection connection) {
    method enableAccountPush (line 46) | public boolean enableAccountPush() {
    method disableAccountPush (line 63) | public boolean disableAccountPush() {
    method getFcmPushToken (line 78) | private void getFcmPushToken() {

FILE: play/src/org/yaxim/androidclient/service/PushMessageReceiver.java
  class PushMessageReceiver (line 13) | public class PushMessageReceiver extends FirebaseMessagingService {
    method startServiceIfNeeded (line 16) | private void startServiceIfNeeded(String action) {
    method onMessageReceived (line 30) | @Override
    method onNewToken (line 36) | @Override

FILE: src/eu/siacs/conversations/ui/text/DividerSpan.java
  class DividerSpan (line 6) | public class DividerSpan extends MetricAffectingSpan {
    method DividerSpan (line 12) | public DividerSpan(boolean large) {
    method isLarge (line 16) | public boolean isLarge() {
    method updateDrawState (line 20) | @Override
    method updateMeasureState (line 25) | @Override

FILE: src/eu/siacs/conversations/ui/text/QuoteSpan.java
  class QuoteSpan (line 13) | public class QuoteSpan extends CharacterStyle implements LeadingMarginSp...
    method QuoteSpan (line 25) | public QuoteSpan(int color, DisplayMetrics metrics) {
    method updateDrawState (line 32) | @Override
    method getLeadingMargin (line 37) | @Override
    method drawLeadingMargin (line 42) | @Override
    method getColor (line 54) | @ColorInt

FILE: src/eu/siacs/conversations/utils/ImStyleParser.java
  class ImStyleParser (line 36) | public class ImStyleParser {
    method parse (line 43) | public static List<Style> parse(CharSequence text) {
    method parse (line 47) | public static List<Style> parse(CharSequence text, int start, int end) {
    method isCharRepeatedTwoTimes (line 74) | private static boolean isCharRepeatedTwoTimes(CharSequence text, char ...
    method precededByWhiteSpace (line 78) | private static boolean precededByWhiteSpace(CharSequence text, int ind...
    method followedByWhitespace (line 82) | private static boolean followedByWhitespace(CharSequence text, int ind...
    method seekEnd (line 86) | private static int seekEnd(CharSequence text, char needle, int start, ...
    method seekEndBlock (line 98) | private static int seekEndBlock(CharSequence text, char needle, int st...
    class Style (line 108) | public static class Style {
      method Style (line 114) | public Style(char character, int start, int end) {
      method Style (line 118) | public Style(String keyword, int start, int end) {
      method getKeyword (line 124) | public String getKeyword() {
      method getStart (line 128) | public int getStart() {
      method getEnd (line 132) | public int getEnd() {

FILE: src/eu/siacs/conversations/utils/StylingHelper.java
  class StylingHelper (line 57) | public class StylingHelper {
    method clear (line 67) | public static void clear(final Editable editable) {
    method format (line 76) | public static void format(final Editable editable, int start, int end,...
    class MergeSeparator (line 85) | public static class MergeSeparator {}
    method format (line 87) | public static void format(final Editable editable, @ColorInt int textC...
    method createSpanForStyle (line 97) | private static ParcelableSpan createSpanForStyle(ImStyleParser.Style s...
    method makeKeywordOpaque (line 113) | private static void makeKeywordOpaque(final Editable editable, int sta...
    method transformColor (line 120) | private static
    class MessageEditorStyler (line 126) | public static class MessageEditorStyler implements TextWatcher {
      method MessageEditorStyler (line 130) | public MessageEditorStyler(EditText editText) {
      method beforeTextChanged (line 134) | @Override
      method onTextChanged (line 139) | @Override
      method afterTextChanged (line 144) | @Override
    method handleTextQuotes (line 153) | public static boolean handleTextQuotes(Editable body, int color, Displ...
    method applyQuoteSpan (line 201) | private static int applyQuoteSpan(Editable body, int start, int end, i...

FILE: src/org/yaxim/androidclient/FileHttpUploadTask.java
  class FileHttpUploadTask (line 27) | public class FileHttpUploadTask extends AsyncTask<Void, String, FileHttp...
    method FileHttpUploadTask (line 40) | public FileHttpUploadTask(Context ctx, YaximConfiguration config, Smac...
    method publishProgress (line 49) | private void publishProgress(int res_id) {
    method doInBackground (line 52) | @Override
    method onProgressUpdate (line 128) | @Override
    method onPreExecute (line 136) | @Override
    method onPostExecute (line 139) | @Override
    method readFile (line 151) | private byte[] readFile(Uri path, long size) throws IOException {
    method log (line 168) | private void log(String message) {
    method failResponse (line 172) | private UploadResponse failResponse(String reason) {
    method failResponse (line 175) | private UploadResponse failResponse(Throwable exception) {
    class UploadResponse (line 181) | public class UploadResponse {
      method UploadResponse (line 185) | public UploadResponse(boolean success, String response) {
      method toString (line 192) | public String toString() {

FILE: src/org/yaxim/androidclient/MainWindow.java
  class MainWindow (line 77) | public class MainWindow extends ThemedActivity implements ExpandableList...
    method onCreate (line 102) | @Override
    method onDestroy (line 119) | @Override
    method onClickClipboard (line 126) | public void onClickClipboard(View v) {
    method getStatusActionIcon (line 135) | public int getStatusActionIcon() {
    method handleGroupChange (line 148) | void handleGroupChange(int groupPosition, boolean isExpanded) {
    method setupContentView (line 162) | void setupContentView() {
    method onTitleClicked (line 192) | @Override
    method onNewIntent (line 197) | @Override
    method clearIntent (line 203) | protected void clearIntent() {
    method onPause (line 208) | @Override
    method onResume (line 219) | @Override
    method handleSendIntent (line 241) | public void handleSendIntent() {
    method openChatWithJid (line 254) | public boolean openChatWithJid(String jid, String text) {
    method isJabberIntentAction (line 274) | public boolean isJabberIntentAction(String action) {
    method handleJabberIntent (line 279) | public synchronized void handleJabberIntent() {
    method handleXmppUri (line 300) | public boolean handleXmppUri(Uri data) {
    method xmppUriFromClipboard (line 333) | @SuppressWarnings("deprecation") /* recent ClipboardManager only avail...
    method onConfigurationChanged (line 348) | @Override
    method isConnected (line 355) | private boolean isConnected() {
    method isConnecting (line 358) | private boolean isConnecting() {
    method updateRoster (line 364) | public void updateRoster() {
    method getContactStatusMode (line 370) | private StatusMode getContactStatusMode(Cursor c) {
    method getItemStatusMode (line 379) | private StatusMode getItemStatusMode(long packedPosition) {
    method getPackedItemRow (line 385) | private String getPackedItemRow(long packedPosition, String rowName) {
    method onCreateContextMenu (line 391) | @Override
    method addToRosterDialog (line 432) | boolean addToRosterDialog(String jid, String alias, String token) {
    method addToRosterDialog (line 444) | boolean addToRosterDialog(String jid) {
    method rosterAddRequestedDialog (line 448) | void rosterAddRequestedDialog(final String jid, final String alias, St...
    method renameRosterGroupDialog (line 477) | void renameRosterGroupDialog(final String groupName) {
    method onContextItemSelected (line 487) | public boolean onContextItemSelected(MenuItem item) {
    method applyMenuContextChoice (line 491) | private boolean applyMenuContextChoice(MenuItem item) {
    method isChild (line 538) | private boolean isChild(long packedPosition) {
    method onCreateOptionsMenu (line 543) | @Override
    method setMenuItem (line 549) | void setMenuItem(Menu menu, int itemId, int iconId, CharSequence title) {
    method setMenuItemFromClipboard (line 556) | void setMenuItemFromClipboard(Menu menu, int itemId) {
    method onPrepareOptionsMenu (line 566) | @Override
    method onOptionsItemSelected (line 577) | @Override
    method getStatusMode (line 583) | public StatusMode getStatusMode() {
    method updateStatus (line 587) | public void updateStatus(StatusMode statusMode) {
    method displayOwnStatus (line 604) | private void displayOwnStatus() {
    method aboutDialog (line 610) | private void aboutDialog() {
    method applyMainMenuChoice (line 660) | private boolean applyMainMenuChoice(MenuItem item) {
    method setOfflinceContactsVisibility (line 724) | private void setOfflinceContactsVisibility(boolean showOffline) {
    method onChildClick (line 730) | @Override
    method updateConnectionState (line 756) | private void updateConnectionState(ConnectionState cs) {
    method startConnection (line 803) | public void startConnection(boolean create_account) {
    method startConnectionWithNotificationPermission (line 808) | public void startConnectionWithNotificationPermission(boolean create_a...
    method requestNotificationPermission (line 811) | public void requestNotificationPermission(final int requestCode) {
    method onNotificationPermissionGrantedOrDenied (line 828) | public void onNotificationPermissionGrantedOrDenied(int requestCode) {
    method onRequestPermissionsResult (line 833) | @Override
    method toggleConnection (line 849) | private void toggleConnection() {
    method getConnectDisconnectText (line 865) | private String getConnectDisconnectText() {
    method registerXMPPService (line 872) | private void registerXMPPService() {
    method unbindXMPPService (line 912) | private void unbindXMPPService() {
    method bindXMPPService (line 920) | private void bindXMPPService() {
    method registerListAdapter (line 924) | private void registerListAdapter() {
    method createUICallback (line 930) | private void createUICallback() {
    method storeExpandedState (line 949) | public void storeExpandedState() {
    method getGroupName (line 959) | public String getGroupName(int groupId) {
    method restoreGroupsExpanded (line 966) | public void restoreGroupsExpanded() {
    method checkIgnoreBatteryOptimization (line 980) | private void checkIgnoreBatteryOptimization() {
    method showFirstStartUpDialog (line 996) | private void showFirstStartUpDialog(Exception error) {
    method showFirstStartUpDialogIfPrefsEmpty (line 1030) | private void showFirstStartUpDialogIfPrefsEmpty() {
    method createIntent (line 1054) | public static Intent createIntent(Context context) {
    method showToastNotification (line 1060) | protected void showToastNotification(int message) {
    class RosterExpListAdapter (line 1112) | public class RosterExpListAdapter extends SimpleCursorTreeAdapter {
      method RosterExpListAdapter (line 1114) | public RosterExpListAdapter(Context context) {
      method requery (line 1130) | public void requery() {
      method getChildrenCursor (line 1149) | @Override
      method bindGroupView (line 1168) | @Override
      method bindChildView (line 1180) | @Override
      method setViewImage (line 1197) | protected void setViewImage(ImageView v, String value) {
      method getIconForPresenceMode (line 1202) | private int getIconForPresenceMode(int presenceMode) {
    class RosterObserver (line 1209) | private class RosterObserver extends ContentObserver {
      method RosterObserver (line 1210) | public RosterObserver() {
      method onChange (line 1213) | public void onChange(boolean selfChange) {
    class LoadUnreadTask (line 1226) | private class LoadUnreadTask extends AsyncTask<Void, Void, HashMap<Str...
      method doInBackground (line 1227) | @Override
      method onPostExecute (line 1245) | @Override
    method run (line 1255) | @Override
    class ChatObserver (line 1262) | private class ChatObserver extends ContentObserver {
      method ChatObserver (line 1263) | public ChatObserver() {
      method onChange (line 1266) | public void onChange(boolean selfChange) {

FILE: src/org/yaxim/androidclient/ThemedActivity.java
  class ThemedActivity (line 22) | public class ThemedActivity extends AppCompatActivity {
    method onCreate (line 30) | @Override
    method setTitle (line 55) | @Override
    method setSubtitle (line 60) | public void setSubtitle(CharSequence subtitle) {
    method setIcon (line 65) | public void setIcon(int drawable) {
    method onTitleClicked (line 68) | protected void onTitleClicked(View view) {

FILE: src/org/yaxim/androidclient/XMPPRosterServiceAdapter.java
  class XMPPRosterServiceAdapter (line 10) | public class XMPPRosterServiceAdapter {
    method XMPPRosterServiceAdapter (line 15) | public XMPPRosterServiceAdapter(IXMPPRosterService xmppServiceStub) {
    method setStatusFromConfig (line 20) | public void setStatusFromConfig() {
    method addRosterItem (line 28) | public void addRosterItem(String user, String alias, String group, Str...
    method renameRosterGroup (line 36) | public void renameRosterGroup(String group, String newGroup){
    method renameRosterItem (line 44) | public void renameRosterItem(String contact, String newItemName){
    method moveRosterItemToGroup (line 53) | public void moveRosterItemToGroup(String user, String group){
    method addRosterGroup (line 61) | public void addRosterGroup(String group){
    method removeRosterItem (line 69) | public void removeRosterItem(String user) {
    method disconnect (line 77) | public void disconnect() {
    method connect (line 85) | public void connect() {
    method registerUICallback (line 93) | public void registerUICallback(IXMPPRosterCallback uiCallback) {
    method unregisterUICallback (line 103) | public void unregisterUICallback(IXMPPRosterCallback uiCallback) {
    method getConnectionState (line 113) | public ConnectionState getConnectionState() {
    method getConnectionStateString (line 122) | public String getConnectionStateString() {
    method isAuthenticated (line 131) | public boolean isAuthenticated() {
    method sendPresenceRequest (line 135) | public void sendPresenceRequest(String user, String type) {
    method changePassword (line 143) | public String changePassword(String newPassword) {

FILE: src/org/yaxim/androidclient/YaximApplication.java
  class YaximApplication (line 28) | public class YaximApplication extends Application {
    method getInstance (line 43) | public static YaximApplication getInstance() {
    method YaximApplication (line 47) | public YaximApplication() {
    method onCreate (line 52) | @Override
    method registerReceiver (line 76) | @Override
    method getApp (line 84) | public static YaximApplication getApp() { return app; }
    method getConfig (line 85) | public static YaximConfiguration getConfig() { return app.mConfig; }
    method getSmackable (line 88) | public SmackableImp getSmackable() {
    method setSmackable (line 91) | public void setSmackable(SmackableImp smackable) {

FILE: src/org/yaxim/androidclient/chat/ChatWindow.java
  class ChatWindow (line 78) | @SuppressWarnings("deprecation") /* recent ClipboardManager only availab...
    method run (line 128) | @Override
    method onCreate (line 143) | @Override
    method onCreateLoader (line 188) | @Override
    method onLoadFinished (line 200) | @Override
    method onLoaderReset (line 221) | @Override
    method increaseLastLog (line 227) | public void increaseLastLog() {
    method onScroll (line 238) | @Override
    method onScrollStateChanged (line 249) | @Override
    method changeBoundness (line 263) | protected void changeBoundness(int direction) {
    method sendFile (line 271) | public void sendFile(Uri path, int flags) {
    method requestStoragePermissionAndRun (line 275) | public void requestStoragePermissionAndRun(int request_id) {
    method requestIdForMenuId (line 297) | public int requestIdForMenuId(int menu_id) {
    method runPermissionAction (line 305) | public void runPermissionAction(int request_id) {
    method onRequestPermissionsResult (line 335) | @Override
    method onActivityResult (line 344) | @Override
    method onResume (line 361) | @Override
    method onPause (line 369) | @Override
    method onWindowFocusChanged (line 381) | @Override
    method onDestroy (line 388) | @Override
    method registerXMPPService (line 397) | protected void registerXMPPService() {
    method unbindXMPPService (line 423) | protected void unbindXMPPService() {
    method bindXMPPService (line 431) | protected void bindXMPPService() {
    method setSendButton (line 435) | private void setSendButton() {
    method setUserInput (line 442) | private void setUserInput() {
    method handleSendIntent (line 456) | private void handleSendIntent() {
    method setContactFromUri (line 465) | private String setContactFromUri() {
    method onCreateContextMenu (line 493) | @Override
    method getQuotedMessageFromContextMenu (line 514) | private String getQuotedMessageFromContextMenu(boolean from_me, Adapte...
    method onContextItemSelected (line 527) | @Override
    method onCreateOptionsMenu (line 563) | public boolean onCreateOptionsMenu(Menu menu) {
    method inflateGenericContactOptions (line 575) | public boolean inflateGenericContactOptions(Menu menu) {
    method onOptionsItemSelected (line 605) | @Override
    method getOnSetListener (line 635) | private View.OnClickListener getOnSetListener() {
    method sendMessageIfNotNull (line 644) | private void sendMessageIfNotNull() {
    method sendMessage (line 650) | private void sendMessage(String message) {
    method markAsReadDelayed (line 658) | private boolean markAsReadDelayed(final long id, final int delay) {
    method markReadMessagesInDb (line 668) | private void markReadMessagesInDb() {
    method jid2nickname (line 691) | public String jid2nickname(String jid, String resource) {
    class ChatWindowAdapter (line 698) | class ChatWindowAdapter extends SimpleCursorAdapter {
      method ChatWindowAdapter (line 701) | ChatWindowAdapter(Cursor cursor, String[] from, int[] to,
      method getView (line 709) | @Override
    method getDateString (line 767) | private String getDateString(long milliSeconds) {
    class ChatItemWrapper (line 773) | public class ChatItemWrapper {
      method ChatItemWrapper (line 783) | ChatItemWrapper(View row, ChatWindow chatWindow) {
      method populateFrom (line 794) | void populateFrom(String date, boolean from_me, String from, String ...
    method onKey (line 912) | @Override
    method afterTextChanged (line 924) | @Override
    method beforeTextChanged (line 929) | @Override
    method onTextChanged (line 934) | @Override
    method showToastNotification (line 938) | private void showToastNotification(int message) {
    method updateContactStatus (line 949) | private void updateContactStatus() {
    method nick2Color (line 980) | public void nick2Color(String nick, TypedValue tv) {
    method isFromMe (line 985) | public boolean isFromMe(boolean from_me, String resource) {
    method getListView (line 989) | public ListView getListView() {
    method showKeyboard (line 993) | private void showKeyboard() {
    class ContactObserver (line 1005) | private class ContactObserver extends ContentObserver {
      method ContactObserver (line 1006) | public ContactObserver() {
      method onChange (line 1010) | public void onChange(boolean selfChange) {

FILE: src/org/yaxim/androidclient/chat/MUCChatWindow.java
  class MUCChatWindow (line 49) | public class MUCChatWindow extends ChatWindow {
    method onCreate (line 57) | @Override
    method registerXMPPService (line 71) | @Override
    method unbindXMPPService (line 97) | @Override
    method bindXMPPService (line 107) | @Override
    method onCreateOptionsMenu (line 114) | @Override
    method onOptionsItemSelected (line 123) | @Override
    method addNicknameToInput (line 156) | private void addNicknameToInput(String nickname) {
    method showUserList (line 164) | private void showUserList() {
    method jid2nickname (line 204) | public String jid2nickname(String jid, String resource) {
    method isFromMe (line 208) | @Override
    method nick2Color (line 213) | @Override
    class PresenceArrayAdapter (line 221) | private class PresenceArrayAdapter extends ArrayAdapter<EntityInfo> {
      method PresenceArrayAdapter (line 224) | public PresenceArrayAdapter(Context context, List<EntityInfo> ei) {
      method getView (line 228) | @Override

FILE: src/org/yaxim/androidclient/chat/XMPPChatServiceAdapter.java
  class XMPPChatServiceAdapter (line 8) | public class XMPPChatServiceAdapter {
    method XMPPChatServiceAdapter (line 14) | public XMPPChatServiceAdapter(IXMPPChatService xmppServiceStub,
    method sendMessage (line 21) | public void sendMessage(String user, String message, String lmc, long ...
    method isServiceAuthenticated (line 30) | public boolean isServiceAuthenticated() {
    method clearNotifications (line 39) | public void clearNotifications(String Jid) {
    method hasFileUpload (line 47) | public boolean hasFileUpload() {
    method sendFile (line 55) | public void sendFile(Uri path, String user, int flags) {

FILE: src/org/yaxim/androidclient/chat/XMPPMucServiceAdapter.java
  class XMPPMucServiceAdapter (line 10) | public class XMPPMucServiceAdapter {
    method XMPPMucServiceAdapter (line 16) | public XMPPMucServiceAdapter(final IXMPPMucService xmppServiceStub,
    method getMyMucNick (line 33) | public String getMyMucNick() {

FILE: src/org/yaxim/androidclient/data/ChatHelper.java
  class ChatHelper (line 58) | public class ChatHelper {
    method markAllAsRead (line 60) | public static void markAllAsRead(Context ctx) {
    method getChatHistoryStartId (line 68) | public static long getChatHistoryStartId(Context ctx, String jid, long...
    method markAsRead (line 80) | public static void markAsRead(Context ctx, String jid) {
    method clearAndRespond (line 90) | public static void clearAndRespond(Context ctx, BroadcastReceiver br, ...
    method sendMessage (line 111) | public static void sendMessage(final Context ctx, final String jid, fi...
    method removeChatHistory (line 130) | public static void removeChatHistory(Context ctx, String jid) {
    method startChatActivity (line 136) | public static void startChatActivity(Context ctx, String user, String ...
    method startChatActivity (line 152) | public static void startChatActivity(Context ctx, String user, String ...
    method generateQr (line 156) | public static Bitmap generateQr(String value, int size) {
    method showQrDialog (line 176) | public static void showQrDialog(final Activity act, final String jid, ...
    method removeChatHistoryDialog (line 214) | public static void removeChatHistoryDialog(final Context ctx, final St...
    type EditOk (line 228) | public interface EditOk {
      method ok (line 229) | abstract public void ok(String result);
    method editTextDialog (line 232) | public static void editTextDialog(Activity act, int titleId, CharSeque...
    method removeRosterItemDialog (line 260) | public static void removeRosterItemDialog(final Activity act, final St...
    method renameRosterItemDialog (line 279) | public static void renameRosterItemDialog(final Activity act, final St...
    method moveRosterItemToGroupDialog (line 295) | public static void moveRosterItemToGroupDialog(final Activity act, fin...
    method handleJidOptions (line 321) | public static boolean handleJidOptions(Activity act, int menu_id, Stri...
    method shortToastNotify (line 380) | public static void shortToastNotify(Context ctx, String msg) {
    method shortToastNotify (line 384) | public static void shortToastNotify(Context ctx, Throwable e) {
    method getRosterContacts (line 399) | public static List<String[]> getRosterContacts(Context ctx, int filter) {
    method getRosterGroups (line 429) | public static List<String> getRosterGroups(Context ctx) {
    method getXMPPDomains (line 446) | public static Collection<String> getXMPPDomains(Context ctx, int filte...

FILE: src/org/yaxim/androidclient/data/ChatProvider.java
  class ChatProvider (line 23) | public class ChatProvider extends ContentProvider {
    method ChatProvider (line 50) | public ChatProvider() {
    method delete (line 53) | @Override
    method getType (line 81) | @Override
    method insert (line 94) | @Override
    method onCreate (line 129) | @Override
    method appendWhereJidCount (line 135) | private void appendWhereJidCount(SQLiteQueryBuilder qBuilder, String j...
    method query (line 156) | @Override
    method update (line 201) | @Override
    method infoLog (line 229) | private static void infoLog(String data) {
    class ChatDatabaseHelper (line 235) | private static class ChatDatabaseHelper extends SQLiteOpenHelper {
      method ChatDatabaseHelper (line 240) | public ChatDatabaseHelper(Context context) {
      method onCreate (line 244) | @Override
      method onUpgrade (line 275) | @Override
    class ChatConstants (line 312) | public static final class ChatConstants implements BaseColumns {
      method ChatConstants (line 314) | private ChatConstants() {
      method getRequiredColumns (line 350) | public static ArrayList<String> getRequiredColumns() {

FILE: src/org/yaxim/androidclient/data/ChatRoomHelper.java
  class ChatRoomHelper (line 21) | public class ChatRoomHelper {
    method addRoom (line 23) | public static boolean addRoom(Context ctx, String jid, String password...
    method leaveRoom (line 33) | public static boolean leaveRoom(Context ctx, String jid) {
    method cleanupUnimportantRooms (line 41) | public static void cleanupUnimportantRooms(Context ctx, Collection<Str...
    method isRoom (line 50) | public static boolean isRoom(Context ctx, String jid) {
    method syncDbRooms (line 60) | public static void syncDbRooms(final Context ctx) {
    method guessMyNickname (line 79) | public static String guessMyNickname(Context ctx, String fallback) {
    method getRoomName (line 107) | public static String getRoomName(Context ctx, String jid) {
    method getRoomInfo (line 118) | public static RoomInfo getRoomInfo(Context ctx, String jid) {
    class RoomInfo (line 134) | public static class RoomInfo {
      method RoomInfo (line 140) | RoomInfo(Cursor c) {

FILE: src/org/yaxim/androidclient/data/EntityInfo.java
  class EntityInfo (line 18) | public class EntityInfo {
    method EntityInfo (line 32) | public EntityInfo() {
    method EntityInfo (line 35) | public EntityInfo(EnumSet<Type> type, String jid, StatusMode statusMod...
    method EntityInfo (line 46) | public EntityInfo(EnumSet<Type> type, Presence p) {
    method fromJidName (line 53) | public static EntityInfo fromJidName(String jid, String name) {
    method fromJid (line 56) | public static EntityInfo fromJid(String jid) {
    method fromError (line 59) | public static EntityInfo fromError(Throwable ex) {
    method fromDisco (line 72) | public static EntityInfo fromDisco(String jid, DiscoverInfo di) {
    method setPresenceStatus (line 121) | public void setPresenceStatus(Presence p) {
    type Type (line 139) | public enum Type {
      method Type (line 148) | Type(int bits) {
      method getValue (line 151) | public int getValue() {

FILE: src/org/yaxim/androidclient/data/EntityList.java
  class EntityList (line 20) | public class EntityList implements Filterable {
    method EntityList (line 32) | public EntityList(EntityListAdapter adapter, String groupName) {
    method startLoading (line 39) | public void startLoading() {
    method finishLoading (line 44) | public void finishLoading() {
    method isLoading (line 50) | public boolean isLoading() {
    method isError (line 54) | public boolean isError() {
    method add (line 58) | public void add(EntityInfo pp, boolean notify) {
    method clear (line 69) | public void clear() {
    method setError (line 77) | public void setError(Throwable ex) {
    method getFilter (line 85) | @Override
    class EntityInfoFilter (line 90) | class EntityInfoFilter extends Filter {
      method performFiltering (line 91) | @Override
      method publishResults (line 105) | @Override

FILE: src/org/yaxim/androidclient/data/RosterProvider.java
  class RosterProvider (line 24) | public class RosterProvider extends ContentProvider {
    method run (line 58) | public void run() {
    method RosterProvider (line 70) | public RosterProvider() {
    method delete (line 73) | @Override
    method getType (line 109) | @Override
    method insert (line 124) | @Override
    method onCreate (line 169) | @Override
    method query (line 175) | @Override
    method update (line 234) | @Override
    method notifyChange (line 268) | private void notifyChange() {
    method infoLog (line 278) | private static void infoLog(String data) {
    class RosterDatabaseHelper (line 284) | private static class RosterDatabaseHelper extends SQLiteOpenHelper {
      method RosterDatabaseHelper (line 289) | public RosterDatabaseHelper(Context context) {
      method onCreateRoster (line 293) | private void onCreateRoster(SQLiteDatabase db) {
      method onCreate (line 311) | @Override
      method onUpgrade (line 324) | @Override
    class RosterConstants (line 347) | public static final class RosterConstants implements BaseColumns {
      method RosterConstants (line 349) | private RosterConstants() {
      method getRequiredContactColumns (line 369) | public static ArrayList<String> getRequiredContactColumns() {
      method getRequiredMUCColumns (line 379) | public static ArrayList<String> getRequiredMUCColumns() {

FILE: src/org/yaxim/androidclient/data/YaximConfiguration.java
  class YaximConfiguration (line 29) | public class YaximConfiguration implements OnSharedPreferenceChangeListe...
    method YaximConfiguration (line 101) | public YaximConfiguration(Context _ctx) {
    method finalize (line 108) | @Override
    method onSharedPreferenceChanged (line 113) | public void onSharedPreferenceChanged(SharedPreferences prefs, String ...
    method splitAndSetJabberID (line 128) | private void splitAndSetJabberID(String jid) {
    method validatePriority (line 144) | private int validatePriority(int jabPriority) {
    method loadPrefs (line 152) | private void loadPrefs(SharedPreferences prefs) {
    method getJidOverride (line 226) | public boolean getJidOverride(boolean muc, String jid) {
    method getEffectiveNotificationChannelId (line 229) | public String getEffectiveNotificationChannelId(boolean muc, String ji...
    method createNotificationChannelFor (line 234) | public NotificationChannel createNotificationChannelFor(boolean muc, S...
    method getJidPrefs (line 255) | public SharedPreferences getJidPrefs(String jid) {
    method getJidString (line 258) | public String getJidString(boolean muc, String pref, String jid, Strin...
    method getJidBoolean (line 269) | public boolean getJidBoolean(boolean muc, String pref, String jid, boo...
    method needMucNotification (line 281) | public boolean needMucNotification(String jid, String nick, String mes...
    method getTheme (line 288) | public int getTheme() {
    method generateNewResource (line 292) | public synchronized void generateNewResource() {
    method storeScreennameIfChanged (line 295) | public synchronized boolean storeScreennameIfChanged(String name) {
    method storeInstallReferrer (line 305) | public synchronized void storeInstallReferrer(String referrer) {
    method storeInvitationCodes (line 309) | private synchronized void storeInvitationCodes() {
    method redeemInvitationCode (line 332) | public boolean redeemInvitationCode(String code_or_jid) {
    method createInvitationCode (line 341) | public String createInvitationCode(long validity) {
    method createInvitationCode (line 349) | public String createInvitationCode() {
    method whitelistInvitationJID (line 353) | public void whitelistInvitationJID(String jid) {
    method getPresenceMode (line 358) | public StatusMode getPresenceMode() {
    method getPushNodeId (line 365) | public String getPushNodeId() {
    method getServerHost (line 374) | public String getServerHost() {

FILE: src/org/yaxim/androidclient/dialogs/AddRosterItemDialog.java
  class AddRosterItemDialog (line 23) | public class AddRosterItemDialog extends AlertDialog implements
    method AddRosterItemDialog (line 35) | public AddRosterItemDialog(Activity act) {
    method AddRosterItemDialog (line 59) | public AddRosterItemDialog(Activity act, String jid) {
    method onCreate (line 64) | public void onCreate(Bundle icicle) {
    method setAlias (line 75) | public AddRosterItemDialog setAlias(String alias) {
    method setToken (line 80) | public AddRosterItemDialog setToken(String token) {
    method onClick (line 86) | public void onClick(DialogInterface dialog, int which) {
    method afterTextChanged (line 112) | public void afterTextChanged(Editable s) {
    method beforeTextChanged (line 131) | public void beforeTextChanged(CharSequence s, int start, int count,
    method onTextChanged (line 133) | public void onTextChanged(CharSequence s, int start, int before, int c...

FILE: src/org/yaxim/androidclient/dialogs/ChangePasswordDialog.java
  class ChangePasswordDialog (line 35) | public class ChangePasswordDialog extends AlertDialog implements
    method ChangePasswordDialog (line 51) | public ChangePasswordDialog(Context context) {
    method onCreate (line 87) | public void onCreate(Bundle icicle) {
    method dismiss (line 117) | @Override
    method onClick (line 123) | public void onClick(DialogInterface dialog, int which) {
    method updateDialog (line 134) | private void updateDialog() {
    method afterTextChanged (line 153) | public void afterTextChanged(Editable s) {
    method beforeTextChanged (line 157) | public void beforeTextChanged(CharSequence s, int start, int count,
    method onTextChanged (line 159) | public void onTextChanged(CharSequence s, int start, int before, int c...
    method updateLocalPassword (line 161) | private void updateLocalPassword(String password) {
    class PasswordChangeTask (line 168) | private class PasswordChangeTask extends AsyncTask<String, Void, Strin...
      method doInBackground (line 171) | @Override
      method onPostExecute (line 178) | @Override

FILE: src/org/yaxim/androidclient/dialogs/ChangeStatusDialog.java
  class ChangeStatusDialog (line 33) | public class ChangeStatusDialog extends AlertDialog {
    method ChangeStatusDialog (line 45) | public ChangeStatusDialog(final MainWindow context, final YaximConfigu...
    method setSpinnerSelection (line 112) | private void setSpinnerSelection(List<StatusMode> modes, StatusMode st...
    method setAndSaveStatus (line 120) | private void setAndSaveStatus() {
    class OkListener (line 148) | private class OkListener implements OnClickListener {
      method onClick (line 149) | @Override
    class StatusModeAdapter (line 155) | private class StatusModeAdapter extends ArrayAdapter<StatusMode> {
      method StatusModeAdapter (line 157) | public StatusModeAdapter(Context context, int textViewResourceId,
      method getDropDownView (line 163) | @Override
      method getView (line 168) | @Override
      method getCustomView (line 173) | public View getCustomView(int position, View convertView, ViewGroup ...

FILE: src/org/yaxim/androidclient/dialogs/ConfirmDialog.java
  class ConfirmDialog (line 10) | public class ConfirmDialog {
    method show (line 12) | public static void show(Context context, int title_id,
    method showMucLeave (line 27) | public static void showMucLeave(final Context context, final String ji...
    type Ok (line 39) | public interface Ok {
      method ok (line 40) | public void ok(final String jid);

FILE: src/org/yaxim/androidclient/dialogs/EditMUCDialog.java
  class EditMUCDialog (line 26) | public class EditMUCDialog extends AlertDialog implements
    method EditMUCDialog (line 39) | public EditMUCDialog(Activity context) {
    method EditMUCDialog (line 74) | public EditMUCDialog(Activity context, String roomJID) {
    method EditMUCDialog (line 87) | public EditMUCDialog(Activity context, String roomJID, String invitation,
    method withNick (line 104) | public EditMUCDialog withNick(String fallback) {
    method dontOpen (line 110) | public EditMUCDialog dontOpen() {
    method onCreate (line 115) | public void onCreate(Bundle icicle) {
    method addAndOpen (line 125) | public void addAndOpen(String jid, String password, String nickname) {
    method onClick (line 132) | public void onClick(DialogInterface dialog, int which) {
    method afterTextChanged (line 138) | public void afterTextChanged(Editable s) {
    method beforeTextChanged (line 150) | public void beforeTextChanged(CharSequence s, int start, int count,
    method onTextChanged (line 152) | public void onTextChanged(CharSequence s, int start, int before, int c...

FILE: src/org/yaxim/androidclient/dialogs/FirstStartDialog.java
  class FirstStartDialog (line 39) | public class FirstStartDialog extends AlertDialog implements DialogInter...
    method FirstStartDialog (line 50) | public FirstStartDialog(MainWindow mainWindow,
    method onCreate (line 73) | public void onCreate(Bundle savedInstanceState) {
    method setJID (line 100) | public FirstStartDialog setJID(String jid, String preauth) {
    method setPreAuth (line 111) | public FirstStartDialog setPreAuth(String ibr_domain, String preauth) {
    method setError (line 122) | public FirstStartDialog setError(Exception e) {
    method onClick (line 145) | public void onClick(DialogInterface dialog, int which) {
    method verifyAndSavePreferences (line 159) | private void verifyAndSavePreferences() {
    method updateDialog (line 172) | private void updateDialog(boolean show_errors) {
    method onCheckedChanged (line 197) | @Override
    method afterTextChanged (line 210) | public void afterTextChanged(Editable s) {
    method beforeTextChanged (line 214) | public void beforeTextChanged(CharSequence s, int start, int count,
    method onTextChanged (line 218) | public void onTextChanged(CharSequence s, int start, int before, int c...
    method savePreferences (line 221) | private void savePreferences(String jabberID, String password, String ...

FILE: src/org/yaxim/androidclient/dialogs/GroupNameView.java
  class GroupNameView (line 19) | public class GroupNameView extends LinearLayout implements OnItemSelecte...
    method GroupNameView (line 28) | public GroupNameView(Context ctx, AttributeSet attrs) {
    method setGroupList (line 42) | public void setGroupList(List<String> groupList) {
    method getGroupName (line 59) | public String getGroupName() {
    method setInputVisibility (line 71) | void setInputVisibility(boolean vis) {
    method onItemSelected (line 77) | public void onItemSelected(AdapterView<?> view, View arg1, int arg2,
    method onNothingSelected (line 83) | public void onNothingSelected(AdapterView<?> arg0) {

FILE: src/org/yaxim/androidclient/exceptions/YaximXMPPAdressMalformedException.java
  class YaximXMPPAdressMalformedException (line 3) | public class YaximXMPPAdressMalformedException extends Exception {
    method YaximXMPPAdressMalformedException (line 7) | public YaximXMPPAdressMalformedException(Throwable cause) {
    method YaximXMPPAdressMalformedException (line 11) | public YaximXMPPAdressMalformedException(String msg) {

FILE: src/org/yaxim/androidclient/exceptions/YaximXMPPException.java
  class YaximXMPPException (line 3) | public class YaximXMPPException extends Exception {
    method YaximXMPPException (line 7) | public YaximXMPPException(String message) {
    method YaximXMPPException (line 11) | public YaximXMPPException(String message, Throwable cause) {

FILE: src/org/yaxim/androidclient/list/EntityListActivity.java
  class EntityListActivity (line 35) | public class EntityListActivity extends ThemedActivity implements Expand...
    method onCreate (line 41) | @Override
    method onCreateOptionsMenu (line 65) | @Override
    method onEntityClick (line 77) | public boolean onEntityClick(EntityInfo ei) {
    method onChildClick (line 100) | @Override
    method run (line 109) | @Override
    method searchNow (line 115) | public void searchNow(String query) {
    method searchLater (line 119) | public void searchLater(String query) {
    method onQueryTextSubmit (line 124) | @Override
    method onQueryTextChange (line 132) | @Override

FILE: src/org/yaxim/androidclient/list/EntityListAdapter.java
  class EntityListAdapter (line 25) | public class EntityListAdapter extends BaseExpandableListAdapter impleme...
    method EntityListAdapter (line 31) | public EntityListAdapter(Activity act) {
    method add (line 36) | public void add(EntityList pg) {
    method getGroupCount (line 41) | @Override
    method getChildrenCount (line 46) | @Override
    method getGroup (line 54) | @Override
    method getChild (line 59) | @Override
    method getGroupId (line 64) | @Override
    method getChildId (line 69) | @Override
    method hasStableIds (line 74) | @Override
    class GroupHolder (line 79) | public static class GroupHolder {
    class EntityHolder (line 85) | public static class EntityHolder {
    method getGroupView (line 94) | @Override
    method getChildView (line 114) | @Override
    method getChildView (line 119) | public static View getChildView(LayoutInflater inflater, EntityInfo ei...
    method isChildSelectable (line 150) | @Override
    method getFilter (line 155) | @Override

FILE: src/org/yaxim/androidclient/list/EntityListLoader.java
  class EntityListLoader (line 41) | class EntityListLoader extends AsyncTask<String, EntityInfo, Throwable> {
    method EntityListLoader (line 49) | public EntityListLoader(int mode, EntityList el) {
    method loadBookmarksOrThrow (line 55) | void loadBookmarksOrThrow(XMPPConnection c) throws Exception {
    method langToDisplay (line 82) | private String langToDisplay(String lang) {
    method loadMyMUCs (line 98) | void loadMyMUCs(XMPPConnection c) throws Exception {
    method loadServerList (line 117) | void loadServerList(XMPPConnection c, String muc_domains[]) throws Exc...
    method loadMUClumbus (line 158) | void loadMUClumbus(XMPPConnection c, String query) throws Exception {
    method doInBackground (line 188) | @Override
    method onProgressUpdate (line 219) | @Override
    method onPostExecute (line 230) | @Override

FILE: src/org/yaxim/androidclient/list/EntityViewLoader.java
  class EntityViewLoader (line 24) | class EntityViewLoader extends AsyncTask<String, EntityInfo, Throwable> {
    method EntityViewLoader (line 29) | public EntityViewLoader(Activity act, View view) {
    method loadJid (line 34) | void loadJid(XMPPConnection c, String jid) throws Exception {
    method doInBackground (line 78) | @Override
    method onProgressUpdate (line 92) | @Override
    method onPostExecute (line 104) | @Override

FILE: src/org/yaxim/androidclient/list/SearchActivity.java
  class SearchActivity (line 23) | public class SearchActivity extends EntityListActivity {
    method onCreate (line 30) | @Override
    method onResume (line 77) | @Override
    method initiateMUCSearch (line 84) | protected void initiateMUCSearch(String query) {
    method searchLater (line 94) | @Override
    method searchNow (line 105) | @Override

FILE: src/org/yaxim/androidclient/list/ServiceDiscoveryActivity.java
  class ServiceDiscoveryActivity (line 12) | public class ServiceDiscoveryActivity extends EntityListActivity {
    method onCreate (line 16) | @Override
    method onResume (line 36) | @Override
    method searchNow (line 41) | @Override

FILE: src/org/yaxim/androidclient/packet/InviteRegister.java
  class InviteRegister (line 8) | public class InviteRegister implements ExtensionElement {
    method getNamespace (line 11) | @Override
    method getElementName (line 16) | @Override
    method toXML (line 21) | @Override
    class StreamFeatureProvider (line 28) | public static class StreamFeatureProvider extends ExtensionElementProv...
      method parse (line 29) | @Override

FILE: src/org/yaxim/androidclient/packet/MuclumbusIQ.java
  class MuclumbusIQ (line 20) | public class MuclumbusIQ extends IQ {
    method MuclumbusIQ (line 30) | public MuclumbusIQ(DataForm searchform) {
    method MuclumbusIQ (line 36) | public MuclumbusIQ() {
    method searchFor (line 50) | public static MuclumbusIQ searchFor(String query) {
    method getSearchForm (line 65) | public DataForm getSearchForm() {
    method getIQChildElementBuilder (line 69) | @Override
    class Provider (line 75) | public static class Provider extends IQProvider<MuclumbusIQ> {
      method parse (line 76) | @Override

FILE: src/org/yaxim/androidclient/packet/MuclumbusResult.java
  class MuclumbusResult (line 41) | public class MuclumbusResult extends SimpleIQ {
    method MuclumbusResult (line 53) | public MuclumbusResult(List<Item> items) {
    method getItems (line 63) | public List<Item> getItems() {
    class Item (line 67) | public static class Item {
    method parseItem (line 80) | protected static Item parseItem(XmlPullParser parser, EntityBareJid ji...
    class Provider (line 114) | public static class Provider extends IQProvider<IQ> {
      method parse (line 115) | @Override

FILE: src/org/yaxim/androidclient/packet/Oob.java
  class Oob (line 17) | public class Oob implements ExtensionElement {
    method Oob (line 23) | public Oob(String url) {
    method Oob (line 27) | public Oob(String url, String desc) {
    method getElementName (line 32) | public String getElementName() {
    method getNamespace (line 36) | public String getNamespace() {
    method getUrl (line 40) | public String getUrl() {
    method setUrl (line 44) | public void setUrl(String url) {
    method getDesc (line 48) | public String getDesc() {
    method setDesc (line 52) | public void setDesc(String desc) {
    method toXML (line 56) | public CharSequence toXML(String enclosingNamespace) {
    class Provider (line 65) | public static class Provider extends ExtensionElementProvider<Oob> {
      method parse (line 66) | public Oob parse(XmlPullParser parser, int initialDepth) throws Exce...

FILE: src/org/yaxim/androidclient/packet/PreAuth.java
  class PreAuth (line 11) | public class PreAuth implements ExtensionElement {
    method PreAuth (line 16) | public PreAuth(String token) {
    method getElementName (line 20) | public String getElementName() {
    method getNamespace (line 24) | public String getNamespace() {
    method getToken (line 28) | public String getToken() {
    method toXML (line 32) | @Override
    class Provider (line 40) | public static class Provider extends ExtensionElementProvider<PreAuth> {
      method parse (line 41) | public PreAuth parse(XmlPullParser parser, int initialDepth) throws ...
    class PreAuthIQ (line 46) | public static class PreAuthIQ extends IQ {
      method PreAuthIQ (line 49) | public PreAuthIQ(String token) {
      method getIQChildElementBuilder (line 55) | @Override

FILE: src/org/yaxim/androidclient/preferences/AccountPrefs.java
  class AccountPrefs (line 25) | public class AccountPrefs extends AppCompatPreferenceActivity {
    method onCreate (line 34) | public void onCreate(Bundle savedInstanceState) {
    method onOptionsItemSelected (line 130) | @Override

FILE: src/org/yaxim/androidclient/preferences/AppCompatPreferenceActivity.java
  class AppCompatPreferenceActivity (line 38) | public abstract class AppCompatPreferenceActivity extends PreferenceActi...
    method onCreate (line 42) | @Override
    method onPostCreate (line 49) | @Override
    method getSupportActionBar (line 55) | public ActionBar getSupportActionBar() {
    method setSupportActionBar (line 59) | public void setSupportActionBar(@Nullable Toolbar toolbar) {
    method getMenuInflater (line 63) | @Override
    method setContentView (line 68) | @Override
    method setContentView (line 73) | @Override
    method setContentView (line 78) | @Override
    method addContentView (line 83) | @Override
    method onPostResume (line 88) | @Override
    method onTitleChanged (line 94) | @Override
    method onConfigurationChanged (line 100) | @Override
    method onStop (line 106) | @Override
    method onDestroy (line 112) | @Override
    method invalidateOptionsMenu (line 118) | public void invalidateOptionsMenu() {
    method getDelegate (line 122) | private AppCompatDelegate getDelegate() {

FILE: src/org/yaxim/androidclient/preferences/EditTextPreferenceWithValue.java
  class EditTextPreferenceWithValue (line 8) | public class EditTextPreferenceWithValue extends EditTextPreference {
    method EditTextPreferenceWithValue (line 11) | public EditTextPreferenceWithValue(Context context, AttributeSet attrs) {
    method EditTextPreferenceWithValue (line 15) | public EditTextPreferenceWithValue(Context context) {
    method setSummaryToText (line 19) | private void setSummaryToText(String text) {
    method onBindView (line 27) | @Override
    method setText (line 33) | @Override

FILE: src/org/yaxim/androidclient/preferences/MainPrefs.java
  class MainPrefs (line 18) | public class MainPrefs extends AppCompatPreferenceActivity implements Sh...
    method onCreate (line 19) | public void onCreate(Bundle savedInstanceState) {
    method onDestroy (line 37) | @Override
    method onSharedPreferenceChanged (line 44) | @Override
    method onOptionsItemSelected (line 50) | @Override

FILE: src/org/yaxim/androidclient/preferences/NotificationPrefs.java
  class NotificationPrefs (line 18) | public class NotificationPrefs extends AppCompatPreferenceActivity imple...
    method onCreate (line 26) | public void onCreate(Bundle savedInstanceState) {
    method onResume (line 63) | @Override
    method onOptionsItemSelected (line 86) | @Override
    method onSharedPreferenceChanged (line 97) | @Override

FILE: src/org/yaxim/androidclient/service/GenericService.java
  class GenericService (line 50) | public abstract class GenericService extends Service {
    class NotificationData (line 63) | static class NotificationData {
      method NotificationData (line 74) | public NotificationData(int id) {
    method onCreate (line 89) | @Override
    method onDestroy (line 101) | @Override
    method onStartCommand (line 107) | @Override
    method setGracePeriod (line 113) | public void setGracePeriod(long when) {
    method addNotificationMGR (line 122) | private void addNotificationMGR() {
    method appendToNotification (line 136) | protected NotificationData appendToNotification(String[] jid, String f...
    method notifyClient (line 182) | protected void notifyClient(String[] jid, String fromDisplayName, Stri...
    method displayNotification (line 218) | protected void displayNotification(String jid, NotificationData nd, bo...
    method setNotification (line 246) | private Notification setNotification(String fromJid, NotificationData nd,
    method displayPendingNonMUCNotifications (line 362) | protected void displayPendingNonMUCNotifications() {
    method shortToastNotify (line 372) | protected void shortToastNotify(String msg) {
    method shortToastNotify (line 376) | protected void shortToastNotify(Throwable e) {
    method updateBadger (line 383) | public void updateBadger() {
    method logError (line 390) | protected void logError(String data) {
    method logInfo (line 396) | protected void logInfo(String data) {
    method clearNotification (line 402) | public void clearNotification(String Jid) {

FILE: src/org/yaxim/androidclient/service/InvitationTask.java
  class InvitationTask (line 22) | public class InvitationTask extends AsyncTask<Void, String, InvitationTa...
    method InvitationTask (line 30) | public InvitationTask(Activity ctx, YaximConfiguration config, Smackab...
    method doInBackground (line 36) | @Override
    method showLongToast (line 63) | private void showLongToast(String toast, boolean is_error) {
    method onProgressUpdate (line 73) | @Override
    method onPreExecute (line 80) | @Override
    method onPostExecute (line 83) | @Override
    method failResponse (line 101) | private InvitationResponse failResponse(String reason) {
    method failResponse (line 104) | private InvitationResponse failResponse(Throwable exception) {
    class InvitationResponse (line 110) | public class InvitationResponse {
      method InvitationResponse (line 114) | public InvitationResponse(boolean success, String response) {

FILE: src/org/yaxim/androidclient/service/MUCController.java
  class MUCController (line 28) | public class MUCController {
    method MUCController (line 40) | MUCController(XMPPConnection c, String jid) {
    method setLastActivity (line 45) | public synchronized void setLastActivity() {
    method addPacketID (line 48) | public synchronized void addPacketID(long id) {
    method addPacketID (line 55) | public synchronized void addPacketID(Uri contentUri) {
    method getFirstPacketID (line 59) | public synchronized long getFirstPacketID() {
    method loadPacketIDs (line 66) | public synchronized void loadPacketIDs(ContentResolver cr) {
    method cleanup (line 78) | public void cleanup() {

FILE: src/org/yaxim/androidclient/service/Smackable.java
  type Smackable (line 10) | public interface Smackable {
    method isAuthenticated (line 11) | boolean isAuthenticated();
    method requestConnectionState (line 12) | void requestConnectionState(ConnectionState new_state);
    method requestConnectionState (line 13) | void requestConnectionState(ConnectionState new_state, boolean create_...
    method getConnectionState (line 14) | ConnectionState getConnectionState();
    method getConnectionStateTimestamp (line 15) | long getConnectionStateTimestamp();
    method getLastError (line 16) | String getLastError();
    method addRosterItem (line 18) | void addRosterItem(String user, String alias, String group, String tok...
    method removeRosterItem (line 19) | void removeRosterItem(String user) throws YaximXMPPException;
    method renameRosterItem (line 20) | void renameRosterItem(String user, String newName) throws YaximXMPPExc...
    method moveRosterItemToGroup (line 21) | void moveRosterItemToGroup(String user, String group) throws YaximXMPP...
    method renameRosterGroup (line 22) | void renameRosterGroup(String group, String newGroup) throws YaximXMPP...
    method sendPresenceRequest (line 23) | void sendPresenceRequest(String user, String type) throws YaximXMPPExc...
    method addRosterGroup (line 24) | void addRosterGroup(String group);
    method changePassword (line 25) | String changePassword(String newPassword);
    method setStatusFromConfig (line 27) | void setStatusFromConfig();
    method sendMessage (line 28) | void sendMessage(String user, String message, String lmc, String oob, ...
    method sendServerPing (line 29) | void sendServerPing();
    method setUserWatching (line 30) | void setUserWatching(boolean user_watching);
    method hasFileUpload (line 31) | boolean hasFileUpload();
    method registerCallback (line 33) | void registerCallback(XMPPServiceCallback callBack);
    method unRegisterCallback (line 34) | void unRegisterCallback();
    method syncDbRooms (line 36) | void syncDbRooms();
    method inviteToRoom (line 37) | boolean inviteToRoom(String contactJid, String roomJid);
    method getNameForJID (line 39) | String getNameForJID(String jid);
    method getMyMucNick (line 40) | String getMyMucNick(String jid);
    method getConnection (line 42) | XMPPConnection getConnection();

FILE: src/org/yaxim/androidclient/service/SmackableImp.java
  class SmackableImp (line 137) | public class SmackableImp implements Smackable {
    method SmackableImp (line 213) | public SmackableImp(YaximConfiguration config,
    method initXMPPConnection (line 237) | private synchronized void initXMPPConnection() throws YaximXMPPExcepti...
    method queryMamAfter (line 329) | public MamManager.MamQuery queryMamAfter(MamManager mm, String jid, St...
    method queryMamHistory (line 348) | public MamManager.MamQuery queryMamHistory(MamManager mm, String jid, ...
    method fetchMam (line 368) | public void fetchMam() {
    method doConnect (line 411) | public void doConnect(boolean create_account) throws YaximXMPPException {
    method updateConnectingThread (line 449) | private void updateConnectingThread(Thread new_thread) {
    method finishConnectingThread (line 472) | private void finishConnectingThread() {
    method requestConnectionState (line 485) | @Override
    method requestConnectionState (line 617) | @Override
    method getConnectionState (line 622) | @Override
    method getConnectionStateTimestamp (line 627) | @Override
    method updateConnectionState (line 633) | private synchronized void updateConnectionState(ConnectionState new_st...
    method initServiceDiscovery (line 651) | private void initServiceDiscovery() {
    method addRosterItem (line 676) | public void addRosterItem(String user, String alias, String group, Str...
    method removeRosterItem (line 683) | public void removeRosterItem(String user) throws YaximXMPPException {
    method renameRosterItem (line 689) | public void renameRosterItem(String user, String newName)
    method addRosterGroup (line 710) | public void addRosterGroup(String group) {
    method renameRosterGroup (line 714) | public void renameRosterGroup(String group, String newGroup) throws Ya...
    method moveRosterItemToGroup (line 723) | public void moveRosterItemToGroup(String user, String group)
    method sendPresenceRequest (line 728) | public void sendPresenceRequest(String user, String type) throws Yaxim...
    method changePassword (line 748) | @Override
    method onDisconnected (line 764) | private void onDisconnected(String reason) {
    method onDisconnected (line 769) | private void onDisconnected(Throwable reason) {
    method registerConnectionListener (line 800) | private void registerConnectionListener() {
    method connectAndLogin (line 847) | private void connectAndLogin(boolean create_account) throws YaximXMPPE...
    method tryToMoveRosterEntryToGroup (line 881) | private void tryToMoveRosterEntryToGroup(String userName, String group...
    method getRosterGroup (line 900) | private RosterGroup getRosterGroup(String groupName) {
    method removeRosterEntryFromGroups (line 911) | private void removeRosterEntryFromGroups(RosterEntry rosterEntry)
    method tryToRemoveUserFromGroup (line 920) | private void tryToRemoveUserFromGroup(RosterGroup group,
    method tryToRemoveRosterEntry (line 929) | private void tryToRemoveRosterEntry(String user) throws YaximXMPPExcep...
    method tryToAddRosterEntry (line 946) | private void tryToAddRosterEntry(String user, String alias, String gro...
    method removeOldRosterEntries (line 968) | private void removeOldRosterEntries() {
    method removeOldRosterIfNeeded (line 987) | private void removeOldRosterIfNeeded() {
    method handleIncomingSubscribe (line 998) | private void handleIncomingSubscribe(Presence request) {
    method setStatusFromConfig (line 1039) | public void setStatusFromConfig(Presence presence) {
    method setStatusFromConfig (line 1045) | public void setStatusFromConfig() {
    method formatMessage (line 1074) | public Message formatMessage(boolean is_muc, String to, String body, S...
    method sendOfflineMessages (line 1096) | public void sendOfflineMessages(String toMUCjid) throws YaximXMPPExcep...
    method formatMessageContentValues (line 1154) | public static ContentValues formatMessageContentValues(int direction, ...
    method addOfflineMessage (line 1171) | public static void addOfflineMessage(ContentResolver cr, String toJID,...
    method sendReceipt (line 1185) | public void sendReceipt(Jid jid, String stanza_id, Message.Type origin...
    method postponeReceipt (line 1198) | public void postponeReceipt(Jid jid, String stanza_id, Message.Type or...
    method cancelPostponedReceipt (line 1208) | public void cancelPostponedReceipt(Jid jid, String stanza_id) {
    method sendReceiptIfRequested (line 1219) | public void sendReceiptIfRequested(Message packet, Jid effective_jid, ...
    method sendPostponedReceipts (line 1234) | public void sendPostponedReceipts() {
    method sendMessage (line 1247) | public void sendMessage(String toJID, String message, String lmc, Stri...
    method sendMessage (line 1264) | public void sendMessage(String toJID, String message) {
    method sendMessageCorrection (line 1267) | public void sendMessageCorrection(String toJID, String message, String...
    method isAuthenticated (line 1272) | public boolean isAuthenticated() {
    method registerCallback (line 1280) | public void registerCallback(XMPPServiceCallback callBack) {
    method unRegisterCallback (line 1286) | public void unRegisterCallback() {
    method getNameForJID (line 1308) | public String getNameForJID(String jid) {
    method getLatestTimestamp (line 1329) | public long getLatestTimestamp() {
    method getRowIdForMyMessage (line 1342) | public long getRowIdForMyMessage(String jid, String packet_id) {
    method getRowIdForMessageCorrection (line 1356) | public long getRowIdForMessageCorrection(String jid, String resource, ...
    method setStatusOffline (line 1373) | private void setStatusOffline() {
    method registerRosterListener (line 1379) | private void registerRosterListener() {
    method getBareJID (line 1440) | private String getBareJID(String from) {
    method getJabberID (line 1450) | private String[] getJabberID(String from, String fallback) {
    method getJabberID (line 1460) | private String[] getJabberID(Jid from, String fallback) {
    method changeMessageDeliveryStatus (line 1465) | public boolean changeMessageDeliveryStatus(String jid, String packetID...
    method changeMessageDeliveryStatus (line 1480) | public boolean changeMessageDeliveryStatus(String jid, String packetID...
    method setUserWatching (line 1485) | public void setUserWatching(boolean user_watching) {
    method sendUserWatching (line 1500) | protected void sendUserWatching() throws SmackException.NotConnectedEx...
    method sendServerPing (line 1514) | public void sendServerPing() {
    method gotServerPong (line 1546) | private void gotServerPong(String pongID) {
    method registerPongTimeout (line 1559) | private void registerPongTimeout(long wait_time, String id) {
    class PongTimeoutAlarmReceiver (line 1571) | private class PongTimeoutAlarmReceiver extends BroadcastReceiver {
      method onReceive (line 1572) | public void onReceive(Context ctx, Intent i) {
    method showMucTimeout (line 1578) | private void showMucTimeout(MUCController mucc) {
    class PingAlarmReceiver (line 1600) | private class PingAlarmReceiver extends BroadcastReceiver {
      method onReceive (line 1601) | public void onReceive(Context ctx, Intent i) {
    method rejoinMUC (line 1646) | private void rejoinMUC(String jid) {
    method isValidPingResponse (line 1659) | private boolean isValidPingResponse(IQ response) {
    method isTimeoutPingResponse (line 1675) | private boolean isTimeoutPingResponse(IQ response) {
    method registerLastActivity (line 1690) | private void registerLastActivity(Jid from_full) {
    method registerPongListener (line 1702) | private void registerPongListener() {
    method registerPingAlarm (line 1750) | void registerPingAlarm() {
    method unregisterPongListener (line 1754) | private void unregisterPongListener() {
    method registerMessageListener (line 1759) | private void registerMessageListener() {
    method isUserActivity (line 1787) | private boolean isUserActivity(Message m) {
    method getMessageTimestamp (line 1802) | private DelayInformation getMessageTimestamp(Message msg, Forwarded fw...
    method processMessage (line 1813) | private void processMessage(Message msg, boolean is_history_sync) {
    method matchOutgoingMucReflection (line 2066) | private boolean matchOutgoingMucReflection(Message msg, String[] fromJ...
    method messageAlreadyArchived (line 2108) | private boolean messageAlreadyArchived(String withJid, String uid) {
    method completeMucSync (line 2121) | private void completeMucSync(String room, String subject) {
    method checkAddMucMessage (line 2135) | private boolean checkAddMucMessage(Message msg, String packet_id, Stri...
    method handleKickedFromMUC (line 2175) | private void handleKickedFromMUC(String room, boolean banned, Jid acto...
    method getMyMucNick (line 2189) | @Override
    method registerPresenceListener (line 2203) | private void registerPresenceListener() {
    method getChatArchiveEntry (line 2236) | private String getChatArchiveEntry(String jid) {
    method addChatArchiveEntry (line 2250) | private void addChatArchiveEntry(String jid, String uid, long ts) {
    method upsertChatMessageToDB (line 2259) | private boolean upsertChatMessageToDB(long upsert_id, ContentValues va...
    method addChatMessageToDB (line 2264) | private void addChatMessageToDB(String bare_jid, ContentValues values,...
    method getContentValuesForRosterEntry (line 2274) | private ContentValues getContentValuesForRosterEntry(final RosterEntry...
    method getContentValuesForRosterEntry (line 2279) | private ContentValues getContentValuesForRosterEntry(final RosterEntry...
    method deleteRosterEntryFromDB (line 2316) | private void deleteRosterEntryFromDB(final String jabberID) {
    method updateRosterEntryInDB (line 2322) | private void updateRosterEntryInDB(final RosterEntry entry) {
    method upsertRoster (line 2326) | private void upsertRoster(final ContentValues values, String jid) {
    method getGroup (line 2333) | private String getGroup(Collection<RosterGroup> groups) {
    method getName (line 2340) | private String getName(RosterEntry rosterEntry) {
    method getStatus (line 2348) | private StatusMode getStatus(Presence presence) {
    method getStatusInt (line 2362) | private int getStatusInt(final Presence presence) {
    method debugLog (line 2366) | private void debugLog(String data) {
    method getLastError (line 2372) | @Override
    method getLastLoginError (line 2377) | public Exception getLastLoginError() {
    method updateNickname (line 2381) | public synchronized void updateNickname() {
    method loadOrUpdateNickname (line 2391) | private boolean loadOrUpdateNickname(boolean force_rename) {
    method discoverMUCDomain (line 2432) | private void discoverMUCDomain(Jid jid, DiscoverInfo info) {
    method loadMUCBookmarks (line 2447) | private void loadMUCBookmarks() {
    method hasFileUpload (line 2472) | @Override
    method discoverServicesAsync (line 2477) | private void discoverServicesAsync() {
    method discoverServices (line 2487) | private void discoverServices(ServiceDiscoveryManager sdm, Jid jid) {
    method discoverServices (line 2495) | private void discoverServices() {
    method cleanupMUCsList (line 2515) | private synchronized void cleanupMUCsList() {
    method cleanupMUCsRoster (line 2524) | private synchronized void cleanupMUCsRoster(boolean set_offline) {
    method syncDbRooms (line 2554) | public synchronized void syncDbRooms() {
    method handleMucInvitation (line 2617) | protected boolean handleMucInvitation(Message msg) {
    method asyncProcessMucInvitation (line 2653) | protected void asyncProcessMucInvitation(final EntityBareJid room, fin...
    method processMucInvitation (line 2661) | protected void processMucInvitation(final EntityBareJid room, final St...
    method joinRoomAsync (line 2704) | private synchronized void joinRoomAsync(final String room, final Strin...
    method joinRoom (line 2720) | private boolean joinRoom(final String room, String nickname, String pa...
    method quitRoom (line 2837) | private void quitRoom(String room) {
    method inviteToRoom (line 2850) | @Override
    method getJidInfo (line 2866) | public EntityInfo getJidInfo(String jid) {
    method getUserList (line 2906) | public List<EntityInfo> getUserList(String jid) {
    method getConnection (line 2941) | @Override

FILE: src/org/yaxim/androidclient/service/XMPPService.java
  class XMPPService (line 41) | public class XMPPService extends GenericService {
    method onBind (line 66) | @Override
    method onRebind (line 81) | @Override
    method onUnbind (line 91) | @Override
    method onCreate (line 102) | @Override
    method onDestroy (line 133) | @Override
    method onStartCommand (line 148) | @Override
    method registerReceiver (line 195) | @Override
    method createServiceChatStub (line 203) | private void createServiceChatStub() {
    method createServiceMucStub (line 242) | private void createServiceMucStub() {
    method createServiceRosterStub (line 277) | private void createServiceRosterStub() {
    method getConnectionStateString (line 389) | private String getConnectionStateString() {
    method getStatusTitle (line 400) | public String getStatusTitle(ConnectionState cs) {
    method updateServiceNotification (line 412) | private void updateServiceNotification(ConnectionState cs) {
    method updateServiceNotification (line 452) | private void updateServiceNotification() {
    method doConnect (line 459) | private void doConnect() {
    method broadcastConnectionState (line 470) | private synchronized void broadcastConnectionState(ConnectionState cs) {
    method getNetworkInfo (line 483) | private NetworkInfo getNetworkInfo() {
    method networkConnected (line 489) | private boolean networkConnected() {
    method networkConnectedOrConnecting (line 494) | private boolean networkConnectedOrConnecting() {
    method failConnection (line 501) | private void failConnection(String reason) {
    method connectionFailed (line 510) | private void connectionFailed(String reason) {
    method connectionClosed (line 539) | private void connectionClosed() {
    method manualDisconnect (line 546) | public void manualDisconnect() {
    method performDisconnect (line 552) | public void performDisconnect() {
    method invitationDrawableId (line 559) | static int invitationDrawableId() {
    method createAdapter (line 564) | private void createAdapter() {
    class ReconnectAlarmReceiver (line 664) | private class ReconnectAlarmReceiver extends BroadcastReceiver {
      method onReceive (line 665) | public void onReceive(Context ctx, Intent i) {
    method userStartedWatching (line 679) | private void userStartedWatching() {
    method userStoppedWatching (line 687) | private void userStoppedWatching() {
    method configureSmartAwayMode (line 698) | private void configureSmartAwayMode() {
    class RingerModeReceiver (line 705) | private class RingerModeReceiver extends BroadcastReceiver {
      method onReceive (line 706) | public void onReceive(Context ctx, Intent i) {

FILE: src/org/yaxim/androidclient/service/XMPPServiceCallback.java
  type XMPPServiceCallback (line 6) | public interface XMPPServiceCallback {
    method notifyMessage (line 7) | void notifyMessage(String[] from, String messageBody, boolean silent_n...
    method displayPendingNotifications (line 8) | void displayPendingNotifications(String jid);
    method connectionStateChanged (line 9) | void connectionStateChanged(ConnectionState connection_state);
    method mucInvitationReceived (line 10) | void mucInvitationReceived(String roomname, String room, String passwo...

FILE: src/org/yaxim/androidclient/service/YaximBroadcastReceiver.java
  class YaximBroadcastReceiver (line 18) | public class YaximBroadcastReceiver extends BroadcastReceiver {
    method YaximBroadcastReceiver (line 23) | public YaximBroadcastReceiver() {
    method getInstance (line 28) | public static YaximBroadcastReceiver getInstance() {
    method startService (line 34) | public void startService(Context ctx, Intent i) {
    method initNetworkStatus (line 40) | public static void initNetworkStatus(Context context) {
    method trackConnectivity (line 54) | public void trackConnectivity(Context ctx) {
    method untrackConnectivity (line 62) | public void untrackConnectivity(Context ctx) {
    method onReceive (line 69) | @Override

FILE: src/org/yaxim/androidclient/util/AdapterConstants.java
  class AdapterConstants (line 3) | public class AdapterConstants {

FILE: src/org/yaxim/androidclient/util/ConnectionState.java
  type ConnectionState (line 3) | public enum ConnectionState {

FILE: src/org/yaxim/androidclient/util/ErrorReportManager.java
  class ErrorReportManager (line 17) | public class ErrorReportManager {
    method uncaughtException (line 21) | @Override
    method get (line 30) | synchronized public static ErrorReportManager get(Context ctx) {
    method ErrorReportManager (line 36) | public ErrorReportManager(Context ctx) {
    method report (line 49) | public void report(Throwable e) {
    method sendReports (line 55) | public void sendReports() {

FILE: src/org/yaxim/androidclient/util/FileHelper.java
  class FileHelper (line 33) | public class FileHelper {
    method getPath (line 46) | @SuppressLint("NewApi")
    method getDataColumn (line 122) | public static String getDataColumn(Context context, Uri uri, String se...
    method isExternalStorageDocument (line 148) | public static boolean isExternalStorageDocument(Uri uri) {
    method isDownloadsDocument (line 156) | public static boolean isDownloadsDocument(Uri uri) {
    method isMediaDocument (line 164) | public static boolean isMediaDocument(Uri uri) {
    method isGooglePhotosUri (line 172) | public static boolean isGooglePhotosUri(Uri uri) {
    method createImageFile (line 176) | public static File createImageFile(Context ctx) {
    method getExifOrientation (line 195) | public static int getExifOrientation(Context ctx, Uri path) {
    method getExifRotation (line 206) | public static int getExifRotation(Context ctx, Uri path) {
    method shrinkPicture (line 219) | public static byte[] shrinkPicture(Context ctx, Uri path, long size_li...
    method getFileInfo (line 256) | public static FileInfo getFileInfo(Context ctx, Uri path) {
    class FileInfo (line 286) | public static class FileInfo {
      method FileInfo (line 291) | public FileInfo(String mimeType, String displayName, long size) {

FILE: src/org/yaxim/androidclient/util/JULHandler.java
  class JULHandler (line 12) | public class JULHandler extends Handler {
    method reset (line 14) | public static void reset(Handler rootHandler) {
    method close (line 29) | @Override
    method flush (line 33) | @Override
    method publish (line 37) | @Override
    method getAndroidLevel (line 57) | static int getAndroidLevel(Level level) {

FILE: src/org/yaxim/androidclient/util/LogConstants.java
  class LogConstants (line 3) | public class LogConstants {

FILE: src/org/yaxim/androidclient/util/MessageStylingHelper.java
  class MessageStylingHelper (line 12) | public class MessageStylingHelper {
    method applyNicknameHighlight (line 13) | public static boolean applyNicknameHighlight(SpannableStringBuilder me...
    method formatMessage (line 31) | public static SpannableStringBuilder formatMessage(String message, Str...
    method applyEmojiScaling (line 47) | public static void applyEmojiScaling(Editable message, float max_scale) {

FILE: src/org/yaxim/androidclient/util/PreferenceConstants.java
  class PreferenceConstants (line 3) | public class PreferenceConstants {

FILE: src/org/yaxim/androidclient/util/SimpleCursorTreeAdapter.java
  class SimpleCursorTreeAdapter (line 41) | public abstract class SimpleCursorTreeAdapter extends ResourceCursorTree...
    method SimpleCursorTreeAdapter (line 103) | public SimpleCursorTreeAdapter(Context context, Cursor cursor, int col...
    method SimpleCursorTreeAdapter (line 140) | public SimpleCursorTreeAdapter(Context context, Cursor cursor, int col...
    method SimpleCursorTreeAdapter (line 173) | public SimpleCursorTreeAdapter(Context context, Cursor cursor, int gro...
    method init (line 180) | private void init(String[] groupFromNames, int[] groupTo, String[] chi...
    method getViewBinder (line 197) | public ViewBinder getViewBinder() {
    method setViewBinder (line 209) | public void setViewBinder(ViewBinder viewBinder) {
    method bindView (line 213) | private void bindView(View view, Context context, Cursor cursor, int[]...
    method initFromColumns (line 242) | private void initFromColumns(Cursor cursor, String[] fromColumnNames, ...
    method bindChildView (line 248) | @Override
    method bindGroupView (line 258) | @Override
    method setViewImage (line 276) | protected void setViewImage(ImageView v, String value) {
    method setViewText (line 295) | public void setViewText(TextView v, String text) {
    type ViewBinder (line 311) | public static interface ViewBinder {
      method setViewValue (line 325) | boolean setViewValue(View view, Cursor cursor, int columnIndex);

FILE: src/org/yaxim/androidclient/util/StatusMode.java
  type StatusMode (line 5) | public enum StatusMode {
    method StatusMode (line 18) | StatusMode(int textId, int drawableId) {
    method getTextId (line 23) | public int getTextId() {
    method getDrawableId (line 27) | public int getDrawableId() {
    method toString (line 31) | public String toString() {
    method fromString (line 35) | public static StatusMode fromString(String status) {

FILE: src/org/yaxim/androidclient/util/XEP0392Helper.java
  class XEP0392Helper (line 14) | public class XEP0392Helper {
    method angleFromNick (line 20) | public static double angleFromNick(String nickname) {
    method clipColorValue (line 33) | public static int clipColorValue(double color) {
    method rgbFromCbCr (line 37) | public static int rgbFromCbCr(double angle) {
    method rgbFromNickCbCr (line 55) | public static int rgbFromNickCbCr(String nick) {
    method rgbFromNick (line 58) | public static int rgbFromNick(String nick, int lightness) {
    method mixValues (line 67) | public static int mixValues(int fg, int bg, int factor) {
    method mixColors (line 70) | public static int mixColors(int fg, int bg, int factor) {
    method mixNickWithBackground (line 76) | public static int mixNickWithBackground(String nick, Resources.Theme t...

FILE: src/org/yaxim/androidclient/util/XMPPHelper.java
  class XMPPHelper (line 31) | public class XMPPHelper {
    method verifyJabberID (line 62) | public static String verifyJabberID(String jid)
    method verifyJabberID (line 81) | public static String verifyJabberID(Editable jid)
    method createResource (line 86) | public static String createResource(Context ctx) {
    method tryToParseInt (line 92) | public static int tryToParseInt(String value, int defVal) {
    method quoteStringWithoutQuotes (line 103) | public static String quoteStringWithoutQuotes(String original) {
    method quoteString (line 113) | public static String quoteString(String original) {
    method capitalizeString (line 117) | public static String capitalizeString(String original) {
    method getEmojiScalingFactorRE (line 132) | public static float getEmojiScalingFactorRE(String message, float max_...
    method getEditTextColor (line 145) | public static int getEditTextColor(Context ctx) {
    method securePassword (line 159) | public static String securePassword() {
    method jid2mxid (line 171) | public static String jid2mxid(String jid) {
    method mxid2jid (line 182) | public static String mxid2jid(String mxid) {
    method jid2url (line 198) | public static String jid2url(String jid) {
    method createInvitationLink (line 202) | public static String createInvitationLink(String jid, String token) {
    method createInvitationLinkHTTPS (line 210) | public static String createInvitationLinkHTTPS(String jid, String toke...
    method createRosterLinkHTTPS (line 218) | public static String createRosterLinkHTTPS(String jid) {
    method createMucLinkHTTPS (line 222) | public static String createMucLinkHTTPS(String jid) {
    method setStaticNFC (line 226) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    method setNFCInvitation (line 232) | @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    method shareLink (line 237) | public static void shareLink(Activity act, int title_id, String link) {
    method transmogrifyXmppUriHelper (line 245) | public static Uri transmogrifyXmppUriHelper(Uri uri) {
    method transmogrifyXmppUri (line 283) | public static boolean transmogrifyXmppUri(Intent intent) {

FILE: src/org/yaxim/androidclient/widget/AutoCompleteJidEdit.java
  class AutoCompleteJidEdit (line 19) | public class AutoCompleteJidEdit extends AutoCompleteTextView {
    method AutoCompleteJidEdit (line 27) | public AutoCompleteJidEdit(Context ctx, AttributeSet attrs) {
    method setServerList (line 37) | public void setServerList(int static_elents_id) {
    method setServerList (line 43) | public void setServerList(String first, Collection<String> dyn_element...
    method onAttachedToWindow (line 54) | protected void onAttachedToWindow() {
    method onSelectionChanged (line 65) | @Override
    method enoughToFilter (line 78) | @Override
    class JidTextWatcher (line 83) | private class JidTextWatcher implements TextWatcher {
      method afterTextChanged (line 84) | public void afterTextChanged(Editable e) {
      method beforeTextChanged (line 126) | public void beforeTextChanged(CharSequence s, int start, int count,
      method onTextChanged (line 130) | public void onTextChanged(CharSequence s, int start, int before, int...

FILE: yaxim/src/org/yaxim/androidclient/FlavorConfig.java
  class FlavorConfig (line 3) | public class FlavorConfig {
    method getTheme (line 4) | public static int getTheme(String theme) {
Condensed preview — 195 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,455K chars).
[
  {
    "path": ".fbprefs",
    "chars": 6825,
    "preview": "#FindBugs User Preferences\n#Wed Mar 25 22:24:48 CET 2009\ndetectorAppendingToAnObjectOutputStream=AppendingToAnObjectOutp"
  },
  {
    "path": ".gitignore",
    "chars": 151,
    "preview": ".classpath\n.project\n.settings\nbin/\nbuild/\ngen/\n*.class\nlocal.properties\nbuild.properties\nres/values/version.xml\nlint.xml"
  },
  {
    "path": ".gitmodules",
    "chars": 125,
    "preview": "[submodule \"MemorizingTrustManager\"]\n\tpath = MemorizingTrustManager\n\turl = git://github.com/ge0rg/MemorizingTrustManager"
  },
  {
    "path": "AndroidManifest.xml",
    "chars": 7820,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" xmlns:tools="
  },
  {
    "path": "ChangeLog",
    "chars": 5975,
    "preview": "0.9.9c:\n * Startup: show absolute sync progress instead of broken percent\n0.9.9b:\n * First startup: improve error handli"
  },
  {
    "path": "LICENSE.txt",
    "chars": 35149,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "README.md",
    "chars": 3530,
    "preview": "yaxim (Yet Another XMPP Instant Messenger)\n==========================================\n\nyaxim is a lean Jabber/XMPP clien"
  },
  {
    "path": "base.rdf.xml",
    "chars": 11326,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<?xml-stylesheet href=\"style.xsl\" type=\"text/xsl\"?>\n<rdf:RDF xmlns=\"http://useful"
  },
  {
    "path": "bruno/res/drawable/ic_action_contacts_all.xml",
    "chars": 12491,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:tint=\"?attr/colorControlNormal\"\n    andro"
  },
  {
    "path": "bruno/res/drawable/ic_action_contacts_online.xml",
    "chars": 15028,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:tint=\"?attr/colorControlNormal\"\n    andro"
  },
  {
    "path": "bruno/res/drawable/ic_action_person_add.xml",
    "chars": 13255,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:tint=\"?attr/colorControlNormal\"\n    andro"
  },
  {
    "path": "bruno/res/values/colors.xml",
    "chars": 441,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources\n  xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <col"
  },
  {
    "path": "bruno/res/values/prefArrays.xml",
    "chars": 531,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\" tools:ignore=\"MissingTr"
  },
  {
    "path": "bruno/res/values/strings.xml",
    "chars": 244,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">@string/app_name_bruno</string>\n\t<string nam"
  },
  {
    "path": "bruno/res/values/styles.xml",
    "chars": 785,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\" tools:targetApi=\"17\">\n\n"
  },
  {
    "path": "bruno/res/values/themes.xml",
    "chars": 3947,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\" tools:targetApi=\"11\">\n\n"
  },
  {
    "path": "bruno/src/org/yaxim/androidclient/FlavorConfig.java",
    "chars": 326,
    "preview": "package org.yaxim.androidclient;\n\npublic class FlavorConfig {\n\tpublic static int getTheme(String theme) {\n\t\tswitch (them"
  },
  {
    "path": "bruno.rdf.sh",
    "chars": 348,
    "preview": "export NAME=\"Bruno\"\nexport SHORTDESC=\"Bruno the Jabber™ Bear\"\nexport DESCRIPTION=\"Bruno is an Android XMPP/Jabber client"
  },
  {
    "path": "build.gradle",
    "chars": 5078,
    "preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\nbuildscript {\n\trepos"
  },
  {
    "path": "build.xml",
    "chars": 6652,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project name=\"yaxim\" default=\"help\">\n\n    <!-- The local.properties file is crea"
  },
  {
    "path": "export-icons.sh",
    "chars": 1705,
    "preview": "#!/bin/sh\n\n# convert a single svg file into a png in the according drawable dir\nsvg2png() {\n\tbasename=$1\n\twidth=$2\n\theig"
  },
  {
    "path": "free/src/org/yaxim/androidclient/service/InstallReferrerReceiver.java",
    "chars": 367,
    "preview": "package org.yaxim.androidclient.service;\n\nimport android.content.Context;\nimport android.util.Log;\n\npublic class Install"
  },
  {
    "path": "free/src/org/yaxim/androidclient/service/PushManager.java",
    "chars": 480,
    "preview": "package org.yaxim.androidclient.service;\n\nimport android.app.Service;\nimport android.util.Log;\n\nimport org.jivesoftware."
  },
  {
    "path": "play/AndroidManifest.xml",
    "chars": 901,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:tools=\"http://schemas.android.com/tools\" package=\"org.yaxim.andro"
  },
  {
    "path": "play/res/values/push.xml",
    "chars": 278,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"push_service\">push.yax.im</string>\n\t<string name=\"gcm_"
  },
  {
    "path": "play/src/org/yaxim/androidclient/service/InstallReferrerReceiver.java",
    "chars": 3419,
    "preview": "package org.yaxim.androidclient.service;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimpo"
  },
  {
    "path": "play/src/org/yaxim/androidclient/service/PushManager.java",
    "chars": 4408,
    "preview": "package org.yaxim.androidclient.service;\n\nimport android.app.Service;\nimport android.provider.Settings;\nimport android.s"
  },
  {
    "path": "play/src/org/yaxim/androidclient/service/PushMessageReceiver.java",
    "chars": 1194,
    "preview": "package org.yaxim.androidclient.service;\n\nimport android.content.Intent;\nimport android.os.Build;\nimport android.text.Te"
  },
  {
    "path": "proguard.cfg",
    "chars": 2198,
    "preview": "-dontobfuscate\n-optimizationpasses 5\n-dontskipnonpubliclibraryclasses\n-dontpreverify\n-allowaccessmodification\n-verbose\n-"
  },
  {
    "path": "project.properties",
    "chars": 648,
    "preview": "# This file is automatically generated by Android Tools.\n# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n#\n# T"
  },
  {
    "path": "rdf.sh",
    "chars": 134,
    "preview": "#!/bin/bash\n\nsource yaxim.rdf.sh\nenvsubst < base.rdf.xml > yaxim.rdf.xml\n\nsource bruno.rdf.sh\nenvsubst < base.rdf.xml > "
  },
  {
    "path": "res/drawable/count_bcg.xml",
    "chars": 225,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n       android:"
  },
  {
    "path": "res/drawable/group_indicator.xml",
    "chars": 292,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n "
  },
  {
    "path": "res/drawable/ic_action_attach.xml",
    "chars": 608,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid:tint=\"?attr/colorControlNormal\"\n        andr"
  },
  {
    "path": "res/drawable/ic_action_camera.xml",
    "chars": 653,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:tint=\"?attr/colorControlNormal\"\n     "
  },
  {
    "path": "res/drawable/ic_action_contacts_all.xml",
    "chars": 1167,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24sp\"\n    android:height=\"24sp\"\n  "
  },
  {
    "path": "res/drawable/ic_action_contacts_online.xml",
    "chars": 634,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:tint=\"?attr/colorControlNormal\"\n    andro"
  },
  {
    "path": "res/drawable/ic_action_file.xml",
    "chars": 450,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid:tint=\"?attr/colorControlNormal\"\n        andr"
  },
  {
    "path": "res/drawable/ic_action_person_add.xml",
    "chars": 498,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid:tint=\"?attr/colorControlNormal\"\n        andr"
  },
  {
    "path": "res/drawable/ic_action_photo.xml",
    "chars": 466,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid:tint=\"?attr/colorControlNormal\"\n        andr"
  },
  {
    "path": "res/drawable/ic_action_search.xml",
    "chars": 586,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:tint=\"?attr/colorControlNormal\"\n     "
  },
  {
    "path": "res/drawable/ic_status_available.xml",
    "chars": 1095,
    "preview": "<vector android:height=\"32sp\" android:viewportHeight=\"480\"\n    android:viewportWidth=\"480\" android:width=\"32sp\"\n    xmln"
  },
  {
    "path": "res/drawable/ic_status_away.xml",
    "chars": 1102,
    "preview": "<vector android:height=\"32sp\" android:viewportHeight=\"480\"\n    android:viewportWidth=\"480\" android:width=\"32sp\"\n    xmln"
  },
  {
    "path": "res/drawable/ic_status_chat.xml",
    "chars": 2688,
    "preview": "<vector android:height=\"32sp\" android:viewportHeight=\"480\"\n    android:viewportWidth=\"480\" android:width=\"32sp\"\n    xmln"
  },
  {
    "path": "res/drawable/ic_status_dnd.xml",
    "chars": 2025,
    "preview": "<vector android:height=\"32sp\" android:viewportHeight=\"480\"\n    android:viewportWidth=\"480\" android:width=\"32sp\"\n    xmln"
  },
  {
    "path": "res/drawable/ic_status_offline.xml",
    "chars": 1104,
    "preview": "<vector android:height=\"32sp\" android:viewportHeight=\"480\"\n    android:viewportWidth=\"480\" android:width=\"32sp\"\n    xmln"
  },
  {
    "path": "res/drawable/ic_status_subscribe.xml",
    "chars": 1012,
    "preview": "<vector android:height=\"32sp\" android:viewportHeight=\"480\"\n    android:viewportWidth=\"480\" android:width=\"32sp\"\n    xmln"
  },
  {
    "path": "res/drawable/ic_status_unknown.xml",
    "chars": 1433,
    "preview": "<vector android:height=\"32sp\" android:viewportHeight=\"480\"\n    android:viewportWidth=\"480\" android:width=\"32sp\"\n    xmln"
  },
  {
    "path": "res/drawable/ic_status_xa.xml",
    "chars": 1139,
    "preview": "<vector android:height=\"32sp\" android:viewportHeight=\"480\"\n    android:viewportWidth=\"480\" android:width=\"32sp\"\n    xmln"
  },
  {
    "path": "res/layout/aboutview.xml",
    "chars": 1958,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid:l"
  },
  {
    "path": "res/layout/activity_entitylist.xml",
    "chars": 820,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n\txmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroi"
  },
  {
    "path": "res/layout/addrosteritemdialog.xml",
    "chars": 1737,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid:"
  },
  {
    "path": "res/layout/chat_action_title.xml",
    "chars": 1839,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Copyright (C) 2010 The Android Open Source Project\n\n     Licensed under the "
  },
  {
    "path": "res/layout/chatrow.xml",
    "chars": 1978,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\t\tandroi"
  },
  {
    "path": "res/layout/edittext_dialog.xml",
    "chars": 849,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid"
  },
  {
    "path": "res/layout/firststartdialog.xml",
    "chars": 2827,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\t\tandroid"
  },
  {
    "path": "res/layout/groupnameview.xml",
    "chars": 556,
    "preview": "<merge xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t<Spinner android:id=\"@+id/groupspinner\" \n\t\tandroid:p"
  },
  {
    "path": "res/layout/main.xml",
    "chars": 1067,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<LinearLayout\n\txmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroi"
  },
  {
    "path": "res/layout/mainchat.xml",
    "chars": 2189,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<FrameLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    "
  },
  {
    "path": "res/layout/mainchild_row.xml",
    "chars": 2045,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid"
  },
  {
    "path": "res/layout/maingroup_row.xml",
    "chars": 1162,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid"
  },
  {
    "path": "res/layout/moverosterentrytogroupview.xml",
    "chars": 936,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\" \n\t\tandro"
  },
  {
    "path": "res/layout/muc_new_dialog.xml",
    "chars": 1887,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    andr"
  },
  {
    "path": "res/layout/password_view.xml",
    "chars": 2310,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid:i"
  },
  {
    "path": "res/layout/qrcode_dialog.xml",
    "chars": 945,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\tandroid"
  },
  {
    "path": "res/layout/status_action_provider.xml",
    "chars": 555,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    an"
  },
  {
    "path": "res/layout/status_spinner_item.xml",
    "chars": 673,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    "
  },
  {
    "path": "res/layout/statusview.xml",
    "chars": 1833,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\" \n\t\tandroid"
  },
  {
    "path": "res/menu/chat_contextmenu.xml",
    "chars": 401,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t<item android:"
  },
  {
    "path": "res/menu/contact_options.xml",
    "chars": 1220,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t<item   androi"
  },
  {
    "path": "res/menu/muc_options.xml",
    "chars": 1162,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      xmlns:app="
  },
  {
    "path": "res/menu/noncontact_options.xml",
    "chars": 567,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      xmlns:app="
  },
  {
    "path": "res/menu/roster_group_contextmenu.xml",
    "chars": 241,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t\t<item android"
  },
  {
    "path": "res/menu/roster_item_contextmenu.xml",
    "chars": 1670,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      xmlns:app="
  },
  {
    "path": "res/menu/roster_options.xml",
    "chars": 1692,
    "preview": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n      xmlns:app=\"http://schemas.android.com/apk/res-aut"
  },
  {
    "path": "res/values/array.xml",
    "chars": 260,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\" tools:ignore=\"MissingTr"
  },
  {
    "path": "res/values/attrs.xml",
    "chars": 598,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<!-- View styles -->\n\t<attr name=\"MainGroup\" format=\"reference\" />\n\t"
  },
  {
    "path": "res/values/developers.xml",
    "chars": 409,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\" tools:ignore=\"MissingTr"
  },
  {
    "path": "res/values/prefArrays.xml",
    "chars": 953,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\" tools:ignore=\"MissingTr"
  },
  {
    "path": "res/values/servers.xml",
    "chars": 5738,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\" tools:ignore=\"MissingTr"
  },
  {
    "path": "res/values/strings.xml",
    "chars": 18786,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values/styles.xml",
    "chars": 3091,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\" tools:targetApi=\"17\">\n\n"
  },
  {
    "path": "res/values/themes.xml",
    "chars": 2343,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\" tools:targetApi=\"11\">\n\n"
  },
  {
    "path": "res/values-cs/strings.xml",
    "chars": 18910,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-de/strings.xml",
    "chars": 19693,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-el/strings.xml",
    "chars": 20103,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-en-rGB/strings.xml",
    "chars": 18804,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-es/strings.xml",
    "chars": 20267,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-eu/strings.xml",
    "chars": 19588,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-fi/strings.xml",
    "chars": 19503,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-fr/strings.xml",
    "chars": 20603,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-he/strings.xml",
    "chars": 17699,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-hi/strings.xml",
    "chars": 18917,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">याक्सिं</string>\n\t<string name=\"app_name_bru"
  },
  {
    "path": "res/values-hr/strings.xml",
    "chars": 18858,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-id/strings.xml",
    "chars": 18844,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-it/strings.xml",
    "chars": 19870,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-ja/strings.xml",
    "chars": 16937,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-kn/strings.xml",
    "chars": 19065,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">ಯಾಕ್ಸಿಂ</string>\n\t<string name=\"app_name_bru"
  },
  {
    "path": "res/values-lt/strings.xml",
    "chars": 19102,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">Yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-nb/strings.xml",
    "chars": 18913,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-nl/strings.xml",
    "chars": 19399,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-pl/strings.xml",
    "chars": 19349,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-pt/strings.xml",
    "chars": 19256,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-pt-rBR/strings.xml",
    "chars": 19396,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-ro/strings.xml",
    "chars": 19582,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-ru/strings.xml",
    "chars": 20018,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-sk/strings.xml",
    "chars": 18936,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-sr/strings.xml",
    "chars": 18824,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-sv/strings.xml",
    "chars": 19158,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-tr/strings.xml",
    "chars": 18892,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-uk/strings.xml",
    "chars": 19457,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-uz/strings.xml",
    "chars": 17354,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/values-zh-rCN/strings.xml",
    "chars": 16280,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\t<string name=\"app_name\">yaxim</string>\n\t<string name=\"app_name_bruno"
  },
  {
    "path": "res/xml/accountprefs.xml",
    "chars": 3332,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen\n\txmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t<"
  },
  {
    "path": "res/xml/automotive_app_desc.xml",
    "chars": 101,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<automotiveApp>\n\t<uses name=\"notification\"/>\n</automotiveApp>\n"
  },
  {
    "path": "res/xml/mainprefs.xml",
    "chars": 3797,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen\n\txmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n\t"
  },
  {
    "path": "res/xml/notificationprefs.xml",
    "chars": 1544,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<PreferenceScreen\n\txmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n "
  },
  {
    "path": "res/xml/provider_paths.xml",
    "chars": 129,
    "preview": "<paths xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t<external-files-path name=\"pics\" path=\"Pictures/\"/>\n"
  },
  {
    "path": "settings.gradle",
    "chars": 34,
    "preview": "include ':MemorizingTrustManager'\n"
  },
  {
    "path": "src/eu/siacs/conversations/ui/text/DividerSpan.java",
    "chars": 584,
    "preview": "package eu.siacs.conversations.ui.text;\n\nimport android.text.TextPaint;\nimport android.text.style.MetricAffectingSpan;\n\n"
  },
  {
    "path": "src/eu/siacs/conversations/ui/text/QuoteSpan.java",
    "chars": 1795,
    "preview": "package eu.siacs.conversations.ui.text;\n\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport android.s"
  },
  {
    "path": "src/eu/siacs/conversations/utils/ImStyleParser.java",
    "chars": 4630,
    "preview": "/*\n * Copyright (c) 2017, Daniel Gultsch All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "src/eu/siacs/conversations/utils/StylingHelper.java",
    "chars": 7884,
    "preview": "/*\n * Copyright (c) 2017, Daniel Gultsch All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "src/org/yaxim/androidclient/FileHttpUploadTask.java",
    "chars": 6395,
    "preview": "package org.yaxim.androidclient;\n\nimport android.content.Context;\nimport android.net.Uri;\nimport android.os.AsyncTask;\ni"
  },
  {
    "path": "src/org/yaxim/androidclient/IXMPPRosterCallback.aidl",
    "chars": 182,
    "preview": "package org.yaxim.androidclient;\n\n/*\n\tIPC interface for XMPPService to send broadcasts to UI\n*/\n\ninterface IXMPPRosterCa"
  },
  {
    "path": "src/org/yaxim/androidclient/MainWindow.java",
    "chars": 43847,
    "preview": "package org.yaxim.androidclient;\n\nimport java.util.HashMap;\nimport java.util.List;\n\nimport org.jivesoftware.smack.sasl.S"
  },
  {
    "path": "src/org/yaxim/androidclient/ThemedActivity.java",
    "chars": 2248,
    "preview": "package org.yaxim.androidclient;\n\nimport android.os.Bundle;\nimport android.support.annotation.Nullable;\nimport android.s"
  },
  {
    "path": "src/org/yaxim/androidclient/XMPPRosterServiceAdapter.java",
    "chars": 3607,
    "preview": "package org.yaxim.androidclient;\n\nimport org.yaxim.androidclient.util.ConnectionState;\n\nimport android.os.RemoteExceptio"
  },
  {
    "path": "src/org/yaxim/androidclient/YaximApplication.java",
    "chars": 3330,
    "preview": "package org.yaxim.androidclient;\n\nimport org.jivesoftware.smack.android.AndroidSmackInitializer;\nimport org.yaxim.androi"
  },
  {
    "path": "src/org/yaxim/androidclient/chat/ChatWindow.java",
    "chars": 37165,
    "preview": "package org.yaxim.androidclient.chat;\n\nimport java.io.File;\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\nim"
  },
  {
    "path": "src/org/yaxim/androidclient/chat/MUCChatWindow.java",
    "chars": 8498,
    "preview": "package org.yaxim.androidclient.chat;\n\nimport java.util.List;\n\nimport org.yaxim.androidclient.R;\nimport org.yaxim.androi"
  },
  {
    "path": "src/org/yaxim/androidclient/chat/XMPPChatServiceAdapter.java",
    "chars": 1570,
    "preview": "package org.yaxim.androidclient.chat;\n\nimport android.net.Uri;\nimport android.os.RemoteException;\nimport android.util.Lo"
  },
  {
    "path": "src/org/yaxim/androidclient/chat/XMPPMucServiceAdapter.java",
    "chars": 1008,
    "preview": "package org.yaxim.androidclient.chat;\n\nimport java.util.List;\n\nimport android.net.Uri;\nimport android.os.RemoteException"
  },
  {
    "path": "src/org/yaxim/androidclient/data/ChatHelper.java",
    "chars": 17117,
    "preview": "package org.yaxim.androidclient.data;\n\nimport org.yaxim.androidclient.YaximApplication;\nimport org.yaxim.androidclient.c"
  },
  {
    "path": "src/org/yaxim/androidclient/data/ChatProvider.java",
    "chars": 12050,
    "preview": "package org.yaxim.androidclient.data;\n\nimport java.util.ArrayList;\n\nimport org.yaxim.androidclient.BuildConfig;\nimport o"
  },
  {
    "path": "src/org/yaxim/androidclient/data/ChatRoomHelper.java",
    "chars": 5387,
    "preview": "package org.yaxim.androidclient.data;\n\nimport org.yaxim.androidclient.data.RosterProvider.RosterConstants;\nimport org.ya"
  },
  {
    "path": "src/org/yaxim/androidclient/data/EntityInfo.java",
    "chars": 4336,
    "preview": "package org.yaxim.androidclient.data;\n\nimport android.text.TextUtils;\n\nimport org.jivesoftware.smack.XMPPException;\nimpo"
  },
  {
    "path": "src/org/yaxim/androidclient/data/EntityList.java",
    "chars": 2780,
    "preview": "package org.yaxim.androidclient.data;\n\nimport android.text.TextUtils;\nimport android.widget.Filter;\nimport android.widge"
  },
  {
    "path": "src/org/yaxim/androidclient/data/RosterProvider.java",
    "chars": 11749,
    "preview": "package org.yaxim.androidclient.data;\n\nimport java.util.ArrayList;\n\nimport org.yaxim.androidclient.BuildConfig;\nimport o"
  },
  {
    "path": "src/org/yaxim/androidclient/data/YaximConfiguration.java",
    "chars": 13651,
    "preview": "package org.yaxim.androidclient.data;\n\nimport org.jxmpp.jid.BareJid;\nimport org.jxmpp.jid.impl.JidCreate;\nimport org.yax"
  },
  {
    "path": "src/org/yaxim/androidclient/dialogs/AddRosterItemDialog.java",
    "chars": 4442,
    "preview": "package org.yaxim.androidclient.dialogs;\r\n\r\nimport org.yaxim.androidclient.XMPPRosterServiceAdapter;\r\nimport org.yaxim.a"
  },
  {
    "path": "src/org/yaxim/androidclient/dialogs/ChangePasswordDialog.java",
    "chars": 6780,
    "preview": "package org.yaxim.androidclient.dialogs;\r\n\r\nimport org.yaxim.androidclient.XMPPRosterServiceAdapter;\r\nimport org.yaxim.a"
  },
  {
    "path": "src/org/yaxim/androidclient/dialogs/ChangeStatusDialog.java",
    "chars": 6277,
    "preview": "package org.yaxim.androidclient.dialogs;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Collecti"
  },
  {
    "path": "src/org/yaxim/androidclient/dialogs/ConfirmDialog.java",
    "chars": 1217,
    "preview": "package org.yaxim.androidclient.dialogs;\r\n\r\nimport android.support.v7.app.AlertDialog;\r\nimport android.content.Context;\r"
  },
  {
    "path": "src/org/yaxim/androidclient/dialogs/EditMUCDialog.java",
    "chars": 5295,
    "preview": "package org.yaxim.androidclient.dialogs;\r\n\r\nimport org.yaxim.androidclient.data.ChatHelper;\r\nimport org.yaxim.androidcli"
  },
  {
    "path": "src/org/yaxim/androidclient/dialogs/FirstStartDialog.java",
    "chars": 9177,
    "preview": "package org.yaxim.androidclient.dialogs;\n\nimport org.jivesoftware.smack.SmackException;\nimport org.jivesoftware.smack.XM"
  },
  {
    "path": "src/org/yaxim/androidclient/dialogs/GroupNameView.java",
    "chars": 2712,
    "preview": "package org.yaxim.androidclient.dialogs;\n\nimport java.util.List;\n\nimport android.content.Context;\nimport android.util.At"
  },
  {
    "path": "src/org/yaxim/androidclient/exceptions/YaximXMPPAdressMalformedException.java",
    "chars": 322,
    "preview": "package org.yaxim.androidclient.exceptions;\n\npublic class YaximXMPPAdressMalformedException extends Exception {\n\t\n\tpriva"
  },
  {
    "path": "src/org/yaxim/androidclient/exceptions/YaximXMPPException.java",
    "chars": 309,
    "preview": "package org.yaxim.androidclient.exceptions;\n\npublic class YaximXMPPException extends Exception {\n\t\n\tprivate static final"
  },
  {
    "path": "src/org/yaxim/androidclient/list/EntityListActivity.java",
    "chars": 4360,
    "preview": "package org.yaxim.androidclient.list;\n\nimport android.content.Intent;\nimport android.net.Uri;\nimport android.os.Bundle;\n"
  },
  {
    "path": "src/org/yaxim/androidclient/list/EntityListAdapter.java",
    "chars": 4539,
    "preview": "package org.yaxim.androidclient.list;\n\nimport android.app.Activity;\nimport android.text.TextUtils;\nimport android.view.L"
  },
  {
    "path": "src/org/yaxim/androidclient/list/EntityListLoader.java",
    "chars": 8043,
    "preview": "package org.yaxim.androidclient.list;\n\nimport android.os.AsyncTask;\nimport android.text.TextUtils;\nimport android.util.L"
  },
  {
    "path": "src/org/yaxim/androidclient/list/EntityViewLoader.java",
    "chars": 3272,
    "preview": "package org.yaxim.androidclient.list;\n\nimport android.app.Activity;\nimport android.os.AsyncTask;\nimport android.view.Lay"
  },
  {
    "path": "src/org/yaxim/androidclient/list/SearchActivity.java",
    "chars": 3404,
    "preview": "package org.yaxim.androidclient.list;\n\nimport android.os.Bundle;\nimport android.view.LayoutInflater;\nimport android.view"
  },
  {
    "path": "src/org/yaxim/androidclient/list/ServiceDiscoveryActivity.java",
    "chars": 1185,
    "preview": "package org.yaxim.androidclient.list;\n\nimport android.os.Bundle;\n\nimport org.yaxim.androidclient.R;\nimport org.yaxim.and"
  },
  {
    "path": "src/org/yaxim/androidclient/packet/InviteRegister.java",
    "chars": 956,
    "preview": "package org.yaxim.androidclient.packet;\n\nimport org.jivesoftware.smack.packet.ExtensionElement;\nimport org.jivesoftware."
  },
  {
    "path": "src/org/yaxim/androidclient/packet/MuclumbusIQ.java",
    "chars": 2840,
    "preview": "package org.yaxim.androidclient.packet;\n\nimport org.jivesoftware.smack.packet.IQ;\nimport org.jivesoftware.smack.provider"
  },
  {
    "path": "src/org/yaxim/androidclient/packet/MuclumbusResult.java",
    "chars": 4512,
    "preview": "/**\n *\n * Copyright 2003-2007 Jive Software.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * yo"
  },
  {
    "path": "src/org/yaxim/androidclient/packet/Oob.java",
    "chars": 2123,
    "preview": "package org.yaxim.androidclient.packet;\n\nimport org.bouncycastle.asn1.cmp.OOBCertHash;\nimport org.jivesoftware.smack.pac"
  },
  {
    "path": "src/org/yaxim/androidclient/packet/PreAuth.java",
    "chars": 1625,
    "preview": "package org.yaxim.androidclient.packet;\r\n\r\nimport org.jivesoftware.smack.packet.ExtensionElement;\r\nimport org.jivesoftwa"
  },
  {
    "path": "src/org/yaxim/androidclient/preferences/AccountPrefs.java",
    "chars": 4353,
    "preview": "package org.yaxim.androidclient.preferences;\n\nimport org.yaxim.androidclient.YaximApplication;\nimport org.yaxim.androidc"
  },
  {
    "path": "src/org/yaxim/androidclient/preferences/AppCompatPreferenceActivity.java",
    "chars": 3766,
    "preview": "/*\n * Copyright (C) 2014 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "src/org/yaxim/androidclient/preferences/EditTextPreferenceWithValue.java",
    "chars": 871,
    "preview": "package org.yaxim.androidclient.preferences;\n\nimport android.content.Context;\nimport android.preference.EditTextPreferen"
  },
  {
    "path": "src/org/yaxim/androidclient/preferences/MainPrefs.java",
    "chars": 2012,
    "preview": "package org.yaxim.androidclient.preferences;\n\nimport android.content.Intent;\nimport android.content.SharedPreferences;\ni"
  },
  {
    "path": "src/org/yaxim/androidclient/preferences/NotificationPrefs.java",
    "chars": 3148,
    "preview": "package org.yaxim.androidclient.preferences;\n\nimport android.app.NotificationManager;\nimport android.content.Intent;\nimp"
  },
  {
    "path": "src/org/yaxim/androidclient/service/GenericService.java",
    "chars": 14702,
    "preview": "package org.yaxim.androidclient.service;\n\nimport java.text.SimpleDateFormat;\nimport java.util.ArrayList;\nimport java.uti"
  },
  {
    "path": "src/org/yaxim/androidclient/service/IXMPPChatService.aidl",
    "chars": 287,
    "preview": "package org.yaxim.androidclient.service;\n\ninterface IXMPPChatService {\n\tvoid sendMessage(String user, String message, St"
  },
  {
    "path": "src/org/yaxim/androidclient/service/IXMPPMucService.aidl",
    "chars": 371,
    "preview": "package org.yaxim.androidclient.service;\n\ninterface IXMPPMucService {\n\tvoid syncDbRooms();\n\tboolean inviteToRoom(String "
  },
  {
    "path": "src/org/yaxim/androidclient/service/IXMPPRosterService.aidl",
    "chars": 978,
    "preview": "package org.yaxim.androidclient.service;\n\n/*\n\tIPC interface for methods on XMPPService called by an activity\n*/\n\nimport "
  },
  {
    "path": "src/org/yaxim/androidclient/service/InvitationTask.java",
    "chars": 4365,
    "preview": "package org.yaxim.androidclient.service;\n\nimport android.app.Activity;\nimport android.os.AsyncTask;\nimport android.text."
  },
  {
    "path": "src/org/yaxim/androidclient/service/MUCController.java",
    "chars": 2470,
    "preview": "package org.yaxim.androidclient.service;\n\nimport android.content.ContentResolver;\nimport android.content.ContentUris;\nim"
  },
  {
    "path": "src/org/yaxim/androidclient/service/Smackable.java",
    "chars": 1579,
    "preview": "package org.yaxim.androidclient.service;\n\nimport java.util.List;\n\nimport org.jivesoftware.smack.XMPPConnection;\nimport o"
  },
  {
    "path": "src/org/yaxim/androidclient/service/SmackableImp.java",
    "chars": 113027,
    "preview": "package org.yaxim.androidclient.service;\n\nimport java.io.File;\nimport java.util.Collection;\nimport java.util.Collections"
  },
  {
    "path": "src/org/yaxim/androidclient/service/XMPPService.java",
    "chars": 22987,
    "preview": "package org.yaxim.androidclient.service;\n\nimport java.util.HashSet;\nimport java.util.concurrent.atomic.AtomicBoolean;\n\ni"
  },
  {
    "path": "src/org/yaxim/androidclient/service/XMPPServiceCallback.java",
    "chars": 560,
    "preview": "package org.yaxim.androidclient.service;\n\nimport org.jivesoftware.smack.packet.Message;\nimport org.yaxim.androidclient.u"
  },
  {
    "path": "src/org/yaxim/androidclient/service/YaximBroadcastReceiver.java",
    "chars": 5155,
    "preview": "package org.yaxim.androidclient.service;\n\nimport org.yaxim.androidclient.util.PreferenceConstants;\n\nimport android.conte"
  },
  {
    "path": "src/org/yaxim/androidclient/util/AdapterConstants.java",
    "chars": 272,
    "preview": "package org.yaxim.androidclient.util;\r\n\r\npublic class AdapterConstants {\r\n\tpublic static final String[] GROUP_NAME = {\"g"
  },
  {
    "path": "src/org/yaxim/androidclient/util/ConnectionState.java",
    "chars": 495,
    "preview": "package org.yaxim.androidclient.util;\n\npublic enum ConnectionState {\n\tOFFLINE,\t\t/// no connection is desired by the user"
  },
  {
    "path": "src/org/yaxim/androidclient/util/ErrorReportManager.java",
    "chars": 1939,
    "preview": "package org.yaxim.androidclient.util;\n\nimport android.content.Context;\nimport android.content.pm.PackageInfo;\nimport and"
  },
  {
    "path": "src/org/yaxim/androidclient/util/FileHelper.java",
    "chars": 9348,
    "preview": "package org.yaxim.androidclient.util;\n\nimport android.annotation.SuppressLint;\nimport android.content.ContentResolver;\ni"
  },
  {
    "path": "src/org/yaxim/androidclient/util/JULHandler.java",
    "chars": 1791,
    "preview": "package org.yaxim.androidclient.util;\n\nimport android.util.Log;\n\nimport java.text.MessageFormat;\nimport java.util.Enumer"
  },
  {
    "path": "src/org/yaxim/androidclient/util/LogConstants.java",
    "chars": 211,
    "preview": "package org.yaxim.androidclient.util;\n\npublic class LogConstants {\n\n\tpublic static final boolean LOG_DEBUG = true;\n\tpubl"
  },
  {
    "path": "src/org/yaxim/androidclient/util/MessageStylingHelper.java",
    "chars": 2318,
    "preview": "package org.yaxim.androidclient.util;\n\nimport android.graphics.Typeface;\nimport android.text.Editable;\nimport android.te"
  },
  {
    "path": "src/org/yaxim/androidclient/util/PreferenceConstants.java",
    "chars": 2001,
    "preview": "package org.yaxim.androidclient.util;\n\npublic class PreferenceConstants {\n\tpublic final static String JID = \"account_jab"
  },
  {
    "path": "src/org/yaxim/androidclient/util/SimpleCursorTreeAdapter.java",
    "chars": 14615,
    "preview": "/*\n * Copyright (C) 2006 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "src/org/yaxim/androidclient/util/StatusMode.java",
    "chars": 1012,
    "preview": "package org.yaxim.androidclient.util;\n\nimport org.yaxim.androidclient.R;\n\npublic enum StatusMode {\n\tunknown(0 /* not a s"
  },
  {
    "path": "src/org/yaxim/androidclient/util/XEP0392Helper.java",
    "chars": 3133,
    "preview": "package org.yaxim.androidclient.util;\n\nimport java.io.UnsupportedEncodingException;\nimport java.security.MessageDigest;\n"
  },
  {
    "path": "src/org/yaxim/androidclient/util/XMPPHelper.java",
    "chars": 10246,
    "preview": "package org.yaxim.androidclient.util;\n\nimport java.util.Arrays;\nimport java.util.List;\nimport java.util.regex.Matcher;\ni"
  },
  {
    "path": "src/org/yaxim/androidclient/widget/AutoCompleteJidEdit.java",
    "chars": 3879,
    "preview": "package org.yaxim.androidclient.widget;\n\nimport org.yaxim.androidclient.R;\n\nimport java.util.Arrays;\nimport java.util.Ar"
  },
  {
    "path": "template/version.xml",
    "chars": 362,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- yaxim version.xml AUTOGENERATED from version.xml.tpl -->\n<resources xmlns:to"
  },
  {
    "path": "yaxim/src/org/yaxim/androidclient/FlavorConfig.java",
    "chars": 230,
    "preview": "package org.yaxim.androidclient;\n\npublic class FlavorConfig {\n\tpublic static int getTheme(String theme) {\n\t\tswitch (them"
  },
  {
    "path": "yaxim.rdf.sh",
    "chars": 339,
    "preview": "export NAME=\"yaxim\"\nexport SHORTDESC=\"yet another XMPP instant messenger\"\nexport DESCRIPTION=\"yaxim is an Android XMPP/J"
  }
]

// ... and 3 more files (download for full content)

About this extraction

This page contains the full source code of the pfleidi/yaxim GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 195 files (1.2 MB), approximately 356.5k tokens, and a symbol index with 951 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!