Commit 37a5ad52 authored by Grigory Fedorov's avatar Grigory Fedorov

Merge branch 'release/1.0.5'

parents 3ef61a50 7081e05d
...@@ -5,12 +5,10 @@ android { ...@@ -5,12 +5,10 @@ android {
buildToolsVersion "22.0.1" buildToolsVersion "22.0.1"
defaultConfig { defaultConfig {
applicationId "com.xabber.androiddev"
minSdkVersion 14 minSdkVersion 14
targetSdkVersion 22 targetSdkVersion 22
versionCode 175 versionCode 177
versionName '1.0.3' versionName '1.0.5'
resValue 'string', 'application_package', applicationId
} }
compileOptions { compileOptions {
...@@ -22,6 +20,20 @@ android { ...@@ -22,6 +20,20 @@ android {
// problems with generated "applicationId" string resource // problems with generated "applicationId" string resource
disable 'MissingTranslation' disable 'MissingTranslation'
} }
productFlavors {
dev {
applicationId "com.xabber.androiddev"
resValue 'string', 'application_package', applicationId
}
beta {
applicationId "com.xabber.android.beta"
resValue 'string', 'application_package', applicationId
}
}
} }
repositories { repositories {
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?><!-- Copyright (c) 2013, Redsolution LTD. All rights reserved.
<!-- Copyright (c) 2013, Redsolution LTD. All rights reserved.
This file is part of Xabber project; you can redistribute it and/or This file is part of Xabber project; you can redistribute it and/or
modify it under the terms of the GNU General Public License, Version 3. modify it under the terms of the GNU General Public License, Version 3.
...@@ -12,7 +11,8 @@ ...@@ -12,7 +11,8 @@
You should have received a copy of the GNU General Public License, You should have received a copy of the GNU General Public License,
along with this program. If not, see http://www.gnu.org/licenses/. along with this program. If not, see http://www.gnu.org/licenses/.
--> -->
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> <resources>
<string name="application_name">@string/development_title</string> <string name="application_title_short">Xabber</string>
<string name="application_title_full">Xabber Beta</string>
<string name="client_name">Xabber</string> <string name="client_name">Xabber</string>
</resources> </resources>
<?xml version="1.0" encoding="utf-8"?><!-- Copyright (c) 2013, Redsolution LTD. All rights reserved.
This file is part of Xabber project; you can redistribute it and/or
modify it under the terms of the GNU General Public License, Version 3.
Xabber 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 http://www.gnu.org/licenses/.
-->
<resources>
<string name="application_title_short">Xabber</string>
<string name="application_title_full">Xabber Dev</string>
<string name="client_name">Xabber</string>
</resources>
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
along with this program. If not, see http://www.gnu.org/licenses/. along with this program. If not, see http://www.gnu.org/licenses/.
--> -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xabber.androiddev"> package="com.xabber.android">
<uses-feature android:name="android.hardware.touchscreen" android:required="false" /> <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<uses-feature android:name="android.hardware.location" android:required="false" /> <uses-feature android:name="android.hardware.location" android:required="false" />
...@@ -34,14 +34,14 @@ ...@@ -34,14 +34,14 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application <application
android:label="@string/application_name"
android:icon="@drawable/ic_launcher"
android:name="com.xabber.android.data.Application" android:name="com.xabber.android.data.Application"
android:theme="@style/Theme" android:allowBackup="true"
android:allowBackup="true"> android:icon="@drawable/ic_launcher"
android:label="@string/application_title_full"
android:theme="@style/Theme">
<activity <activity
android:label="@string/application_name"
android:name="com.xabber.android.ui.ContactList" android:name="com.xabber.android.ui.ContactList"
android:label="@string/application_title_full"
android:launchMode="singleTop" android:launchMode="singleTop"
> >
<intent-filter> <intent-filter>
...@@ -80,8 +80,8 @@ ...@@ -80,8 +80,8 @@
android:name="com.xabber.android.ui.LoadActivity" android:name="com.xabber.android.ui.LoadActivity"
/> />
<activity <activity
android:label="@string/about_viewer"
android:name="com.xabber.android.ui.preferences.AboutViewer" android:name="com.xabber.android.ui.preferences.AboutViewer"
android:label="@string/about_viewer"
android:parentActivityName="com.xabber.android.ui.preferences.PreferenceEditor" android:parentActivityName="com.xabber.android.ui.preferences.PreferenceEditor"
> >
...@@ -91,8 +91,8 @@ ...@@ -91,8 +91,8 @@
android:value="com.xabber.android.ui.preferences.PreferenceEditor" /> android:value="com.xabber.android.ui.preferences.PreferenceEditor" />
</activity> </activity>
<activity <activity
android:label="@string/preference_accounts"
android:name="com.xabber.android.ui.preferences.AccountList" android:name="com.xabber.android.ui.preferences.AccountList"
android:label="@string/preference_accounts"
android:parentActivityName="com.xabber.android.ui.preferences.PreferenceEditor" android:parentActivityName="com.xabber.android.ui.preferences.PreferenceEditor"
> >
<!-- Parent activity meta-data to support 4.0 and lower --> <!-- Parent activity meta-data to support 4.0 and lower -->
...@@ -101,8 +101,8 @@ ...@@ -101,8 +101,8 @@
android:value="com.xabber.android.ui.preferences.PreferenceEditor" /> android:value="com.xabber.android.ui.preferences.PreferenceEditor" />
</activity> </activity>
<activity <activity
android:label="@string/account_editor"
android:name="com.xabber.android.ui.preferences.AccountEditor" android:name="com.xabber.android.ui.preferences.AccountEditor"
android:label="@string/account_editor"
android:parentActivityName="com.xabber.android.ui.preferences.AccountList" android:parentActivityName="com.xabber.android.ui.preferences.AccountList"
> >
<!-- Parent activity meta-data to support 4.0 and lower --> <!-- Parent activity meta-data to support 4.0 and lower -->
...@@ -111,8 +111,8 @@ ...@@ -111,8 +111,8 @@
android:value="com.xabber.android.ui.preferences.AccountList" /> android:value="com.xabber.android.ui.preferences.AccountList" />
</activity> </activity>
<activity <activity
android:label="@string/occupant_list"
android:name="com.xabber.android.ui.OccupantList" android:name="com.xabber.android.ui.OccupantList"
android:label="@string/occupant_list"
android:parentActivityName="com.xabber.android.ui.ChatViewer" android:parentActivityName="com.xabber.android.ui.ChatViewer"
> >
<!-- Parent activity meta-data to support 4.0 and lower --> <!-- Parent activity meta-data to support 4.0 and lower -->
...@@ -122,11 +122,11 @@ ...@@ -122,11 +122,11 @@
</activity> </activity>
<activity <activity
android:label="@string/chat_viewer"
android:name="com.xabber.android.ui.ChatViewer" android:name="com.xabber.android.ui.ChatViewer"
android:windowSoftInputMode="adjustResize" android:label="@string/chat_viewer"
android:launchMode="singleTop" android:launchMode="singleTop"
android:parentActivityName="com.xabber.android.ui.ContactList" android:parentActivityName="com.xabber.android.ui.ContactList"
android:windowSoftInputMode="adjustResize"
> >
<intent-filter> <intent-filter>
...@@ -140,8 +140,8 @@ ...@@ -140,8 +140,8 @@
</activity> </activity>
<activity <activity
android:label="@string/contact_editor"
android:name="com.xabber.android.ui.GroupEditor" android:name="com.xabber.android.ui.GroupEditor"
android:label="@string/contact_editor"
android:parentActivityName="com.xabber.android.ui.ContactViewer" android:parentActivityName="com.xabber.android.ui.ContactViewer"
> >
<!-- Parent activity meta-data to support 4.0 and lower --> <!-- Parent activity meta-data to support 4.0 and lower -->
...@@ -150,8 +150,8 @@ ...@@ -150,8 +150,8 @@
android:value="com.xabber.android.ui.ContactViewer" /> android:value="com.xabber.android.ui.ContactViewer" />
</activity> </activity>
<activity <activity
android:label="@string/contact_add"
android:name="com.xabber.android.ui.ContactAdd" android:name="com.xabber.android.ui.ContactAdd"
android:label="@string/contact_add"
android:parentActivityName="com.xabber.android.ui.preferences.AccountList" android:parentActivityName="com.xabber.android.ui.preferences.AccountList"
> >
<!-- Parent activity meta-data to support 4.0 and lower --> <!-- Parent activity meta-data to support 4.0 and lower -->
...@@ -160,8 +160,8 @@ ...@@ -160,8 +160,8 @@
android:value="com.xabber.android.ui.preferences.AccountList" /> android:value="com.xabber.android.ui.preferences.AccountList" />
</activity> </activity>
<activity <activity
android:label="@string/account_add"
android:name="com.xabber.android.ui.AccountAdd" android:name="com.xabber.android.ui.AccountAdd"
android:label="@string/account_add"
android:parentActivityName="com.xabber.android.ui.preferences.AccountList" android:parentActivityName="com.xabber.android.ui.preferences.AccountList"
> >
<!-- Parent activity meta-data to support 4.0 and lower --> <!-- Parent activity meta-data to support 4.0 and lower -->
...@@ -170,12 +170,12 @@ ...@@ -170,12 +170,12 @@
android:value="com.xabber.android.ui.preferences.AccountList" /> android:value="com.xabber.android.ui.preferences.AccountList" />
</activity> </activity>
<activity <activity
android:label="@string/account_oauth"
android:name="com.xabber.android.ui.OAuthActivity" android:name="com.xabber.android.ui.OAuthActivity"
android:label="@string/account_oauth"
/> />
<activity <activity
android:label="@string/muc_add"
android:name="com.xabber.android.ui.MUCEditor" android:name="com.xabber.android.ui.MUCEditor"
android:label="@string/muc_add"
android:parentActivityName="com.xabber.android.ui.ContactList" android:parentActivityName="com.xabber.android.ui.ContactList"
> >
<!-- Parent activity meta-data to support 4.0 and lower --> <!-- Parent activity meta-data to support 4.0 and lower -->
...@@ -184,8 +184,8 @@ ...@@ -184,8 +184,8 @@
android:value="com.xabber.android.ui.ContactList" /> android:value="com.xabber.android.ui.ContactList" />
</activity> </activity>
<activity <activity
android:label="@string/status_editor"
android:name="com.xabber.android.ui.StatusEditor" android:name="com.xabber.android.ui.StatusEditor"
android:label="@string/status_editor"
android:parentActivityName="com.xabber.android.ui.ContactList" android:parentActivityName="com.xabber.android.ui.ContactList"
> >
<!-- Parent activity meta-data to support 4.0 and lower --> <!-- Parent activity meta-data to support 4.0 and lower -->
...@@ -194,8 +194,8 @@ ...@@ -194,8 +194,8 @@
android:value="com.xabber.android.ui.ContactList" /> android:value="com.xabber.android.ui.ContactList" />
</activity> </activity>
<activity <activity
android:label="@string/preference_editor"
android:name="com.xabber.android.ui.preferences.PreferenceEditor" android:name="com.xabber.android.ui.preferences.PreferenceEditor"
android:label="@string/preference_editor"
android:parentActivityName="com.xabber.android.ui.ContactList" android:parentActivityName="com.xabber.android.ui.ContactList"
> >
...@@ -206,8 +206,8 @@ ...@@ -206,8 +206,8 @@
</activity> </activity>
<activity <activity
android:label="@string/chat_settings"
android:name="com.xabber.android.ui.preferences.ChatEditor" android:name="com.xabber.android.ui.preferences.ChatEditor"
android:label="@string/chat_settings"
android:parentActivityName="com.xabber.android.ui.ChatViewer" android:parentActivityName="com.xabber.android.ui.ChatViewer"
> >
...@@ -218,8 +218,8 @@ ...@@ -218,8 +218,8 @@
</activity> </activity>
<activity <activity
android:label="@string/contact_viewer"
android:name="com.xabber.android.ui.ContactViewer" android:name="com.xabber.android.ui.ContactViewer"
android:label="@string/contact_viewer"
android:parentActivityName="com.xabber.android.ui.ChatViewer" android:parentActivityName="com.xabber.android.ui.ChatViewer"
> >
<!-- Parent activity meta-data to support 4.0 and lower --> <!-- Parent activity meta-data to support 4.0 and lower -->
...@@ -237,8 +237,8 @@ ...@@ -237,8 +237,8 @@
</activity> </activity>
<activity <activity
android:label="@string/contact_viewer"
android:name="com.xabber.android.ui.ContactEditor" android:name="com.xabber.android.ui.ContactEditor"
android:label="@string/contact_viewer"
android:parentActivityName="com.xabber.android.ui.ChatViewer" android:parentActivityName="com.xabber.android.ui.ChatViewer"
> >
<!-- Parent activity meta-data to support 4.0 and lower --> <!-- Parent activity meta-data to support 4.0 and lower -->
...@@ -322,13 +322,13 @@ ...@@ -322,13 +322,13 @@
android:name="com.xabber.android.ui.ReconnectionActivity" android:name="com.xabber.android.ui.ReconnectionActivity"
/> />
<activity <activity
android:label="ClearNotifications"
android:name="com.xabber.android.ui.ClearNotifications" android:name="com.xabber.android.ui.ClearNotifications"
android:taskAffinity="" android:excludeFromRecents="true"
android:label="ClearNotifications"
android:launchMode="singleInstance" android:launchMode="singleInstance"
android:noHistory="true" android:noHistory="true"
android:stateNotNeeded="true" android:stateNotNeeded="true"
android:excludeFromRecents="true" android:taskAffinity=""
/> />
<activity <activity
......
...@@ -20,9 +20,9 @@ import android.content.Intent; ...@@ -20,9 +20,9 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.widget.Toast; import android.widget.Toast;
import com.xabber.android.R;
import com.xabber.android.ui.ContactList; import com.xabber.android.ui.ContactList;
import com.xabber.android.ui.LoadActivity; import com.xabber.android.ui.LoadActivity;
import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
...@@ -39,40 +39,31 @@ public class ActivityManager implements OnUnloadListener { ...@@ -39,40 +39,31 @@ public class ActivityManager implements OnUnloadListener {
private static final String EXTRA_TASK_INDEX = "com.xabber.android.data.ActivityManager.EXTRA_TASK_INDEX"; private static final String EXTRA_TASK_INDEX = "com.xabber.android.data.ActivityManager.EXTRA_TASK_INDEX";
private static final boolean LOG = true; private static final boolean LOG = true;
private final static ActivityManager instance;
private final Application application; static {
instance = new ActivityManager();
Application.getInstance().addManager(instance);
}
private final Application application;
/** /**
* List of launched activities. * List of launched activities.
*/ */
private final ArrayList<Activity> activities; private final ArrayList<Activity> activities;
/**
* Next index of task.
*/
private int nextTaskIndex;
/** /**
* Activity with index of it task. * Activity with index of it task.
*/ */
private final WeakHashMap<Activity, Integer> taskIndexes; private final WeakHashMap<Activity, Integer> taskIndexes;
/**
* Next index of task.
*/
private int nextTaskIndex;
/** /**
* Listener for errors. * Listener for errors.
*/ */
private OnErrorListener onErrorListener; private OnErrorListener onErrorListener;
private final static ActivityManager instance;
static {
instance = new ActivityManager();
Application.getInstance().addManager(instance);
}
public static ActivityManager getInstance() {
return instance;
}
private ActivityManager() { private ActivityManager() {
this.application = Application.getInstance(); this.application = Application.getInstance();
activities = new ArrayList<Activity>(); activities = new ArrayList<Activity>();
...@@ -80,6 +71,10 @@ public class ActivityManager implements OnUnloadListener { ...@@ -80,6 +71,10 @@ public class ActivityManager implements OnUnloadListener {
taskIndexes = new WeakHashMap<Activity, Integer>(); taskIndexes = new WeakHashMap<Activity, Integer>();
} }
public static ActivityManager getInstance() {
return instance;
}
/** /**
* Removes finished activities from stask. * Removes finished activities from stask.
*/ */
......
...@@ -14,6 +14,14 @@ ...@@ -14,6 +14,14 @@
*/ */
package com.xabber.android.data; package com.xabber.android.data;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.content.res.TypedArray;
import android.os.Handler;
import com.xabber.android.R;
import com.xabber.android.service.XabberService;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
...@@ -26,14 +34,6 @@ import java.util.concurrent.Executors; ...@@ -26,14 +34,6 @@ import java.util.concurrent.Executors;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadFactory;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.content.res.TypedArray;
import android.os.Handler;
import com.xabber.android.service.XabberService;
import com.xabber.androiddev.R;
/** /**
* Base entry point. * Base entry point.
* *
...@@ -42,64 +42,42 @@ import com.xabber.androiddev.R; ...@@ -42,64 +42,42 @@ import com.xabber.androiddev.R;
public class Application extends android.app.Application { public class Application extends android.app.Application {
private static Application instance; private static Application instance;
public static Application getInstance() {
if (instance == null)
throw new IllegalStateException();
return instance;
}
private final ArrayList<Object> registeredManagers; private final ArrayList<Object> registeredManagers;
/**
* Unmodifiable collections of managers that implement some common
* interface.
*/
private Map<Class<? extends BaseManagerInterface>, Collection<? extends BaseManagerInterface>> managerInterfaces;
private Map<Class<? extends BaseUIListener>, Collection<? extends BaseUIListener>> uiListeners;
/** /**
* Thread to execute tasks in background.. * Thread to execute tasks in background..
*/ */
private final ExecutorService backgroundExecutor; private final ExecutorService backgroundExecutor;
/** /**
* Handler to execute runnable in UI thread. * Handler to execute runnable in UI thread.
*/ */
private final Handler handler; private final Handler handler;
/**
* Unmodifiable collections of managers that implement some common
* interface.
*/
private Map<Class<? extends BaseManagerInterface>, Collection<? extends BaseManagerInterface>> managerInterfaces;
private Map<Class<? extends BaseUIListener>, Collection<? extends BaseUIListener>> uiListeners;
/** /**
* Where data load was requested. * Where data load was requested.
*/ */
private boolean serviceStarted; private boolean serviceStarted;
/** /**
* Whether application was initialized. * Whether application was initialized.
*/ */
private boolean initialized; private boolean initialized;
/** /**
* Whether user was notified about some action in contact list activity * Whether user was notified about some action in contact list activity
* after application initialization. * after application initialization.
*/ */
private boolean notified; private boolean notified;
/** /**
* Whether application is to be closed. * Whether application is to be closed.
*/ */
private boolean closing; private boolean closing;
/** /**
* Whether {@link #onServiceDestroy()} has been called. * Whether {@link #onServiceDestroy()} has been called.
*/ */
private boolean closed; private boolean closed;
/**
* Future for loading process.
*/
private Future<Void> loadFuture;
private final Runnable timerRunnable = new Runnable() { private final Runnable timerRunnable = new Runnable() {
@Override @Override
...@@ -111,6 +89,10 @@ public class Application extends android.app.Application { ...@@ -111,6 +89,10 @@ public class Application extends android.app.Application {
} }
}; };
/**
* Future for loading process.
*/
private Future<Void> loadFuture;
public Application() { public Application() {
instance = this; instance = this;
...@@ -137,6 +119,12 @@ public class Application extends android.app.Application { ...@@ -137,6 +119,12 @@ public class Application extends android.app.Application {
}); });
} }
public static Application getInstance() {
if (instance == null)
throw new IllegalStateException();
return instance;
}
/** /**
* Whether application is initialized. * Whether application is initialized.
*/ */
......
...@@ -23,6 +23,7 @@ import android.preference.PreferenceManager; ...@@ -23,6 +23,7 @@ import android.preference.PreferenceManager;
import android.provider.Settings; import android.provider.Settings;
import android.text.TextUtils; import android.text.TextUtils;
import com.xabber.android.R;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.account.StatusMode; import com.xabber.android.data.account.StatusMode;
import com.xabber.android.data.connection.NetworkManager; import com.xabber.android.data.connection.NetworkManager;
...@@ -34,7 +35,6 @@ import com.xabber.android.data.roster.AbstractContact; ...@@ -34,7 +35,6 @@ import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.service.XabberService; import com.xabber.android.service.XabberService;
import com.xabber.android.ui.adapter.ComparatorByName; import com.xabber.android.ui.adapter.ComparatorByName;
import com.xabber.android.ui.adapter.ComparatorByStatus; import com.xabber.android.ui.adapter.ComparatorByStatus;
import com.xabber.androiddev.R;
import com.xabber.xmpp.carbon.CarbonManager; import com.xabber.xmpp.carbon.CarbonManager;
import java.util.Comparator; import java.util.Comparator;
...@@ -47,145 +47,6 @@ import java.util.Comparator; ...@@ -47,145 +47,6 @@ import java.util.Comparator;
public class SettingsManager implements OnInitializedListener, public class SettingsManager implements OnInitializedListener,
OnMigrationListener, OnSharedPreferenceChangeListener { OnMigrationListener, OnSharedPreferenceChangeListener {
public static enum ChatsHistory {
/**
* Don't store chat messages.
*/
none,
/**
* Store only unread messages.
*/
unread,
/**
* Store all messages.
*/
all;
}
public static enum InterfaceTheme {
/**
* All windows will be dark.
*/
dark,
/**
* All windows will be light.
*/
light,
/**
* Chat will be light, other windows will be dark.
*/
normal;
}
public static enum EventsMessage {
/**
* Never notify.
*/
none,
/**
* Notify in chat only.
*/
chat,
/**
* Notify in chat and muc.
*/
chatAndMuc;
}
;
public enum ChatsShowStatusChange {
/**
* Always show status change.
*/
always,
/**
* Show status change only in MUC.
*/
muc,
/**
* Never show status change.
*/
never;
}
public enum ChatsHideKeyboard {
/**
* Always hide keyboard.
*/
always,
/**
* Hide keyboard only in landscape mode.
*/
landscape,
/**
* Never hide keyboard.
*/
never,
}
public enum ChatsDivide {
/**
* Always divide message header from text.
*/
always,
/**
* Only in portial mode.
*/
portial,
/**
* Never.
*/
never;
}
public enum SecurityOtrMode {
/**
* OTR is disabled.
*/
disabled,
/**
* Manually send request and confirm requests.
*/
manual,
/**
* Automatically try to use OTR.
*/
auto,
/**
* Require to use OTR.
*/
required;
}
private static final SettingsManager instance; private static final SettingsManager instance;
static { static {
...@@ -193,17 +54,12 @@ public class SettingsManager implements OnInitializedListener, ...@@ -193,17 +54,12 @@ public class SettingsManager implements OnInitializedListener,
Application.getInstance().addManager(instance); Application.getInstance().addManager(instance);
} }
public static SettingsManager getInstance() {
return instance;
}
private SettingsManager() { private SettingsManager() {
getSharedPreferences().registerOnSharedPreferenceChangeListener(this); getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
} }
@Override public static SettingsManager getInstance() {
public void onInitialized() { return instance;
incrementBootCount();
} }
private static SharedPreferences getSharedPreferences() { private static SharedPreferences getSharedPreferences() {
...@@ -699,6 +555,11 @@ public class SettingsManager implements OnInitializedListener, ...@@ -699,6 +555,11 @@ public class SettingsManager implements OnInitializedListener,
setString(R.string.status_text_key, statusText); setString(R.string.status_text_key, statusText);
} }
@Override
public void onInitialized() {
incrementBootCount();
}
@Override @Override
public void onMigrate(int toVersion) { public void onMigrate(int toVersion) {
switch (toVersion) { switch (toVersion) {
...@@ -771,4 +632,141 @@ public class SettingsManager implements OnInitializedListener, ...@@ -771,4 +632,141 @@ public class SettingsManager implements OnInitializedListener,
} }
} }
public enum ChatsHistory {
/**
* Don't store chat messages.
*/
none,
/**
* Store only unread messages.
*/
unread,
/**
* Store all messages.
*/
all
}
public enum InterfaceTheme {
/**
* All windows will be dark.
*/
dark,
/**
* All windows will be light.
*/
light,
/**
* Chat will be light, other windows will be dark.
*/
normal
}
public enum EventsMessage {
/**
* Never notify.
*/
none,
/**
* Notify in chat only.
*/
chat,
/**
* Notify in chat and muc.
*/
chatAndMuc
}
public enum ChatsShowStatusChange {
/**
* Always show status change.
*/
always,
/**
* Show status change only in MUC.
*/
muc,
/**
* Never show status change.
*/
never
}
public enum ChatsHideKeyboard {
/**
* Always hide keyboard.
*/
always,
/**
* Hide keyboard only in landscape mode.
*/
landscape,
/**
* Never hide keyboard.
*/
never,
}
public enum ChatsDivide {
/**
* Always divide message header from text.
*/
always,
/**
* Only in portial mode.
*/
portial,
/**
* Never.
*/
never
}
public enum SecurityOtrMode {
/**
* OTR is disabled.
*/
disabled,
/**
* Manually send request and confirm requests.
*/
manual,
/**
* Automatically try to use OTR.
*/
auto,
/**
* Require to use OTR.
*/
required
}
} }
\ No newline at end of file
package com.xabber.android.data; package com.xabber.android.data;
import com.xabber.androiddev.R; import com.xabber.android.R;
import com.xabber.xmpp.vcard.AddressProperty; import com.xabber.xmpp.vcard.AddressProperty;
import com.xabber.xmpp.vcard.AddressType; import com.xabber.xmpp.vcard.AddressType;
import com.xabber.xmpp.vcard.EmailType; import com.xabber.xmpp.vcard.EmailType;
......
...@@ -16,11 +16,11 @@ package com.xabber.android.data.account; ...@@ -16,11 +16,11 @@ package com.xabber.android.data.account;
import android.content.Intent; import android.content.Intent;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.entity.AccountRelated; import com.xabber.android.data.entity.AccountRelated;
import com.xabber.android.data.notification.AccountNotificationItem; import com.xabber.android.data.notification.AccountNotificationItem;
import com.xabber.android.ui.preferences.AccountEditor; import com.xabber.android.ui.preferences.AccountEditor;
import com.xabber.androiddev.R;
public class AccountAuthorizationError extends AccountRelated implements public class AccountAuthorizationError extends AccountRelated implements
AccountNotificationItem { AccountNotificationItem {
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
*/ */
package com.xabber.android.data.account; package com.xabber.android.data.account;
import com.xabber.android.R;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
import com.xabber.android.data.connection.ConnectionItem; import com.xabber.android.data.connection.ConnectionItem;
...@@ -21,7 +22,6 @@ import com.xabber.android.data.connection.ConnectionState; ...@@ -21,7 +22,6 @@ import com.xabber.android.data.connection.ConnectionState;
import com.xabber.android.data.connection.ConnectionThread; import com.xabber.android.data.connection.ConnectionThread;
import com.xabber.android.data.connection.ProxyType; import com.xabber.android.data.connection.ProxyType;
import com.xabber.android.data.connection.TLSMode; import com.xabber.android.data.connection.TLSMode;
import com.xabber.androiddev.R;
import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.Presence.Type; import org.jivesoftware.smack.packet.Presence.Type;
...@@ -37,20 +37,17 @@ import java.util.Date; ...@@ -37,20 +37,17 @@ import java.util.Date;
public class AccountItem extends ConnectionItem { public class AccountItem extends ConnectionItem {
public static final String UNDEFINED_PASSWORD = "com.xabber.android.data.core.AccountItem.UNDEFINED_PASSWORD"; public static final String UNDEFINED_PASSWORD = "com.xabber.android.data.core.AccountItem.UNDEFINED_PASSWORD";
/**
* Full jid calculated according to {@link #userName}, {@link #serverName},
* {@link #resource}.
*/
private final String account;
/** /**
* Id in database. * Id in database.
* <p/> * <p/>
* MUST BE USED FROM BACKGROUND THREAD ONLY! * MUST BE USED FROM BACKGROUND THREAD ONLY!
*/ */
private Long id; private Long id;
/**
* Full jid calculated according to {@link #userName}, {@link #serverName},
* {@link #resource}.
*/
private final String account;
private int colorIndex; private int colorIndex;
/** /**
...@@ -131,6 +128,14 @@ public class AccountItem extends ConnectionItem { ...@@ -131,6 +128,14 @@ public class AccountItem extends ConnectionItem {
passwordRequested = false; passwordRequested = false;
} }
/**
* @param priority
* @return Valid priority value between -128 and 128.
*/
static private int getValidPriority(int priority) {
return Math.min(128, Math.max(-128, priority));
}
/** /**
* @return ID in database. * @return ID in database.
*/ */
...@@ -163,6 +168,10 @@ public class AccountItem extends ConnectionItem { ...@@ -163,6 +168,10 @@ public class AccountItem extends ConnectionItem {
return colorIndex; return colorIndex;
} }
public void setColorIndex(int colorIndex) {
this.colorIndex = colorIndex;
}
/** /**
* @return Whether roster contacts can be synchronized with system contact * @return Whether roster contacts can be synchronized with system contact
* list. * list.
...@@ -427,16 +436,4 @@ public class AccountItem extends ConnectionItem { ...@@ -427,16 +436,4 @@ public class AccountItem extends ConnectionItem {
public String toString() { public String toString() {
return super.toString() + ":" + getAccount(); return super.toString() + ":" + getAccount();
} }
/**
* @param priority
* @return Valid priority value between -128 and 128.
*/
static private int getValidPriority(int priority) {
return Math.min(128, Math.max(-128, priority));
}
public void setColorIndex(int colorIndex) {
this.colorIndex = colorIndex;
}
} }
...@@ -18,6 +18,7 @@ import android.content.res.TypedArray; ...@@ -18,6 +18,7 @@ import android.content.res.TypedArray;
import android.database.Cursor; import android.database.Cursor;
import android.os.Build; import android.os.Build;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.OnLoadListener; import com.xabber.android.data.OnLoadListener;
...@@ -32,7 +33,6 @@ import com.xabber.android.data.notification.BaseAccountNotificationProvider; ...@@ -32,7 +33,6 @@ import com.xabber.android.data.notification.BaseAccountNotificationProvider;
import com.xabber.android.data.notification.NotificationManager; import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.data.roster.PresenceManager; import com.xabber.android.data.roster.PresenceManager;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.StringUtils;
...@@ -60,58 +60,47 @@ import java.util.Map; ...@@ -60,58 +60,47 @@ import java.util.Map;
*/ */
public class AccountManager implements OnLoadListener, OnWipeListener { public class AccountManager implements OnLoadListener, OnWipeListener {
private final static AccountManager instance;
static {
instance = new AccountManager();
Application.getInstance().addManager(instance);
}
/** /**
* List of account presets. * List of account presets.
*/ */
private final List<AccountType> accountTypes; private final List<AccountType> accountTypes;
/** /**
* List of saved statuses. * List of saved statuses.
*/ */
private final Collection<SavedStatus> savedStatuses; private final Collection<SavedStatus> savedStatuses;
/** /**
* Number of different account colors. * Number of different account colors.
*/ */
private final int colors; private final int colors;
/** /**
* List of accounts. * List of accounts.
*/ */
private final Map<String, AccountItem> accountItems; private final Map<String, AccountItem> accountItems;
/** /**
* List of enabled account. * List of enabled account.
*/ */
private final Collection<String> enabledAccounts; private final Collection<String> enabledAccounts;
private final BaseAccountNotificationProvider<AccountAuthorizationError> authorizationErrorProvider;
private final BaseAccountNotificationProvider<PasswordRequest> passwordRequestProvider;
private final Application application;
/** /**
* Whether away status mode is enabled. * Whether away status mode is enabled.
*/ */
private boolean away; private boolean away;
/** /**
* Whether extended away mode is enabled. * Whether extended away mode is enabled.
*/ */
private boolean xa; private boolean xa;
private final BaseAccountNotificationProvider<AccountAuthorizationError> authorizationErrorProvider;
private final BaseAccountNotificationProvider<PasswordRequest> passwordRequestProvider;
private final Application application;
private final static AccountManager instance;
static {
instance = new AccountManager();
Application.getInstance().addManager(instance);
}
public static AccountManager getInstance() {
return instance;
}
private AccountManager() { private AccountManager() {
this.application = Application.getInstance(); this.application = Application.getInstance();
accountItems = new HashMap<>(); accountItems = new HashMap<>();
...@@ -148,6 +137,10 @@ public class AccountManager implements OnLoadListener, OnWipeListener { ...@@ -148,6 +137,10 @@ public class AccountManager implements OnLoadListener, OnWipeListener {
xa = false; xa = false;
} }
public static AccountManager getInstance() {
return instance;
}
@Override @Override
public void onLoad() { public void onLoad() {
final Collection<SavedStatus> savedStatuses = new ArrayList<>(); final Collection<SavedStatus> savedStatuses = new ArrayList<>();
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
*/ */
package com.xabber.android.data.account; package com.xabber.android.data.account;
import com.xabber.androiddev.R; import com.xabber.android.R;
/** /**
* Supported account protocols. * Supported account protocols.
......
...@@ -21,13 +21,13 @@ import android.database.sqlite.SQLiteDatabase; ...@@ -21,13 +21,13 @@ import android.database.sqlite.SQLiteDatabase;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.provider.BaseColumns; import android.provider.BaseColumns;
import com.xabber.android.R;
import com.xabber.android.data.AbstractTable; import com.xabber.android.data.AbstractTable;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.DatabaseManager; import com.xabber.android.data.DatabaseManager;
import com.xabber.android.data.connection.ConnectionSettings; import com.xabber.android.data.connection.ConnectionSettings;
import com.xabber.android.data.connection.ProxyType; import com.xabber.android.data.connection.ProxyType;
import com.xabber.android.data.connection.TLSMode; import com.xabber.android.data.connection.TLSMode;
import com.xabber.androiddev.R;
import java.security.KeyFactory; import java.security.KeyFactory;
import java.security.KeyPair; import java.security.KeyPair;
...@@ -46,39 +46,6 @@ import java.util.Date; ...@@ -46,39 +46,6 @@ import java.util.Date;
*/ */
class AccountTable extends AbstractTable { class AccountTable extends AbstractTable {
private static final class Fields implements BaseColumns {
private Fields() {
}
public static final String ENABLED = "enabled";
public static final String SERVER_NAME = "server_name";
public static final String USER_NAME = "user_name";
public static final String PASSWORD = "password";
public static final String RESOURCE = "resource";
public static final String PRIORITY = "priority";
public static final String STATUS_MODE = "status_mode";
public static final String STATUS_TEXT = "status_text";
public static final String CUSTOM = "custom";
public static final String HOST = "host";
public static final String PORT = "port";
public static final String SASL_ENABLED = "sasl_enabled";
public static final String TLS_MODE = "required_tls";
public static final String COMPRESSION = "compression";
public static final String COLOR_INDEX = "color_index";
public static final String PROTOCOL = "protocol";
public static final String SYNCABLE = "syncable";
public static final String STORE_PASSWORD = "store_password";
public static final String PUBLIC_KEY = "public_key";
public static final String PRIVATE_KEY = "private_key";
public static final String LAST_SYNC = "last_sync";
public static final String ARCHIVE_MODE = "archive_mode";
public static final String PROXY_TYPE = "proxy_type";
public static final String PROXY_HOST = "proxy_host";
public static final String PROXY_PORT = "proxy_port";
public static final String PROXY_USER = "proxy_user";
public static final String PROXY_PASSWORD = "proxy_password";
}
private static final String NAME = "accounts"; private static final String NAME = "accounts";
private static final String[] PROJECTION = new String[]{Fields._ID, private static final String[] PROJECTION = new String[]{Fields._ID,
Fields.PROTOCOL, Fields.CUSTOM, Fields.HOST, Fields.PORT, Fields.PROTOCOL, Fields.CUSTOM, Fields.HOST, Fields.PORT,
...@@ -90,9 +57,6 @@ class AccountTable extends AbstractTable { ...@@ -90,9 +57,6 @@ class AccountTable extends AbstractTable {
Fields.PRIVATE_KEY, Fields.LAST_SYNC, Fields.ARCHIVE_MODE, Fields.PRIVATE_KEY, Fields.LAST_SYNC, Fields.ARCHIVE_MODE,
Fields.PROXY_TYPE, Fields.PROXY_HOST, Fields.PROXY_PORT, Fields.PROXY_TYPE, Fields.PROXY_HOST, Fields.PROXY_PORT,
Fields.PROXY_USER, Fields.PROXY_PASSWORD}; Fields.PROXY_USER, Fields.PROXY_PASSWORD};
private final DatabaseManager databaseManager;
private final static AccountTable instance; private final static AccountTable instance;
static { static {
...@@ -100,12 +64,150 @@ class AccountTable extends AbstractTable { ...@@ -100,12 +64,150 @@ class AccountTable extends AbstractTable {
DatabaseManager.getInstance().addTable(instance); DatabaseManager.getInstance().addTable(instance);
} }
private final DatabaseManager databaseManager;
private AccountTable(DatabaseManager databaseManager) {
this.databaseManager = databaseManager;
}
public static AccountTable getInstance() { public static AccountTable getInstance() {
return instance; return instance;
} }
private AccountTable(DatabaseManager databaseManager) { static long getId(Cursor cursor) {
this.databaseManager = databaseManager; return cursor.getLong(cursor.getColumnIndex(Fields._ID));
}
static AccountProtocol getProtocol(Cursor cursor) {
return AccountProtocol.valueOf(cursor.getString(cursor.getColumnIndex(Fields.PROTOCOL)));
}
static String getHost(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Fields.HOST));
}
static boolean isCustom(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.CUSTOM)) != 0;
}
static int getPort(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.PORT));
}
static String getServerName(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Fields.SERVER_NAME));
}
static String getUserName(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Fields.USER_NAME));
}
static String getPassword(Cursor cursor) {
if (!isStorePassword(cursor)) {
return AccountItem.UNDEFINED_PASSWORD;
}
return cursor.getString(cursor.getColumnIndex(Fields.PASSWORD));
}
static String getResource(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Fields.RESOURCE));
}
static int getColorIndex(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.COLOR_INDEX));
}
static int getPriority(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.PRIORITY));
}
static StatusMode getStatusMode(Cursor cursor) {
int statusModeIndex = cursor.getInt(cursor.getColumnIndex(Fields.STATUS_MODE));
return StatusMode.values()[statusModeIndex];
}
static String getStatusText(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Fields.STATUS_TEXT));
}
static boolean isEnabled(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.ENABLED)) != 0;
}
static boolean isSaslEnabled(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.SASL_ENABLED)) != 0;
}
public static TLSMode getTLSMode(Cursor cursor) {
int tlsModeIndex = cursor.getInt(cursor.getColumnIndex(Fields.TLS_MODE));
return TLSMode.values()[tlsModeIndex];
}
static boolean isCompression(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.COMPRESSION)) != 0;
}
static boolean isSyncable(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.SYNCABLE)) != 0;
}
static boolean isStorePassword(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.STORE_PASSWORD)) != 0;
}
static Date getLastSync(Cursor cursor) {
if (cursor.isNull(cursor.getColumnIndex(Fields.LAST_SYNC))) {
return null;
} else {
return new Date(cursor.getLong(cursor.getColumnIndex(Fields.LAST_SYNC)));
}
}
static ArchiveMode getArchiveMode(Cursor cursor) {
int index = cursor.getInt(cursor.getColumnIndex(Fields.ARCHIVE_MODE));
return ArchiveMode.values()[index];
}
static ProxyType getProxyType(Cursor cursor) {
int index = cursor.getInt(cursor.getColumnIndex(Fields.PROXY_TYPE));
return ProxyType.values()[index];
}
static String getProxyHost(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Fields.PROXY_HOST));
}
static int getProxyPort(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.PROXY_PORT));
}
static String getProxyUser(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Fields.PROXY_USER));
}
static String getProxyPassword(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Fields.PROXY_PASSWORD));
}
static KeyPair getKeyPair(Cursor cursor) {
byte[] publicKeyBytes = cursor.getBlob(cursor.getColumnIndex(Fields.PUBLIC_KEY));
byte[] privateKeyBytes = cursor.getBlob(cursor.getColumnIndex(Fields.PRIVATE_KEY));
if (privateKeyBytes == null || publicKeyBytes == null) {
return null;
}
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyBytes);
PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
PublicKey publicKey;
PrivateKey privateKey;
KeyFactory keyFactory;
try {
keyFactory = KeyFactory.getInstance("DSA");
publicKey = keyFactory.generatePublic(publicKeySpec);
privateKey = keyFactory.generatePrivate(privateKeySpec);
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
throw new RuntimeException(e);
}
return new KeyPair(publicKey, privateKey);
} }
@Override @Override
...@@ -395,140 +497,37 @@ class AccountTable extends AbstractTable { ...@@ -395,140 +497,37 @@ class AccountTable extends AbstractTable {
return PROJECTION; return PROJECTION;
} }
static long getId(Cursor cursor) { private static final class Fields implements BaseColumns {
return cursor.getLong(cursor.getColumnIndex(Fields._ID)); public static final String ENABLED = "enabled";
} public static final String SERVER_NAME = "server_name";
public static final String USER_NAME = "user_name";
static AccountProtocol getProtocol(Cursor cursor) { public static final String PASSWORD = "password";
return AccountProtocol.valueOf(cursor.getString(cursor.getColumnIndex(Fields.PROTOCOL))); public static final String RESOURCE = "resource";
} public static final String PRIORITY = "priority";
public static final String STATUS_MODE = "status_mode";
static String getHost(Cursor cursor) { public static final String STATUS_TEXT = "status_text";
return cursor.getString(cursor.getColumnIndex(Fields.HOST)); public static final String CUSTOM = "custom";
} public static final String HOST = "host";
public static final String PORT = "port";
static boolean isCustom(Cursor cursor) { public static final String SASL_ENABLED = "sasl_enabled";
return cursor.getInt(cursor.getColumnIndex(Fields.CUSTOM)) != 0; public static final String TLS_MODE = "required_tls";
} public static final String COMPRESSION = "compression";
public static final String COLOR_INDEX = "color_index";
static int getPort(Cursor cursor) { public static final String PROTOCOL = "protocol";
return cursor.getInt(cursor.getColumnIndex(Fields.PORT)); public static final String SYNCABLE = "syncable";
} public static final String STORE_PASSWORD = "store_password";
public static final String PUBLIC_KEY = "public_key";
static String getServerName(Cursor cursor) { public static final String PRIVATE_KEY = "private_key";
return cursor.getString(cursor.getColumnIndex(Fields.SERVER_NAME)); public static final String LAST_SYNC = "last_sync";
} public static final String ARCHIVE_MODE = "archive_mode";
public static final String PROXY_TYPE = "proxy_type";
static String getUserName(Cursor cursor) { public static final String PROXY_HOST = "proxy_host";
return cursor.getString(cursor.getColumnIndex(Fields.USER_NAME)); public static final String PROXY_PORT = "proxy_port";
} public static final String PROXY_USER = "proxy_user";
public static final String PROXY_PASSWORD = "proxy_password";
static String getPassword(Cursor cursor) {
if (!isStorePassword(cursor)) {
return AccountItem.UNDEFINED_PASSWORD;
}
return cursor.getString(cursor.getColumnIndex(Fields.PASSWORD));
}
static String getResource(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Fields.RESOURCE));
}
static int getColorIndex(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.COLOR_INDEX));
}
static int getPriority(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.PRIORITY));
}
static StatusMode getStatusMode(Cursor cursor) {
int statusModeIndex = cursor.getInt(cursor.getColumnIndex(Fields.STATUS_MODE));
return StatusMode.values()[statusModeIndex];
}
static String getStatusText(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Fields.STATUS_TEXT));
}
static boolean isEnabled(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.ENABLED)) != 0;
}
static boolean isSaslEnabled(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.SASL_ENABLED)) != 0;
}
public static TLSMode getTLSMode(Cursor cursor) {
int tlsModeIndex = cursor.getInt(cursor.getColumnIndex(Fields.TLS_MODE));
return TLSMode.values()[tlsModeIndex];
}
static boolean isCompression(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.COMPRESSION)) != 0;
}
static boolean isSyncable(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.SYNCABLE)) != 0;
}
static boolean isStorePassword(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.STORE_PASSWORD)) != 0;
}
static Date getLastSync(Cursor cursor) {
if (cursor.isNull(cursor.getColumnIndex(Fields.LAST_SYNC))) {
return null;
} else {
return new Date(cursor.getLong(cursor.getColumnIndex(Fields.LAST_SYNC)));
}
}
static ArchiveMode getArchiveMode(Cursor cursor) {
int index = cursor.getInt(cursor.getColumnIndex(Fields.ARCHIVE_MODE));
return ArchiveMode.values()[index];
}
static ProxyType getProxyType(Cursor cursor) {
int index = cursor.getInt(cursor.getColumnIndex(Fields.PROXY_TYPE));
return ProxyType.values()[index];
}
static String getProxyHost(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Fields.PROXY_HOST));
}
static int getProxyPort(Cursor cursor) {
return cursor.getInt(cursor.getColumnIndex(Fields.PROXY_PORT));
}
static String getProxyUser(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Fields.PROXY_USER));
}
static String getProxyPassword(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(Fields.PROXY_PASSWORD));
}
static KeyPair getKeyPair(Cursor cursor) { private Fields() {
byte[] publicKeyBytes = cursor.getBlob(cursor.getColumnIndex(Fields.PUBLIC_KEY));
byte[] privateKeyBytes = cursor.getBlob(cursor.getColumnIndex(Fields.PRIVATE_KEY));
if (privateKeyBytes == null || publicKeyBytes == null) {
return null;
}
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyBytes);
PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
PublicKey publicKey;
PrivateKey privateKey;
KeyFactory keyFactory;
try {
keyFactory = KeyFactory.getInstance("DSA");
publicKey = keyFactory.generatePublic(publicKeySpec);
privateKey = keyFactory.generatePrivate(privateKeySpec);
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
throw new RuntimeException(e);
} }
return new KeyPair(publicKey, privateKey);
} }
} }
...@@ -16,10 +16,10 @@ package com.xabber.android.data.account; ...@@ -16,10 +16,10 @@ package com.xabber.android.data.account;
import android.content.Intent; import android.content.Intent;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.entity.AccountRelated; import com.xabber.android.data.entity.AccountRelated;
import com.xabber.android.data.notification.AccountNotificationItem; import com.xabber.android.data.notification.AccountNotificationItem;
import com.xabber.androiddev.R;
public class PasswordRequest extends AccountRelated implements public class PasswordRequest extends AccountRelated implements
AccountNotificationItem { AccountNotificationItem {
......
...@@ -14,11 +14,11 @@ ...@@ -14,11 +14,11 @@
*/ */
package com.xabber.android.data.account; package com.xabber.android.data.account;
import com.xabber.android.R;
import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.Presence.Mode; import org.jivesoftware.smack.packet.Presence.Mode;
import com.xabber.androiddev.R;
/** /**
* Status mode. * Status mode.
* *
......
...@@ -14,10 +14,12 @@ ...@@ -14,10 +14,12 @@
*/ */
package com.xabber.android.data.account; package com.xabber.android.data.account;
import java.io.IOException; import android.net.Uri;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList; import com.xabber.android.R;
import java.util.List; import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager;
import com.xabber.android.data.NetworkException;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
...@@ -35,31 +37,13 @@ import org.json.JSONException; ...@@ -35,31 +37,13 @@ import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import org.json.JSONTokener; import org.json.JSONTokener;
import android.net.Uri; import java.io.IOException;
import java.io.UnsupportedEncodingException;
import com.xabber.android.data.Application; import java.util.ArrayList;
import com.xabber.android.data.LogManager; import java.util.List;
import com.xabber.android.data.NetworkException;
import com.xabber.androiddev.R;
class WLMManager implements OAuthProvider { class WLMManager implements OAuthProvider {
private static enum GrantType {
authorizationCode("authorization_code", "code"),
refreshToken("refresh_token", "refresh_token");
public final String name;
public final String value;
private GrantType(String name, String value) {
this.name = name;
this.value = value;
}
}
private static final String WLM_CLIENT_SECRET = "XEazfSKu0Iu2pt6Z64Lqm-1cRxtEYgS0"; private static final String WLM_CLIENT_SECRET = "XEazfSKu0Iu2pt6Z64Lqm-1cRxtEYgS0";
private static final String WLM_CLIENT_ID = "00000000440923FF"; private static final String WLM_CLIENT_ID = "00000000440923FF";
private static final String WLM_SCOPE = "wl.messenger wl.offline_access"; private static final String WLM_SCOPE = "wl.messenger wl.offline_access";
...@@ -69,7 +53,6 @@ class WLMManager implements OAuthProvider { ...@@ -69,7 +53,6 @@ class WLMManager implements OAuthProvider {
private static final String WLM_REDIRECT_URL = new Uri.Builder() private static final String WLM_REDIRECT_URL = new Uri.Builder()
.scheme(WLM_SCHEME).authority(WLM_AUTHORITY) .scheme(WLM_SCHEME).authority(WLM_AUTHORITY)
.path(WLM_REDIRECT_PATH).build().toString(); .path(WLM_REDIRECT_PATH).build().toString();
private final static WLMManager instance; private final static WLMManager instance;
static { static {
...@@ -77,11 +60,11 @@ class WLMManager implements OAuthProvider { ...@@ -77,11 +60,11 @@ class WLMManager implements OAuthProvider {
Application.getInstance().addManager(instance); Application.getInstance().addManager(instance);
} }
public static WLMManager getInstance() { private WLMManager() {
return instance;
} }
private WLMManager() { public static WLMManager getInstance() {
return instance;
} }
/** /**
...@@ -205,4 +188,20 @@ class WLMManager implements OAuthProvider { ...@@ -205,4 +188,20 @@ class WLMManager implements OAuthProvider {
&& WLM_REDIRECT_PATH.equals(uri.getPath()); && WLM_REDIRECT_PATH.equals(uri.getPath());
} }
private enum GrantType {
authorizationCode("authorization_code", "code"),
refreshToken("refresh_token", "refresh_token");
public final String name;
public final String value;
GrantType(String name, String value) {
this.name = name;
this.value = value;
}
}
} }
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
*/ */
package com.xabber.android.data.connection; package com.xabber.android.data.connection;
import com.xabber.androiddev.R; import com.xabber.android.R;
/** /**
* Possible reasons for certificate invalidation. * Possible reasons for certificate invalidation.
......
...@@ -16,13 +16,13 @@ package com.xabber.android.data.connection; ...@@ -16,13 +16,13 @@ package com.xabber.android.data.connection;
import android.content.res.AssetManager; import android.content.res.AssetManager;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.OnClearListener; import com.xabber.android.data.OnClearListener;
import com.xabber.android.data.OnLoadListener; import com.xabber.android.data.OnLoadListener;
import com.xabber.android.data.notification.BaseNotificationProvider; import com.xabber.android.data.notification.BaseNotificationProvider;
import com.xabber.android.data.notification.NotificationManager; import com.xabber.android.data.notification.NotificationManager;
import com.xabber.androiddev.R;
import org.jivesoftware.smack.CertificateListener; import org.jivesoftware.smack.CertificateListener;
import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.StringUtils;
...@@ -79,20 +79,18 @@ public class CertificateManager implements OnLoadListener, OnClearListener { ...@@ -79,20 +79,18 @@ public class CertificateManager implements OnLoadListener, OnClearListener {
.getFilesDir(), reason.toString() + ".bsk")); .getFilesDir(), reason.toString() + ".bsk"));
} }
public static CertificateManager getInstance() {
return instance;
}
/** /**
* Key store for confirmed certificates. * Key store for confirmed certificates.
*/ */
private final Map<CertificateInvalidReason, KeyStore> keyStores; private final Map<CertificateInvalidReason, KeyStore> keyStores;
/** /**
* Key store for preset certificates. * Key store for preset certificates.
*/ */
private final Map<CertificateInvalidReason, KeyStore> defaultStores; private final Map<CertificateInvalidReason, KeyStore> defaultStores;
/**
* Certificate issues not to be displayed to the user.
*/
private final Collection<PendingCertificate> ignoreCertificates;
private final BaseNotificationProvider<PendingCertificate> pendingCertificateProvider = new BaseNotificationProvider<PendingCertificate>( private final BaseNotificationProvider<PendingCertificate> pendingCertificateProvider = new BaseNotificationProvider<PendingCertificate>(
R.drawable.ic_stat_error) { R.drawable.ic_stat_error) {
...@@ -104,42 +102,14 @@ public class CertificateManager implements OnLoadListener, OnClearListener { ...@@ -104,42 +102,14 @@ public class CertificateManager implements OnLoadListener, OnClearListener {
}; };
/**
* Certificate issues not to be displayed to the user.
*/
private final Collection<PendingCertificate> ignoreCertificates;
private CertificateManager() { private CertificateManager() {
defaultStores = new HashMap<CertificateInvalidReason, KeyStore>(); defaultStores = new HashMap<CertificateInvalidReason, KeyStore>();
keyStores = new ConcurrentHashMap<CertificateInvalidReason, KeyStore>(); keyStores = new ConcurrentHashMap<CertificateInvalidReason, KeyStore>();
ignoreCertificates = new ArrayList<PendingCertificate>(); ignoreCertificates = new ArrayList<PendingCertificate>();
} }
@Override public static CertificateManager getInstance() {
public void onLoad() { return instance;
final Map<CertificateInvalidReason, KeyStore> defaultStores = new HashMap<CertificateInvalidReason, KeyStore>();
final Map<CertificateInvalidReason, KeyStore> keyStores = new HashMap<CertificateInvalidReason, KeyStore>();
AssetManager assetManager = Application.getInstance().getResources()
.getAssets();
for (CertificateInvalidReason reason : CertificateInvalidReason
.values()) {
InputStream stream;
try {
stream = assetManager.open(reason.toString() + ".bsk");
} catch (IOException e) {
stream = null;
}
defaultStores.put(reason, loadKeyStore(stream));
stream = getInputStream(KEY_FILES.get(reason));
if (stream != null)
keyStores.put(reason, loadKeyStore(stream));
}
Application.getInstance().runOnUiThread(new Runnable() {
@Override
public void run() {
onLoaded(defaultStores, keyStores);
}
});
} }
private static InputStream getInputStream(File file) { private static InputStream getInputStream(File file) {
...@@ -179,6 +149,89 @@ public class CertificateManager implements OnLoadListener, OnClearListener { ...@@ -179,6 +149,89 @@ public class CertificateManager implements OnLoadListener, OnClearListener {
return keyStore; return keyStore;
} }
/**
* @param fingerprint
* @param reason
* @param collection
* @return Pending certificate or <code>null</code>.
*/
private static PendingCertificate getPendingCertificate(String fingerprint,
CertificateInvalidReason reason,
Collection<PendingCertificate> collection) {
for (PendingCertificate pendingCertificate : collection)
if (pendingCertificate.getFingerprint().equals(fingerprint)
&& reason == pendingCertificate.getReason())
return pendingCertificate;
return null;
}
/**
* @param x509Certificate
* @return Finger print for the given certificate.
*/
private static String getFingerprint(X509Certificate x509Certificate) {
byte[] data;
try {
data = x509Certificate.getEncoded();
} catch (CertificateEncodingException e) {
LogManager.exception(PendingCertificate.class, e);
return INVALID;
}
MessageDigest digest;
try {
digest = MessageDigest.getInstance("SHA-1");
} catch (NoSuchAlgorithmException e) {
LogManager.exception(PendingCertificate.class, e);
return INVALID;
}
digest.update(data);
byte[] bytes = digest.digest();
return StringUtils.encodeHex(bytes);
}
/**
* @param fingerprint
* @return Formatted fingerprint to be shown.
*/
public static String showFingerprint(String fingerprint) {
if (fingerprint == null)
return null;
StringBuffer buffer = new StringBuffer();
for (int index = 0; index < fingerprint.length(); index++) {
if (index > 0 && index % 2 == 0)
buffer.append(':');
buffer.append(fingerprint.charAt(index));
}
return buffer.toString().toUpperCase();
}
@Override
public void onLoad() {
final Map<CertificateInvalidReason, KeyStore> defaultStores = new HashMap<CertificateInvalidReason, KeyStore>();
final Map<CertificateInvalidReason, KeyStore> keyStores = new HashMap<CertificateInvalidReason, KeyStore>();
AssetManager assetManager = Application.getInstance().getResources()
.getAssets();
for (CertificateInvalidReason reason : CertificateInvalidReason
.values()) {
InputStream stream;
try {
stream = assetManager.open(reason.toString() + ".bsk");
} catch (IOException e) {
stream = null;
}
defaultStores.put(reason, loadKeyStore(stream));
stream = getInputStream(KEY_FILES.get(reason));
if (stream != null)
keyStores.put(reason, loadKeyStore(stream));
}
Application.getInstance().runOnUiThread(new Runnable() {
@Override
public void run() {
onLoaded(defaultStores, keyStores);
}
});
}
/** /**
* Create new key store instance based on default key store. * Create new key store instance based on default key store.
* *
...@@ -255,22 +308,6 @@ public class CertificateManager implements OnLoadListener, OnClearListener { ...@@ -255,22 +308,6 @@ public class CertificateManager implements OnLoadListener, OnClearListener {
return false; return false;
} }
/**
* @param fingerprint
* @param reason
* @param collection
* @return Pending certificate or <code>null</code>.
*/
private static PendingCertificate getPendingCertificate(String fingerprint,
CertificateInvalidReason reason,
Collection<PendingCertificate> collection) {
for (PendingCertificate pendingCertificate : collection)
if (pendingCertificate.getFingerprint().equals(fingerprint)
&& reason == pendingCertificate.getReason())
return pendingCertificate;
return null;
}
public PendingCertificate getPendingCertificate(String fingerprint, public PendingCertificate getPendingCertificate(String fingerprint,
CertificateInvalidReason reason) { CertificateInvalidReason reason) {
return getPendingCertificate(fingerprint, reason, return getPendingCertificate(fingerprint, reason,
...@@ -354,46 +391,6 @@ public class CertificateManager implements OnLoadListener, OnClearListener { ...@@ -354,46 +391,6 @@ public class CertificateManager implements OnLoadListener, OnClearListener {
ignoreCertificates.add(pendingCertificate); ignoreCertificates.add(pendingCertificate);
} }
/**
* @param x509Certificate
* @return Finger print for the given certificate.
*/
private static String getFingerprint(X509Certificate x509Certificate) {
byte[] data;
try {
data = x509Certificate.getEncoded();
} catch (CertificateEncodingException e) {
LogManager.exception(PendingCertificate.class, e);
return INVALID;
}
MessageDigest digest;
try {
digest = MessageDigest.getInstance("SHA-1");
} catch (NoSuchAlgorithmException e) {
LogManager.exception(PendingCertificate.class, e);
return INVALID;
}
digest.update(data);
byte[] bytes = digest.digest();
return StringUtils.encodeHex(bytes);
}
/**
* @param fingerprint
* @return Formatted fingerprint to be shown.
*/
public static String showFingerprint(String fingerprint) {
if (fingerprint == null)
return null;
StringBuffer buffer = new StringBuffer();
for (int index = 0; index < fingerprint.length(); index++) {
if (index > 0 && index % 2 == 0)
buffer.append(':');
buffer.append(fingerprint.charAt(index));
}
return buffer.toString().toUpperCase();
}
@Override @Override
public void onClear() { public void onClear() {
for (File file : KEY_FILES.values()) for (File file : KEY_FILES.values())
......
...@@ -14,12 +14,12 @@ ...@@ -14,12 +14,12 @@
*/ */
package com.xabber.android.data.connection; package com.xabber.android.data.connection;
import org.jivesoftware.smack.XMPPConnection; import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.account.AccountProtocol; import com.xabber.android.data.account.AccountProtocol;
import com.xabber.androiddev.R;
import org.jivesoftware.smack.XMPPConnection;
/** /**
* Abstract connection. * Abstract connection.
...@@ -214,7 +214,6 @@ public abstract class ConnectionItem { ...@@ -214,7 +214,6 @@ public abstract class ConnectionItem {
} }
} }
;
}; };
thread.setPriority(Thread.MIN_PRIORITY); thread.setPriority(Thread.MIN_PRIORITY);
thread.setDaemon(true); thread.setDaemon(true);
......
...@@ -14,23 +14,7 @@ ...@@ -14,23 +14,7 @@
*/ */
package com.xabber.android.data.connection; package com.xabber.android.data.connection;
import java.io.File; import com.xabber.android.R;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.Map.Entry;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.SASLAuthentication;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.IQ.Type;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
...@@ -40,10 +24,26 @@ import com.xabber.android.data.OnTimerListener; ...@@ -40,10 +24,26 @@ import com.xabber.android.data.OnTimerListener;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.entity.NestedMap; import com.xabber.android.data.entity.NestedMap;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.wlm.XMessengerOAuth2; import com.xabber.xmpp.wlm.XMessengerOAuth2;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionCreationListener;
import org.jivesoftware.smack.SASLAuthentication;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.IQ.Type;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.Map.Entry;
/** /**
* Connection manager. * Connection manager.
* *
...@@ -61,18 +61,6 @@ public class ConnectionManager implements OnInitializedListener, ...@@ -61,18 +61,6 @@ public class ConnectionManager implements OnInitializedListener,
* Path to the trust store in this system. * Path to the trust store in this system.
*/ */
public final static String TRUST_STORE_PATH; public final static String TRUST_STORE_PATH;
/**
* List of managed connection. Only managed connections can notify
* registered listeners.
*/
private final Collection<ConnectionThread> managedConnections;
/**
* Request holders for its packet id in accounts.
*/
private final NestedMap<RequestHolder> requests;
private final static ConnectionManager instance; private final static ConnectionManager instance;
static { static {
...@@ -107,15 +95,25 @@ public class ConnectionManager implements OnInitializedListener, ...@@ -107,15 +95,25 @@ public class ConnectionManager implements OnInitializedListener,
}); });
} }
public static ConnectionManager getInstance() { /**
return instance; * List of managed connection. Only managed connections can notify
} * registered listeners.
*/
private final Collection<ConnectionThread> managedConnections;
/**
* Request holders for its packet id in accounts.
*/
private final NestedMap<RequestHolder> requests;
private ConnectionManager() { private ConnectionManager() {
managedConnections = new ArrayList<ConnectionThread>(); managedConnections = new ArrayList<ConnectionThread>();
requests = new NestedMap<RequestHolder>(); requests = new NestedMap<RequestHolder>();
} }
public static ConnectionManager getInstance() {
return instance;
}
@Override @Override
public void onInitialized() { public void onInitialized() {
updateConnections(false); updateConnections(false);
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
*/ */
package com.xabber.android.data.connection; package com.xabber.android.data.connection;
import com.xabber.androiddev.R; import com.xabber.android.R;
/** /**
* State of connection. * State of connection.
......
...@@ -14,18 +14,18 @@ ...@@ -14,18 +14,18 @@
*/ */
package com.xabber.android.data.connection; package com.xabber.android.data.connection;
import java.security.Principal;
import java.security.cert.X509Certificate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.content.Intent; import android.content.Intent;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.notification.NotificationItem; import com.xabber.android.data.notification.NotificationItem;
import com.xabber.android.ui.CertificateConfirmation; import com.xabber.android.ui.CertificateConfirmation;
import com.xabber.android.utils.StringUtils; import com.xabber.android.utils.StringUtils;
import com.xabber.androiddev.R;
import java.security.Principal;
import java.security.cert.X509Certificate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PendingCertificate implements NotificationItem { public class PendingCertificate implements NotificationItem {
......
...@@ -16,12 +16,12 @@ package com.xabber.android.data.extension.archive; ...@@ -16,12 +16,12 @@ package com.xabber.android.data.extension.archive;
import android.content.Intent; import android.content.Intent;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.entity.AccountRelated; import com.xabber.android.data.entity.AccountRelated;
import com.xabber.android.data.notification.AccountNotificationItem; import com.xabber.android.data.notification.AccountNotificationItem;
import com.xabber.android.ui.ArchiveRequest; import com.xabber.android.ui.ArchiveRequest;
import com.xabber.androiddev.R;
public class AvailableArchiveRequest extends AccountRelated implements public class AvailableArchiveRequest extends AccountRelated implements
AccountNotificationItem { AccountNotificationItem {
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
*/ */
package com.xabber.android.data.extension.archive; package com.xabber.android.data.extension.archive;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
...@@ -39,7 +40,6 @@ import com.xabber.android.data.message.MessageItem; ...@@ -39,7 +40,6 @@ import com.xabber.android.data.message.MessageItem;
import com.xabber.android.data.message.MessageManager; import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.notification.BaseAccountNotificationProvider; import com.xabber.android.data.notification.BaseAccountNotificationProvider;
import com.xabber.android.data.notification.NotificationManager; import com.xabber.android.data.notification.NotificationManager;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.archive.AbstractMessage; import com.xabber.xmpp.archive.AbstractMessage;
import com.xabber.xmpp.archive.Auto; import com.xabber.xmpp.archive.Auto;
...@@ -93,66 +93,52 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -93,66 +93,52 @@ public class MessageArchiveManager implements OnPacketListener,
private static final String FEATURE_ARCH = "urn:xmpp:archive"; private static final String FEATURE_ARCH = "urn:xmpp:archive";
private static final String FEATURE_PREF = "urn:xmpp:archive:pref"; private static final String FEATURE_PREF = "urn:xmpp:archive:pref";
private static final String FEATURE_MANAGE = "urn:xmpp:archive:manage"; private static final String FEATURE_MANAGE = "urn:xmpp:archive:manage";
private final static MessageArchiveManager instance;
static {
instance = new MessageArchiveManager(Application.getInstance());
Application.getInstance().addManager(instance);
}
/** /**
* Custom auto setting per account. * Custom auto setting per account.
*/ */
private final Map<String, Boolean> saves; private final Map<String, Boolean> saves;
/** /**
* Default settings for each account. * Default settings for each account.
*/ */
private final Map<String, ArchivePreference> defaults; private final Map<String, ArchivePreference> defaults;
/** /**
* Per user settings for each account. * Per user settings for each account.
*/ */
private final Map<String, Map<MatchMode, Map<String, ArchivePreference>>> items; private final Map<String, Map<MatchMode, Map<String, ArchivePreference>>> items;
/** /**
* Settings for session in each account. * Settings for session in each account.
*/ */
private final NestedMap<SaveMode> sessionSaves; private final NestedMap<SaveMode> sessionSaves;
/** /**
* Contains whether chat modification has been requested for the given * Contains whether chat modification has been requested for the given
* packet id in the accounts. * packet id in the accounts.
*/ */
private final NestedMap<Boolean> modificationRequests; private final NestedMap<Boolean> modificationRequests;
/** /**
* Store information about modifications received from the server. * Store information about modifications received from the server.
*/ */
private final Map<String, ModificationStorage> modificationStorages; private final Map<String, ModificationStorage> modificationStorages;
/** /**
* Server side timestamp when connection has been established. * Server side timestamp when connection has been established.
*/ */
private final Map<String, Date> connected; private final Map<String, Date> connected;
/** /**
* Store current history request state for the user in each account. * Store current history request state for the user in each account.
*/ */
private final NestedMap<HistoryStorage> historyStorages; private final NestedMap<HistoryStorage> historyStorages;
/** /**
* Chat storages for tags for users in accounts. * Chat storages for tags for users in accounts.
*/ */
private final NestedNestedMaps<String, ChatStorage> chatStorages; private final NestedNestedMaps<String, ChatStorage> chatStorages;
private final BaseAccountNotificationProvider<AvailableArchiveRequest> availableArchiveRequestProvider; private final BaseAccountNotificationProvider<AvailableArchiveRequest> availableArchiveRequestProvider;
private final static MessageArchiveManager instance;
static {
instance = new MessageArchiveManager(Application.getInstance());
Application.getInstance().addManager(instance);
}
public static MessageArchiveManager getInstance() {
return instance;
}
private MessageArchiveManager(Application application) { private MessageArchiveManager(Application application) {
saves = new HashMap<String, Boolean>(); saves = new HashMap<String, Boolean>();
defaults = new HashMap<String, ArchivePreference>(); defaults = new HashMap<String, ArchivePreference>();
...@@ -167,6 +153,10 @@ public class MessageArchiveManager implements OnPacketListener, ...@@ -167,6 +153,10 @@ public class MessageArchiveManager implements OnPacketListener,
R.drawable.ic_stat_ic_help_black); R.drawable.ic_stat_ic_help_black);
} }
public static MessageArchiveManager getInstance() {
return instance;
}
@Override @Override
public void onLoad() { public void onLoad() {
Application.getInstance().runOnUiThread(new Runnable() { Application.getInstance().runOnUiThread(new Runnable() {
......
...@@ -17,6 +17,7 @@ package com.xabber.android.data.extension.attention; ...@@ -17,6 +17,7 @@ package com.xabber.android.data.extension.attention;
import android.media.AudioManager; import android.media.AudioManager;
import android.net.Uri; import android.net.Uri;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.OnLoadListener; import com.xabber.android.data.OnLoadListener;
...@@ -38,7 +39,6 @@ import com.xabber.android.data.notification.EntityNotificationProvider; ...@@ -38,7 +39,6 @@ import com.xabber.android.data.notification.EntityNotificationProvider;
import com.xabber.android.data.notification.NotificationManager; import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.data.roster.PresenceManager; import com.xabber.android.data.roster.PresenceManager;
import com.xabber.android.data.roster.ResourceItem; import com.xabber.android.data.roster.ResourceItem;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.attention.Attention; import com.xabber.xmpp.attention.Attention;
...@@ -82,10 +82,6 @@ public class AttentionManager implements OnPacketListener, OnLoadListener { ...@@ -82,10 +82,6 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
}); });
} }
public static AttentionManager getInstance() {
return instance;
}
private final EntityNotificationProvider<AttentionRequest> attentionRequestProvider = new EntityNotificationProvider<AttentionRequest>( private final EntityNotificationProvider<AttentionRequest> attentionRequestProvider = new EntityNotificationProvider<AttentionRequest>(
R.drawable.ic_stat_error) { R.drawable.ic_stat_error) {
...@@ -104,6 +100,10 @@ public class AttentionManager implements OnPacketListener, OnLoadListener { ...@@ -104,6 +100,10 @@ public class AttentionManager implements OnPacketListener, OnLoadListener {
public AttentionManager() { public AttentionManager() {
} }
public static AttentionManager getInstance() {
return instance;
}
public void onSettingsChanged() { public void onSettingsChanged() {
synchronized (enabledLock) { synchronized (enabledLock) {
for (String account : AccountManager.getInstance().getAccounts()) { for (String account : AccountManager.getInstance().getAccounts()) {
......
...@@ -16,12 +16,12 @@ package com.xabber.android.data.extension.attention; ...@@ -16,12 +16,12 @@ package com.xabber.android.data.extension.attention;
import android.content.Intent; import android.content.Intent;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.entity.BaseEntity; import com.xabber.android.data.entity.BaseEntity;
import com.xabber.android.data.notification.EntityNotificationItem; import com.xabber.android.data.notification.EntityNotificationItem;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.ChatViewer; import com.xabber.android.ui.ChatViewer;
import com.xabber.androiddev.R;
public class AttentionRequest extends BaseEntity implements public class AttentionRequest extends BaseEntity implements
EntityNotificationItem { EntityNotificationItem {
......
...@@ -23,6 +23,7 @@ import android.graphics.drawable.ColorDrawable; ...@@ -23,6 +23,7 @@ import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.LayerDrawable;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.OnLoadListener; import com.xabber.android.data.OnLoadListener;
import com.xabber.android.data.OnLowMemoryListener; import com.xabber.android.data.OnLowMemoryListener;
...@@ -33,7 +34,6 @@ import com.xabber.android.data.account.OAuthManager; ...@@ -33,7 +34,6 @@ import com.xabber.android.data.account.OAuthManager;
import com.xabber.android.data.connection.ConnectionItem; import com.xabber.android.data.connection.ConnectionItem;
import com.xabber.android.data.connection.OnPacketListener; import com.xabber.android.data.connection.OnPacketListener;
import com.xabber.android.data.extension.vcard.VCardManager; import com.xabber.android.data.extension.vcard.VCardManager;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.avatar.VCardUpdate; import com.xabber.xmpp.avatar.VCardUpdate;
......
...@@ -16,6 +16,7 @@ package com.xabber.android.data.extension.muc; ...@@ -16,6 +16,7 @@ package com.xabber.android.data.extension.muc;
import android.database.Cursor; import android.database.Cursor;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
...@@ -32,7 +33,6 @@ import com.xabber.android.data.message.MessageManager; ...@@ -32,7 +33,6 @@ import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.notification.EntityNotificationProvider; import com.xabber.android.data.notification.EntityNotificationProvider;
import com.xabber.android.data.notification.NotificationManager; import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.androiddev.R;
import com.xabber.xmpp.muc.MUC; import com.xabber.xmpp.muc.MUC;
import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPConnection;
...@@ -55,10 +55,6 @@ import java.util.Collections; ...@@ -55,10 +55,6 @@ import java.util.Collections;
*/ */
public class MUCManager implements OnLoadListener, OnPacketListener { public class MUCManager implements OnLoadListener, OnPacketListener {
private final EntityNotificationProvider<RoomInvite> inviteProvider;
private final EntityNotificationProvider<RoomAuthorizationError> authorizationErrorProvider;
private final static MUCManager instance; private final static MUCManager instance;
static { static {
...@@ -66,9 +62,8 @@ public class MUCManager implements OnLoadListener, OnPacketListener { ...@@ -66,9 +62,8 @@ public class MUCManager implements OnLoadListener, OnPacketListener {
Application.getInstance().addManager(instance); Application.getInstance().addManager(instance);
} }
public static MUCManager getInstance() { private final EntityNotificationProvider<RoomInvite> inviteProvider;
return instance; private final EntityNotificationProvider<RoomAuthorizationError> authorizationErrorProvider;
}
private MUCManager() { private MUCManager() {
inviteProvider = new EntityNotificationProvider<RoomInvite>( inviteProvider = new EntityNotificationProvider<RoomInvite>(
...@@ -77,6 +72,10 @@ public class MUCManager implements OnLoadListener, OnPacketListener { ...@@ -77,6 +72,10 @@ public class MUCManager implements OnLoadListener, OnPacketListener {
R.drawable.ic_stat_error); R.drawable.ic_stat_error);
} }
public static MUCManager getInstance() {
return instance;
}
@Override @Override
public void onLoad() { public void onLoad() {
final Collection<RoomChat> roomChats = new ArrayList<RoomChat>(); final Collection<RoomChat> roomChats = new ArrayList<RoomChat>();
......
...@@ -16,11 +16,11 @@ package com.xabber.android.data.extension.muc; ...@@ -16,11 +16,11 @@ package com.xabber.android.data.extension.muc;
import android.content.Intent; import android.content.Intent;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.entity.BaseEntity; import com.xabber.android.data.entity.BaseEntity;
import com.xabber.android.data.notification.EntityNotificationItem; import com.xabber.android.data.notification.EntityNotificationItem;
import com.xabber.android.ui.MUCEditor; import com.xabber.android.ui.MUCEditor;
import com.xabber.androiddev.R;
public class RoomAuthorizationError extends BaseEntity implements public class RoomAuthorizationError extends BaseEntity implements
EntityNotificationItem { EntityNotificationItem {
......
...@@ -14,21 +14,7 @@ ...@@ -14,21 +14,7 @@
*/ */
package com.xabber.android.data.extension.muc; package com.xabber.android.data.extension.muc;
import java.util.Collection; import com.xabber.android.R;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.NoSuchElementException;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Message.Type;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.muc.MultiUserChat;
import org.jivesoftware.smackx.packet.MUCUser;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
import com.xabber.android.data.SettingsManager.ChatsShowStatusChange; import com.xabber.android.data.SettingsManager.ChatsShowStatusChange;
...@@ -37,13 +23,27 @@ import com.xabber.android.data.message.AbstractChat; ...@@ -37,13 +23,27 @@ import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.data.message.ChatAction; import com.xabber.android.data.message.ChatAction;
import com.xabber.android.data.message.MessageItem; import com.xabber.android.data.message.MessageItem;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.delay.Delay; import com.xabber.xmpp.delay.Delay;
import com.xabber.xmpp.muc.Affiliation; import com.xabber.xmpp.muc.Affiliation;
import com.xabber.xmpp.muc.MUC; import com.xabber.xmpp.muc.MUC;
import com.xabber.xmpp.muc.Role; import com.xabber.xmpp.muc.Role;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Message.Type;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.muc.MultiUserChat;
import org.jivesoftware.smackx.packet.MUCUser;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.NoSuchElementException;
/** /**
* Chat room. * Chat room.
* <p/> * <p/>
...@@ -53,35 +53,30 @@ import com.xabber.xmpp.muc.Role; ...@@ -53,35 +53,30 @@ import com.xabber.xmpp.muc.Role;
*/ */
public class RoomChat extends AbstractChat { public class RoomChat extends AbstractChat {
/**
* Information about occupants for STRING-PREPed resource.
*/
private final Map<String, Occupant> occupants;
/**
* Invited user for the sent packet ID.
*/
private final Map<String, String> invites;
/** /**
* Joining was requested from the UI. * Joining was requested from the UI.
*/ */
private boolean requested; private boolean requested;
/** /**
* Nickname used in the room. * Nickname used in the room.
*/ */
private String nickname; private String nickname;
private String password; private String password;
private RoomState state; private RoomState state;
private String subject; private String subject;
/** /**
* SMACK MUC implementation. * SMACK MUC implementation.
*/ */
private MultiUserChat multiUserChat; private MultiUserChat multiUserChat;
/**
* Information about occupants for STRING-PREPed resource.
*/
private final Map<String, Occupant> occupants;
/**
* Invited user for the sent packet ID.
*/
private final Map<String, String> invites;
RoomChat(String account, String user, String nickname, String password) { RoomChat(String account, String user, String nickname, String password) {
super(account, user); super(account, user);
this.nickname = nickname; this.nickname = nickname;
......
...@@ -16,13 +16,13 @@ package com.xabber.android.data.extension.muc; ...@@ -16,13 +16,13 @@ package com.xabber.android.data.extension.muc;
import android.content.Intent; import android.content.Intent;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.entity.BaseEntity; import com.xabber.android.data.entity.BaseEntity;
import com.xabber.android.data.notification.EntityNotificationItem; import com.xabber.android.data.notification.EntityNotificationItem;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.MUCInvite; import com.xabber.android.ui.MUCInvite;
import com.xabber.androiddev.R;
/** /**
* Invite to join the room. * Invite to join the room.
......
...@@ -16,6 +16,8 @@ package com.xabber.android.data.extension.otr; ...@@ -16,6 +16,8 @@ package com.xabber.android.data.extension.otr;
import android.database.Cursor; import android.database.Cursor;
import com.xabber.android.BuildConfig;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
...@@ -39,8 +41,6 @@ import com.xabber.android.data.message.MessageManager; ...@@ -39,8 +41,6 @@ import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.notification.EntityNotificationProvider; import com.xabber.android.data.notification.EntityNotificationProvider;
import com.xabber.android.data.notification.NotificationManager; import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.androiddev.BuildConfig;
import com.xabber.androiddev.R;
import com.xabber.xmpp.archive.OtrMode; import com.xabber.xmpp.archive.OtrMode;
import com.xabber.xmpp.archive.SaveMode; import com.xabber.xmpp.archive.SaveMode;
...@@ -77,6 +77,7 @@ public class OTRManager implements OtrEngineHost, OtrEngineListener, ...@@ -77,6 +77,7 @@ public class OTRManager implements OtrEngineHost, OtrEngineListener,
OnLoadListener, OnAccountAddedListener, OnAccountRemovedListener, OnLoadListener, OnAccountAddedListener, OnAccountRemovedListener,
OnCloseListener { OnCloseListener {
private final static OTRManager instance;
private static Map<SecurityOtrMode, OtrPolicy> POLICIES; private static Map<SecurityOtrMode, OtrPolicy> POLICIES;
static { static {
...@@ -91,42 +92,30 @@ public class OTRManager implements OtrEngineHost, OtrEngineListener, ...@@ -91,42 +92,30 @@ public class OTRManager implements OtrEngineHost, OtrEngineListener,
OtrPolicy.OTRL_POLICY_ALWAYS & ~OtrPolicy.ALLOW_V1)); OtrPolicy.OTRL_POLICY_ALWAYS & ~OtrPolicy.ALLOW_V1));
} }
private final EntityNotificationProvider<SMRequest> smRequestProvider;
private final EntityNotificationProvider<SMProgress> smProgressProvider;
private final static OTRManager instance;
static { static {
instance = new OTRManager(); instance = new OTRManager();
Application.getInstance().addManager(instance); Application.getInstance().addManager(instance);
} }
public static OTRManager getInstance() { private final EntityNotificationProvider<SMRequest> smRequestProvider;
return instance; private final EntityNotificationProvider<SMProgress> smProgressProvider;
}
/** /**
* Accepted fingerprints for user in account. * Accepted fingerprints for user in account.
*/ */
private final NestedNestedMaps<String, Boolean> fingerprints; private final NestedNestedMaps<String, Boolean> fingerprints;
/** /**
* Fingerprint of encrypted or encrypted and verified session for user in * Fingerprint of encrypted or encrypted and verified session for user in
* account. * account.
*/ */
private final NestedMap<String> actives; private final NestedMap<String> actives;
/** /**
* Finished entity's sessions for users in accounts. * Finished entity's sessions for users in accounts.
*/ */
private final NestedMap<Boolean> finished; private final NestedMap<Boolean> finished;
/** /**
* Used OTR sessions for users in accounts. * Used OTR sessions for users in accounts.
*/ */
private final NestedMap<Session> sessions; private final NestedMap<Session> sessions;
/** /**
* Service for keypair generation. * Service for keypair generation.
*/ */
...@@ -155,6 +144,10 @@ public class OTRManager implements OtrEngineHost, OtrEngineListener, ...@@ -155,6 +144,10 @@ public class OTRManager implements OtrEngineHost, OtrEngineListener,
}); });
} }
public static OTRManager getInstance() {
return instance;
}
@Override @Override
public void onLoad() { public void onLoad() {
final NestedNestedMaps<String, Boolean> fingerprints = new NestedNestedMaps<String, Boolean>(); final NestedNestedMaps<String, Boolean> fingerprints = new NestedNestedMaps<String, Boolean>();
......
...@@ -16,12 +16,12 @@ package com.xabber.android.data.extension.otr; ...@@ -16,12 +16,12 @@ package com.xabber.android.data.extension.otr;
import android.content.Intent; import android.content.Intent;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.entity.BaseEntity; import com.xabber.android.data.entity.BaseEntity;
import com.xabber.android.data.notification.EntityNotificationItem; import com.xabber.android.data.notification.EntityNotificationItem;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.QuestionViewer; import com.xabber.android.ui.QuestionViewer;
import com.xabber.androiddev.R;
public class SMProgress extends BaseEntity implements EntityNotificationItem { public class SMProgress extends BaseEntity implements EntityNotificationItem {
......
...@@ -16,12 +16,12 @@ package com.xabber.android.data.extension.otr; ...@@ -16,12 +16,12 @@ package com.xabber.android.data.extension.otr;
import android.content.Intent; import android.content.Intent;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.entity.BaseEntity; import com.xabber.android.data.entity.BaseEntity;
import com.xabber.android.data.notification.EntityNotificationItem; import com.xabber.android.data.notification.EntityNotificationItem;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.QuestionViewer; import com.xabber.android.ui.QuestionViewer;
import com.xabber.androiddev.R;
public class SMRequest extends BaseEntity implements EntityNotificationItem { public class SMRequest extends BaseEntity implements EntityNotificationItem {
......
...@@ -16,8 +16,8 @@ package com.xabber.android.data.message; ...@@ -16,8 +16,8 @@ package com.xabber.android.data.message;
import android.content.Context; import android.content.Context;
import com.xabber.android.R;
import com.xabber.android.data.account.StatusMode; import com.xabber.android.data.account.StatusMode;
import com.xabber.androiddev.R;
/** /**
* Action in chat. * Action in chat.
......
...@@ -14,14 +14,10 @@ ...@@ -14,14 +14,10 @@
*/ */
package com.xabber.android.data.message; package com.xabber.android.data.message;
import java.util.Date;
import android.text.Spannable; import android.text.Spannable;
import android.text.Html;
import android.text.SpannableString; import android.text.SpannableString;
import android.text.util.Linkify;
import com.xabber.xmpp.uri.XMPPUri; import java.util.Date;
/** /**
* Message item. * Message item.
...@@ -31,76 +27,62 @@ import com.xabber.xmpp.uri.XMPPUri; ...@@ -31,76 +27,62 @@ import com.xabber.xmpp.uri.XMPPUri;
public class MessageItem implements Comparable<MessageItem> { public class MessageItem implements Comparable<MessageItem> {
private final AbstractChat chat; private final AbstractChat chat;
/**
* Tag used to identify collection in server side message archive. Equals to
* collection's start attribute.
*/
private String tag;
/** /**
* Contact's resource. * Contact's resource.
*/ */
private final String resource; private final String resource;
/** /**
* Text representation. * Text representation.
*/ */
private final String text; private final String text;
/**
* Cached text populated with smiles and link.
*/
private Spannable spannable;
/** /**
* Optional action. If set message represent not an actual message but some * Optional action. If set message represent not an actual message but some
* action in the chat. * action in the chat.
*/ */
private final ChatAction action; private final ChatAction action;
private final boolean incoming;
private final boolean unencypted;
/**
* Message was received from server side offline storage.
*/
private final boolean offline;
/**
* Tag used to identify collection in server side message archive. Equals to
* collection's start attribute.
*/
private String tag;
/**
* Cached text populated with smiles and link.
*/
private Spannable spannable;
/** /**
* Time when message was received or sent by Xabber. * Time when message was received or sent by Xabber.
*/ */
private Date timestamp; private Date timestamp;
/** /**
* Time when message was created. * Time when message was created.
*/ */
private Date delayTimestamp; private Date delayTimestamp;
private final boolean incoming;
private final boolean unencypted;
/** /**
* ID in database. * ID in database.
*/ */
private Long id; private Long id;
/** /**
* Error response received on send request. * Error response received on send request.
*/ */
private boolean error; private boolean error;
/** /**
* Receipt was received for sent message. * Receipt was received for sent message.
*/ */
private boolean delivered; private boolean delivered;
/** /**
* Message was sent. * Message was sent.
*/ */
private boolean sent; private boolean sent;
/** /**
* Message was shown to the user. * Message was shown to the user.
*/ */
private boolean read; private boolean read;
/**
* Message was received from server side offline storage.
*/
private final boolean offline;
/** /**
* Outgoing packet id. * Outgoing packet id.
*/ */
...@@ -146,14 +128,12 @@ public class MessageItem implements Comparable<MessageItem> { ...@@ -146,14 +128,12 @@ public class MessageItem implements Comparable<MessageItem> {
} }
public String getText() { public String getText() {
return Html.fromHtml(text).toString(); return text;
} }
public Spannable getSpannable() { public Spannable getSpannable() {
if (spannable == null) { if (spannable == null) {
spannable = new SpannableString(Html.fromHtml(text)); spannable = new SpannableString(text);
Linkify.addLinks(this.spannable, Linkify.ALL);
XMPPUri.addLinks(this.spannable);
} }
return spannable; return spannable;
} }
......
...@@ -17,6 +17,7 @@ package com.xabber.android.data.message; ...@@ -17,6 +17,7 @@ package com.xabber.android.data.message;
import android.database.Cursor; import android.database.Cursor;
import android.os.Environment; import android.os.Environment;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.OnLoadListener; import com.xabber.android.data.OnLoadListener;
...@@ -39,7 +40,6 @@ import com.xabber.android.data.roster.OnRosterReceivedListener; ...@@ -39,7 +40,6 @@ import com.xabber.android.data.roster.OnRosterReceivedListener;
import com.xabber.android.data.roster.OnStatusChangeListener; import com.xabber.android.data.roster.OnStatusChangeListener;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.utils.StringUtils; import com.xabber.android.utils.StringUtils;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.carbon.CarbonManager.Direction; import com.xabber.xmpp.carbon.CarbonManager.Direction;
import com.xabber.xmpp.delay.Delay; import com.xabber.xmpp.delay.Delay;
......
...@@ -9,6 +9,7 @@ import android.text.Spannable; ...@@ -9,6 +9,7 @@ import android.text.Spannable;
import android.text.SpannableString; import android.text.SpannableString;
import android.text.style.StyleSpan; import android.text.style.StyleSpan;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
import com.xabber.android.data.extension.avatar.AvatarManager; import com.xabber.android.data.extension.avatar.AvatarManager;
...@@ -20,7 +21,6 @@ import com.xabber.android.data.roster.RosterManager; ...@@ -20,7 +21,6 @@ import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.ChatViewer; import com.xabber.android.ui.ChatViewer;
import com.xabber.android.ui.helper.AccountPainter; import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.android.utils.StringUtils; import com.xabber.android.utils.StringUtils;
import com.xabber.androiddev.R;
import java.util.List; import java.util.List;
......
...@@ -24,6 +24,7 @@ import android.os.Handler; ...@@ -24,6 +24,7 @@ import android.os.Handler;
import android.os.Vibrator; import android.os.Vibrator;
import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.OnCloseListener; import com.xabber.android.data.OnCloseListener;
...@@ -45,7 +46,6 @@ import com.xabber.android.ui.ContactList; ...@@ -45,7 +46,6 @@ import com.xabber.android.ui.ContactList;
import com.xabber.android.ui.ReconnectionActivity; import com.xabber.android.ui.ReconnectionActivity;
import com.xabber.android.ui.helper.AccountPainter; import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.android.utils.StringUtils; import com.xabber.android.utils.StringUtils;
import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
...@@ -154,7 +154,7 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan ...@@ -154,7 +154,7 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
} }
private void initPersistentNotification() { private void initPersistentNotification() {
persistentNotificationBuilder.setContentTitle(application.getString(R.string.application_name)); persistentNotificationBuilder.setContentTitle(application.getString(R.string.application_title_full));
persistentNotificationBuilder.setDeleteIntent(clearNotifications); persistentNotificationBuilder.setDeleteIntent(clearNotifications);
persistentNotificationBuilder.setOngoing(true); persistentNotificationBuilder.setOngoing(true);
persistentNotificationBuilder.setWhen(System.currentTimeMillis()); persistentNotificationBuilder.setWhen(System.currentTimeMillis());
......
...@@ -16,6 +16,7 @@ package com.xabber.android.data.roster; ...@@ -16,6 +16,7 @@ package com.xabber.android.data.roster;
import android.database.Cursor; import android.database.Cursor;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.OnLoadListener; import com.xabber.android.data.OnLoadListener;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
...@@ -23,7 +24,6 @@ import com.xabber.android.data.account.AccountManager; ...@@ -23,7 +24,6 @@ import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.account.OnAccountRemovedListener; import com.xabber.android.data.account.OnAccountRemovedListener;
import com.xabber.android.data.entity.NestedMap; import com.xabber.android.data.entity.NestedMap;
import com.xabber.android.data.entity.NestedMap.Entry; import com.xabber.android.data.entity.NestedMap.Entry;
import com.xabber.androiddev.R;
public class GroupManager implements OnLoadListener, OnAccountRemovedListener, public class GroupManager implements OnLoadListener, OnAccountRemovedListener,
GroupStateProvider { GroupStateProvider {
...@@ -52,12 +52,6 @@ public class GroupManager implements OnLoadListener, OnAccountRemovedListener, ...@@ -52,12 +52,6 @@ public class GroupManager implements OnLoadListener, OnAccountRemovedListener,
* Account name used to store information that don't belong to any account. * Account name used to store information that don't belong to any account.
*/ */
public static final String NO_ACCOUNT = "com.xabber.android.data.NO_ACCOUNT"; public static final String NO_ACCOUNT = "com.xabber.android.data.NO_ACCOUNT";
/**
* List of settings for roster groups in accounts.
*/
private final NestedMap<GroupConfiguration> groupConfigurations;
private final static GroupManager instance; private final static GroupManager instance;
static { static {
...@@ -65,14 +59,19 @@ public class GroupManager implements OnLoadListener, OnAccountRemovedListener, ...@@ -65,14 +59,19 @@ public class GroupManager implements OnLoadListener, OnAccountRemovedListener,
Application.getInstance().addManager(instance); Application.getInstance().addManager(instance);
} }
public static GroupManager getInstance() { /**
return instance; * List of settings for roster groups in accounts.
} */
private final NestedMap<GroupConfiguration> groupConfigurations;
private GroupManager() { private GroupManager() {
groupConfigurations = new NestedMap<GroupConfiguration>(); groupConfigurations = new NestedMap<GroupConfiguration>();
} }
public static GroupManager getInstance() {
return instance;
}
@Override @Override
public void onLoad() { public void onLoad() {
final NestedMap<GroupConfiguration> groupConfigurations = new NestedMap<GroupConfiguration>(); final NestedMap<GroupConfiguration> groupConfigurations = new NestedMap<GroupConfiguration>();
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
*/ */
package com.xabber.android.data.roster; package com.xabber.android.data.roster;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.OnLoadListener; import com.xabber.android.data.OnLoadListener;
...@@ -29,7 +30,6 @@ import com.xabber.android.data.entity.NestedMap; ...@@ -29,7 +30,6 @@ import com.xabber.android.data.entity.NestedMap;
import com.xabber.android.data.extension.archive.OnArchiveModificationsReceivedListener; import com.xabber.android.data.extension.archive.OnArchiveModificationsReceivedListener;
import com.xabber.android.data.notification.EntityNotificationProvider; import com.xabber.android.data.notification.EntityNotificationProvider;
import com.xabber.android.data.notification.NotificationManager; import com.xabber.android.data.notification.NotificationManager;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.IQ;
...@@ -55,35 +55,28 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener, ...@@ -55,35 +55,28 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener,
OnPacketListener, OnLoadListener, OnAccountDisabledListener, OnPacketListener, OnLoadListener, OnAccountDisabledListener,
OnDisconnectListener { OnDisconnectListener {
private final EntityNotificationProvider<SubscriptionRequest> subscriptionRequestProvider; private final static PresenceManager instance;
static {
instance = new PresenceManager();
Application.getInstance().addManager(instance);
}
private final EntityNotificationProvider<SubscriptionRequest> subscriptionRequestProvider;
/** /**
* List of account with requested subscriptions for auto accept incoming * List of account with requested subscriptions for auto accept incoming
* subscription request. * subscription request.
*/ */
private final HashMap<String, HashSet<String>> requestedSubscriptions; private final HashMap<String, HashSet<String>> requestedSubscriptions;
/** /**
* Presence container for bare address in account. * Presence container for bare address in account.
*/ */
private final NestedMap<ResourceContainer> presenceContainers; private final NestedMap<ResourceContainer> presenceContainers;
/** /**
* Account ready to send / update its presence information. * Account ready to send / update its presence information.
*/ */
private final ArrayList<String> readyAccounts; private final ArrayList<String> readyAccounts;
private final static PresenceManager instance;
static {
instance = new PresenceManager();
Application.getInstance().addManager(instance);
}
public static PresenceManager getInstance() {
return instance;
}
private PresenceManager() { private PresenceManager() {
subscriptionRequestProvider = new EntityNotificationProvider<SubscriptionRequest>( subscriptionRequestProvider = new EntityNotificationProvider<SubscriptionRequest>(
R.drawable.ic_stat_ic_add_circle); R.drawable.ic_stat_ic_add_circle);
...@@ -92,6 +85,10 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener, ...@@ -92,6 +85,10 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener,
readyAccounts = new ArrayList<String>(); readyAccounts = new ArrayList<String>();
} }
public static PresenceManager getInstance() {
return instance;
}
@Override @Override
public void onLoad() { public void onLoad() {
Application.getInstance().runOnUiThread(new Runnable() { Application.getInstance().runOnUiThread(new Runnable() {
......
...@@ -14,19 +14,7 @@ ...@@ -14,19 +14,7 @@
*/ */
package com.xabber.android.data.roster; package com.xabber.android.data.roster;
import java.util.ArrayList; import com.xabber.android.R;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.RosterPacket;
import org.jivesoftware.smack.packet.RosterPacket.ItemType;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
...@@ -47,9 +35,21 @@ import com.xabber.android.data.extension.muc.RoomContact; ...@@ -47,9 +35,21 @@ import com.xabber.android.data.extension.muc.RoomContact;
import com.xabber.android.data.message.AbstractChat; import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.data.message.ChatContact; import com.xabber.android.data.message.ChatContact;
import com.xabber.android.data.message.MessageManager; import com.xabber.android.data.message.MessageManager;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.RosterPacket;
import org.jivesoftware.smack.packet.RosterPacket.ItemType;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/** /**
* Manage contact list (roster). * Manage contact list (roster).
* *
...@@ -59,37 +59,30 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener, ...@@ -59,37 +59,30 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
OnAccountEnabledListener, OnAccountDisabledListener, OnAccountEnabledListener, OnAccountDisabledListener,
OnArchiveModificationsReceivedListener, OnAccountRemovedListener { OnArchiveModificationsReceivedListener, OnAccountRemovedListener {
private final static RosterManager instance;
static {
instance = new RosterManager();
Application.getInstance().addManager(instance);
}
/** /**
* List of roster groups for its names in accounts. * List of roster groups for its names in accounts.
*/ */
private final NestedMap<RosterGroup> rosterGroups; private final NestedMap<RosterGroup> rosterGroups;
/** /**
* Managed contacts for bare addresses in accounts. * Managed contacts for bare addresses in accounts.
*/ */
private final NestedMap<RosterContact> rosterContacts; private final NestedMap<RosterContact> rosterContacts;
/** /**
* List of accounts for witch roster was requested. * List of accounts for witch roster was requested.
*/ */
private final Set<String> requestedRosters; private final Set<String> requestedRosters;
/** /**
* List of accounts for witch roster has been received. * List of accounts for witch roster has been received.
*/ */
private final Set<String> receivedRosters; private final Set<String> receivedRosters;
private final static RosterManager instance;
static {
instance = new RosterManager();
Application.getInstance().addManager(instance);
}
public static RosterManager getInstance() {
return instance;
}
private RosterManager() { private RosterManager() {
rosterGroups = new NestedMap<RosterGroup>(); rosterGroups = new NestedMap<RosterGroup>();
rosterContacts = new NestedMap<RosterContact>(); rosterContacts = new NestedMap<RosterContact>();
...@@ -97,6 +90,10 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener, ...@@ -97,6 +90,10 @@ public class RosterManager implements OnDisconnectListener, OnPacketListener,
requestedRosters = new HashSet<String>(); requestedRosters = new HashSet<String>();
} }
public static RosterManager getInstance() {
return instance;
}
public Collection<RosterContact> getContacts() { public Collection<RosterContact> getContacts() {
return Collections.unmodifiableCollection(rosterContacts.values()); return Collections.unmodifiableCollection(rosterContacts.values());
} }
......
...@@ -16,12 +16,12 @@ package com.xabber.android.data.roster; ...@@ -16,12 +16,12 @@ package com.xabber.android.data.roster;
import android.content.Intent; import android.content.Intent;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.entity.BaseEntity; import com.xabber.android.data.entity.BaseEntity;
import com.xabber.android.data.notification.EntityNotificationItem; import com.xabber.android.data.notification.EntityNotificationItem;
import com.xabber.android.ui.ContactSubscription; import com.xabber.android.ui.ContactSubscription;
import com.xabber.androiddev.R;
public class SubscriptionRequest extends BaseEntity implements EntityNotificationItem { public class SubscriptionRequest extends BaseEntity implements EntityNotificationItem {
......
...@@ -14,15 +14,6 @@ ...@@ -14,15 +14,6 @@
*/ */
package com.xabber.android.data.roster; package com.xabber.android.data.roster;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import android.accounts.Account; import android.accounts.Account;
import android.accounts.AccountManager; import android.accounts.AccountManager;
import android.accounts.OnAccountsUpdateListener; import android.accounts.OnAccountsUpdateListener;
...@@ -49,6 +40,7 @@ import android.provider.ContactsContract.Groups; ...@@ -49,6 +40,7 @@ import android.provider.ContactsContract.Groups;
import android.provider.ContactsContract.RawContacts; import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.StatusUpdates; import android.provider.ContactsContract.StatusUpdates;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.DatabaseManager; import com.xabber.android.data.DatabaseManager;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
...@@ -62,7 +54,15 @@ import com.xabber.android.data.entity.AccountRelated; ...@@ -62,7 +54,15 @@ import com.xabber.android.data.entity.AccountRelated;
import com.xabber.android.data.entity.BaseEntity; import com.xabber.android.data.entity.BaseEntity;
import com.xabber.android.data.extension.vcard.VCardManager; import com.xabber.android.data.extension.vcard.VCardManager;
import com.xabber.android.utils.DummyCursor; import com.xabber.android.utils.DummyCursor;
import com.xabber.androiddev.R;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/** /**
* Manage integration with system accounts and contacts. * Manage integration with system accounts and contacts.
...@@ -79,63 +79,50 @@ public class SyncManager implements OnLoadListener, OnUnloadListener, ...@@ -79,63 +79,50 @@ public class SyncManager implements OnLoadListener, OnUnloadListener,
OnAccountSyncableChangedListener, OnAccountsUpdateListener, OnAccountSyncableChangedListener, OnAccountsUpdateListener,
OnRosterChangedListener { OnRosterChangedListener {
private static boolean LOG = true;
private static final Uri RAW_CONTACTS_URI = RawContacts.CONTENT_URI private static final Uri RAW_CONTACTS_URI = RawContacts.CONTENT_URI
.buildUpon() .buildUpon()
.appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, .appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER,
"true").build(); "true").build();
private static final Uri GROUPS_URI = Groups.CONTENT_URI private static final Uri GROUPS_URI = Groups.CONTENT_URI
.buildUpon() .buildUpon()
.appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, .appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER,
"true").build(); "true").build();
private static final Uri DATA_URI = Data.CONTENT_URI private static final Uri DATA_URI = Data.CONTENT_URI
.buildUpon() .buildUpon()
.appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, .appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER,
"true").build(); "true").build();
private final static SyncManager instance;
private static boolean LOG = true;
private final Application application; static {
instance = new SyncManager();
Application.getInstance().addManager(instance);
}
private final Application application;
/** /**
* List of contacts with specified status. * List of contacts with specified status.
*/ */
private final HashMap<RosterContact, SystemContactStatus> statuses; private final HashMap<RosterContact, SystemContactStatus> statuses;
/** /**
* System account manager. * System account manager.
*/ */
private final AccountManager accountManager; private final AccountManager accountManager;
/**
* Accounts which contacts is indented to be synchronized.
*/
private final HashSet<String> syncableAccounts;
/** /**
* Whether system accounts must be created on xabber account add. * Whether system accounts must be created on xabber account add.
* <p/> * <p/>
* Used to prevent system account creation on load. * Used to prevent system account creation on load.
*/ */
private boolean createAccounts; private boolean createAccounts;
/** /**
* Whether OnAccountsUpdatedListener was registered. * Whether OnAccountsUpdatedListener was registered.
*/ */
private boolean registeredOnAccountsUpdatedListener; private boolean registeredOnAccountsUpdatedListener;
/**
* Accounts which contacts is indented to be synchronized.
*/
private final HashSet<String> syncableAccounts;
private final static SyncManager instance;
static {
instance = new SyncManager();
Application.getInstance().addManager(instance);
}
public static SyncManager getInstance() {
return instance;
}
private SyncManager() { private SyncManager() {
this.application = Application.getInstance(); this.application = Application.getInstance();
statuses = new HashMap<RosterContact, SystemContactStatus>(); statuses = new HashMap<RosterContact, SystemContactStatus>();
...@@ -145,6 +132,10 @@ public class SyncManager implements OnLoadListener, OnUnloadListener, ...@@ -145,6 +132,10 @@ public class SyncManager implements OnLoadListener, OnUnloadListener,
registeredOnAccountsUpdatedListener = false; registeredOnAccountsUpdatedListener = false;
} }
public static SyncManager getInstance() {
return instance;
}
/** /**
* @return Account type used by system contact list. * @return Account type used by system contact list.
*/ */
......
...@@ -22,10 +22,10 @@ import android.view.Menu; ...@@ -22,10 +22,10 @@ import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import com.xabber.android.R;
import com.xabber.android.data.intent.AccountIntentBuilder; import com.xabber.android.data.intent.AccountIntentBuilder;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
public class AccountAdd extends ManagedActivity { public class AccountAdd extends ManagedActivity {
......
...@@ -14,6 +14,7 @@ import android.widget.Spinner; ...@@ -14,6 +14,7 @@ import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
...@@ -22,10 +23,10 @@ import com.xabber.android.ui.adapter.AccountTypeAdapter; ...@@ -22,10 +23,10 @@ import com.xabber.android.ui.adapter.AccountTypeAdapter;
import com.xabber.android.ui.dialog.OrbotInstallerDialogBuilder; import com.xabber.android.ui.dialog.OrbotInstallerDialogBuilder;
import com.xabber.android.ui.helper.OrbotHelper; import com.xabber.android.ui.helper.OrbotHelper;
import com.xabber.android.ui.preferences.AccountEditor; import com.xabber.android.ui.preferences.AccountEditor;
import com.xabber.androiddev.R;
public class AccountAddFragment extends Fragment implements View.OnClickListener, AdapterView.OnItemSelectedListener { public class AccountAddFragment extends Fragment implements View.OnClickListener, AdapterView.OnItemSelectedListener {
private static final String SAVED_ACCOUNT_TYPE = "com.xabber.android.ui.AccountAdd.ACCOUNT_TYPE";
private CheckBox storePasswordView; private CheckBox storePasswordView;
private CheckBox useOrbotView; private CheckBox useOrbotView;
private CheckBox createAccountCheckBox; private CheckBox createAccountCheckBox;
...@@ -34,8 +35,6 @@ public class AccountAddFragment extends Fragment implements View.OnClickListener ...@@ -34,8 +35,6 @@ public class AccountAddFragment extends Fragment implements View.OnClickListener
private EditText userView; private EditText userView;
private EditText passwordView; private EditText passwordView;
private EditText passwordConfirmEditText; private EditText passwordConfirmEditText;
private static final String SAVED_ACCOUNT_TYPE = "com.xabber.android.ui.AccountAdd.ACCOUNT_TYPE";
private View authPanel; private View authPanel;
private TextView accountHelpView; private TextView accountHelpView;
......
...@@ -19,12 +19,12 @@ import android.content.Intent; ...@@ -19,12 +19,12 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.account.ArchiveMode; import com.xabber.android.data.account.ArchiveMode;
import com.xabber.android.data.intent.AccountIntentBuilder; import com.xabber.android.data.intent.AccountIntentBuilder;
import com.xabber.android.ui.helper.ManagedDialog; import com.xabber.android.ui.helper.ManagedDialog;
import com.xabber.androiddev.R;
/** /**
* Dialog with request to enable message archive. * Dialog with request to enable message archive.
...@@ -35,6 +35,15 @@ public class ArchiveRequest extends ManagedDialog { ...@@ -35,6 +35,15 @@ public class ArchiveRequest extends ManagedDialog {
private String account; private String account;
public static Intent createIntent(Context context, String account) {
return new AccountIntentBuilder(context, ArchiveRequest.class)
.setAccount(account).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -63,13 +72,4 @@ public class ArchiveRequest extends ManagedDialog { ...@@ -63,13 +72,4 @@ public class ArchiveRequest extends ManagedDialog {
finish(); finish();
} }
public static Intent createIntent(Context context, String account) {
return new AccountIntentBuilder(context, ArchiveRequest.class)
.setAccount(account).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
} }
...@@ -14,8 +14,6 @@ ...@@ -14,8 +14,6 @@
*/ */
package com.xabber.android.ui; package com.xabber.android.ui;
import java.util.NoSuchElementException;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
...@@ -23,13 +21,15 @@ import android.view.View; ...@@ -23,13 +21,15 @@ import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.connection.CertificateInvalidReason; import com.xabber.android.data.connection.CertificateInvalidReason;
import com.xabber.android.data.connection.CertificateManager; import com.xabber.android.data.connection.CertificateManager;
import com.xabber.android.data.connection.ConnectionManager; import com.xabber.android.data.connection.ConnectionManager;
import com.xabber.android.data.connection.PendingCertificate; import com.xabber.android.data.connection.PendingCertificate;
import com.xabber.android.data.intent.SegmentIntentBuilder; import com.xabber.android.data.intent.SegmentIntentBuilder;
import com.xabber.android.ui.helper.ManagedDialog; import com.xabber.android.ui.helper.ManagedDialog;
import com.xabber.androiddev.R;
import java.util.NoSuchElementException;
/** /**
* Dialog to confirm invalid certificate. * Dialog to confirm invalid certificate.
...@@ -43,6 +43,27 @@ public class CertificateConfirmation extends ManagedDialog { ...@@ -43,6 +43,27 @@ public class CertificateConfirmation extends ManagedDialog {
private PendingCertificate pendingCertificate; private PendingCertificate pendingCertificate;
private boolean showDetails; private boolean showDetails;
public static Intent createIntent(Context context, String fingerPrint,
CertificateInvalidReason reason) {
return new SegmentIntentBuilder<SegmentIntentBuilder<?>>(context,
CertificateConfirmation.class).addSegment(fingerPrint)
.addSegment(reason.toString()).build();
}
private static String getFingerprint(Intent intent) {
return SegmentIntentBuilder.getSegment(intent, 0);
}
private static CertificateInvalidReason getReason(Intent intent) {
String value = SegmentIntentBuilder.getSegment(intent, 1);
if (value != null)
try {
return CertificateInvalidReason.valueOf(value);
} catch (NoSuchElementException e) {
}
return null;
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -126,25 +147,4 @@ public class CertificateConfirmation extends ManagedDialog { ...@@ -126,25 +147,4 @@ public class CertificateConfirmation extends ManagedDialog {
update(); update();
} }
public static Intent createIntent(Context context, String fingerPrint,
CertificateInvalidReason reason) {
return new SegmentIntentBuilder<SegmentIntentBuilder<?>>(context,
CertificateConfirmation.class).addSegment(fingerPrint)
.addSegment(reason.toString()).build();
}
private static String getFingerprint(Intent intent) {
return SegmentIntentBuilder.getSegment(intent, 0);
}
private static CertificateInvalidReason getReason(Intent intent) {
String value = SegmentIntentBuilder.getSegment(intent, 1);
if (value != null)
try {
return CertificateInvalidReason.valueOf(value);
} catch (NoSuchElementException e) {
}
return null;
}
} }
...@@ -24,6 +24,7 @@ import android.view.WindowManager; ...@@ -24,6 +24,7 @@ import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import com.xabber.android.R;
import com.xabber.android.data.ActivityManager; import com.xabber.android.data.ActivityManager;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.OnAccountChangedListener; import com.xabber.android.data.account.OnAccountChangedListener;
...@@ -40,7 +41,6 @@ import com.xabber.android.ui.adapter.ChatScrollIndicatorAdapter; ...@@ -40,7 +41,6 @@ import com.xabber.android.ui.adapter.ChatScrollIndicatorAdapter;
import com.xabber.android.ui.adapter.ChatViewerAdapter; import com.xabber.android.ui.adapter.ChatViewerAdapter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.android.ui.helper.StatusBarPainter; import com.xabber.android.ui.helper.StatusBarPainter;
import com.xabber.androiddev.R;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
...@@ -424,7 +424,6 @@ public class ChatViewer extends ManagedActivity implements OnChatChangedListener ...@@ -424,7 +424,6 @@ public class ChatViewer extends ManagedActivity implements OnChatChangedListener
@Override @Override
public void onChatViewAdapterFinishUpdate() { public void onChatViewAdapterFinishUpdate() {
insertExtraText(); insertExtraText();
updateRegisteredChats();
} }
private void insertExtraText() { private void insertExtraText() {
......
...@@ -26,6 +26,7 @@ import android.widget.EditText; ...@@ -26,6 +26,7 @@ import android.widget.EditText;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.PopupMenu; import android.widget.PopupMenu;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
...@@ -52,7 +53,6 @@ import com.xabber.android.ui.dialog.ChatExportDialogFragment; ...@@ -52,7 +53,6 @@ import com.xabber.android.ui.dialog.ChatExportDialogFragment;
import com.xabber.android.ui.helper.AccountPainter; import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.android.ui.helper.ContactTitleInflater; import com.xabber.android.ui.helper.ContactTitleInflater;
import com.xabber.android.ui.preferences.ChatEditor; import com.xabber.android.ui.preferences.ChatEditor;
import com.xabber.androiddev.R;
public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItemClickListener, public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItemClickListener,
View.OnClickListener, Toolbar.OnMenuItemClickListener, ChatMessageAdapter.Message.MessageClickListener { View.OnClickListener, Toolbar.OnMenuItemClickListener, ChatMessageAdapter.Message.MessageClickListener {
...@@ -77,6 +77,7 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem ...@@ -77,6 +77,7 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem
private RecyclerView recyclerView; private RecyclerView recyclerView;
private View contactTitleView; private View contactTitleView;
private AbstractContact abstractContact; private AbstractContact abstractContact;
private LinearLayoutManager layoutManager;
public static ChatViewerFragment newInstance(String account, String user) { public static ChatViewerFragment newInstance(String account, String user) {
ChatViewerFragment fragment = new ChatViewerFragment(); ChatViewerFragment fragment = new ChatViewerFragment();
...@@ -157,7 +158,7 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem ...@@ -157,7 +158,7 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem
recyclerView = (RecyclerView) view.findViewById(R.id.chat_messages_recycler_view); recyclerView = (RecyclerView) view.findViewById(R.id.chat_messages_recycler_view);
recyclerView.setAdapter(chatMessageAdapter); recyclerView.setAdapter(chatMessageAdapter);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setStackFromEnd(true); layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager); recyclerView.setLayoutManager(layoutManager);
...@@ -408,12 +409,19 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem ...@@ -408,12 +409,19 @@ public class ChatViewerFragment extends Fragment implements PopupMenu.OnMenuItem
public void updateChat() { public void updateChat() {
ContactTitleInflater.updateTitle(contactTitleView, getActivity(), abstractContact); ContactTitleInflater.updateTitle(contactTitleView, getActivity(), abstractContact);
int itemCountBeforeUpdate = recyclerView.getAdapter().getItemCount();
chatMessageAdapter.onChange(); chatMessageAdapter.onChange();
recyclerView.scrollToPosition(chatMessageAdapter.getItemCount() - 1); scrollChat(itemCountBeforeUpdate);
setUpOptionsMenu(toolbar.getMenu()); setUpOptionsMenu(toolbar.getMenu());
updateSecurityButton(); updateSecurityButton();
} }
private void scrollChat(int itemCountBeforeUpdate) {
if (layoutManager.findLastVisibleItemPosition() == (itemCountBeforeUpdate - 1)) {
recyclerView.scrollToPosition(chatMessageAdapter.getItemCount() - 1);
}
}
private void updateSecurityButton() { private void updateSecurityButton() {
SecurityLevel securityLevel = OTRManager.getInstance().getSecurityLevel(account, user); SecurityLevel securityLevel = OTRManager.getInstance().getSecurityLevel(account, user);
securityButton.setImageLevel(securityLevel.getImageLevel()); securityButton.setImageLevel(securityLevel.getImageLevel());
......
...@@ -22,10 +22,10 @@ import android.view.Menu; ...@@ -22,10 +22,10 @@ import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import com.xabber.android.R;
import com.xabber.android.data.intent.EntityIntentBuilder; import com.xabber.android.data.intent.EntityIntentBuilder;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
public class ContactAdd extends ManagedActivity implements ContactAddFragment.Listener { public class ContactAdd extends ManagedActivity implements ContactAddFragment.Listener {
......
...@@ -11,6 +11,7 @@ import android.widget.EditText; ...@@ -11,6 +11,7 @@ import android.widget.EditText;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.Toast; import android.widget.Toast;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
...@@ -18,7 +19,6 @@ import com.xabber.android.data.message.MessageManager; ...@@ -18,7 +19,6 @@ import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.roster.PresenceManager; import com.xabber.android.data.roster.PresenceManager;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.adapter.AccountChooseAdapter; import com.xabber.android.ui.adapter.AccountChooseAdapter;
import com.xabber.androiddev.R;
import java.util.Collection; import java.util.Collection;
...@@ -27,13 +27,10 @@ public class ContactAddFragment extends GroupEditorFragment implements AdapterVi ...@@ -27,13 +27,10 @@ public class ContactAddFragment extends GroupEditorFragment implements AdapterVi
private static final String SAVED_NAME = "com.xabber.android.ui.ContactAdd.SAVED_NAME"; private static final String SAVED_NAME = "com.xabber.android.ui.ContactAdd.SAVED_NAME";
private static final String SAVED_ACCOUNT = "com.xabber.android.ui.ContactAdd.SAVED_ACCOUNT"; private static final String SAVED_ACCOUNT = "com.xabber.android.ui.ContactAdd.SAVED_ACCOUNT";
private static final String SAVED_USER = "com.xabber.android.ui.ContactAdd.SAVED_USER"; private static final String SAVED_USER = "com.xabber.android.ui.ContactAdd.SAVED_USER";
Listener listenerActivity;
private Spinner accountView; private Spinner accountView;
private EditText userView; private EditText userView;
private EditText nameView; private EditText nameView;
Listener listenerActivity;
private String name; private String name;
private View accountSelectorPanel; private View accountSelectorPanel;
......
...@@ -9,16 +9,21 @@ import android.view.Menu; ...@@ -9,16 +9,21 @@ import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.widget.EditText; import android.widget.EditText;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.intent.EntityIntentBuilder; import com.xabber.android.data.intent.EntityIntentBuilder;
import com.xabber.android.data.roster.RosterContact; import com.xabber.android.data.roster.RosterContact;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.dialog.ContactDeleteDialogFragment; import com.xabber.android.ui.dialog.ContactDeleteDialogFragment;
import com.xabber.androiddev.R;
public class ContactEditor extends ContactViewer { public class ContactEditor extends ContactViewer {
public static Intent createIntent(Context context, String account, String user) {
return new EntityIntentBuilder(context, ContactEditor.class)
.setAccount(account).setUser(user).build();
}
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.contact_viewer, menu); getMenuInflater().inflate(R.menu.contact_viewer, menu);
...@@ -76,9 +81,4 @@ public class ContactEditor extends ContactViewer { ...@@ -76,9 +81,4 @@ public class ContactEditor extends ContactViewer {
builder.show(); builder.show();
} }
public static Intent createIntent(Context context, String account, String user) {
return new EntityIntentBuilder(context, ContactEditor.class)
.setAccount(account).setUser(user).build();
}
} }
...@@ -40,6 +40,7 @@ import android.view.inputmethod.InputMethodManager; ...@@ -40,6 +40,7 @@ import android.view.inputmethod.InputMethodManager;
import android.widget.SearchView; import android.widget.SearchView;
import android.widget.Toast; import android.widget.Toast;
import com.xabber.android.R;
import com.xabber.android.data.ActivityManager; import com.xabber.android.data.ActivityManager;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
...@@ -67,7 +68,6 @@ import com.xabber.android.ui.helper.ManagedActivity; ...@@ -67,7 +68,6 @@ import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.android.ui.preferences.AboutViewer; import com.xabber.android.ui.preferences.AboutViewer;
import com.xabber.android.ui.preferences.AccountEditor; import com.xabber.android.ui.preferences.AccountEditor;
import com.xabber.android.ui.preferences.PreferenceEditor; import com.xabber.android.ui.preferences.PreferenceEditor;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import com.xabber.xmpp.uri.XMPPUri; import com.xabber.xmpp.uri.XMPPUri;
...@@ -158,7 +158,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -158,7 +158,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.production_title, R.string.production_title); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.application_title_short, R.string.application_title_short);
drawerLayout.setDrawerListener(drawerToggle); drawerLayout.setDrawerListener(drawerToggle);
getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setHomeButtonEnabled(true);
...@@ -167,7 +167,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList ...@@ -167,7 +167,7 @@ public class ContactList extends ManagedActivity implements OnAccountChangedList
barPainter = new BarPainter(this, toolbar); barPainter = new BarPainter(this, toolbar);
barPainter.setDefaultColor(); barPainter.setDefaultColor();
setTitle(getString(R.string.application_name)); setTitle(getString(R.string.application_title_full));
if (savedInstanceState != null) { if (savedInstanceState != null) {
sendText = savedInstanceState.getString(SAVED_SEND_TEXT); sendText = savedInstanceState.getString(SAVED_SEND_TEXT);
......
...@@ -12,11 +12,11 @@ import android.view.ViewGroup; ...@@ -12,11 +12,11 @@ import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.ListView; import android.widget.ListView;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.OnAccountChangedListener; import com.xabber.android.data.account.OnAccountChangedListener;
import com.xabber.android.ui.adapter.NavigationDrawerAccountAdapter; import com.xabber.android.ui.adapter.NavigationDrawerAccountAdapter;
import com.xabber.android.ui.helper.AccountPainter; import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.androiddev.R;
import java.util.Collection; import java.util.Collection;
......
...@@ -22,6 +22,7 @@ import android.widget.PopupMenu; ...@@ -22,6 +22,7 @@ import android.widget.PopupMenu;
import android.widget.TextView; import android.widget.TextView;
import com.melnykov.fab.FloatingActionButton; import com.melnykov.fab.FloatingActionButton;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
...@@ -44,7 +45,6 @@ import com.xabber.android.ui.adapter.UpdatableAdapter; ...@@ -44,7 +45,6 @@ import com.xabber.android.ui.adapter.UpdatableAdapter;
import com.xabber.android.ui.helper.AccountPainter; import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.android.ui.helper.ContextMenuHelper; import com.xabber.android.ui.helper.ContextMenuHelper;
import com.xabber.android.ui.preferences.AccountList; import com.xabber.android.ui.preferences.AccountList;
import com.xabber.androiddev.R;
import java.util.Collection; import java.util.Collection;
......
...@@ -23,6 +23,7 @@ import android.widget.Button; ...@@ -23,6 +23,7 @@ import android.widget.Button;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.intent.EntityIntentBuilder; import com.xabber.android.data.intent.EntityIntentBuilder;
...@@ -33,7 +34,6 @@ import com.xabber.android.data.roster.SubscriptionRequest; ...@@ -33,7 +34,6 @@ import com.xabber.android.data.roster.SubscriptionRequest;
import com.xabber.android.ui.helper.AccountPainter; import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.SingleActivity; import com.xabber.android.ui.helper.SingleActivity;
import com.xabber.androiddev.R;
public class ContactSubscription extends SingleActivity implements View.OnClickListener { public class ContactSubscription extends SingleActivity implements View.OnClickListener {
......
...@@ -12,6 +12,7 @@ import android.widget.ImageView; ...@@ -12,6 +12,7 @@ import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.VcardMaps; import com.xabber.android.data.VcardMaps;
...@@ -24,7 +25,6 @@ import com.xabber.android.data.extension.vcard.VCardManager; ...@@ -24,7 +25,6 @@ import com.xabber.android.data.extension.vcard.VCardManager;
import com.xabber.android.data.roster.OnContactChangedListener; import com.xabber.android.data.roster.OnContactChangedListener;
import com.xabber.android.data.roster.PresenceManager; import com.xabber.android.data.roster.PresenceManager;
import com.xabber.android.data.roster.ResourceItem; import com.xabber.android.data.roster.ResourceItem;
import com.xabber.androiddev.R;
import com.xabber.xmpp.vcard.Address; import com.xabber.xmpp.vcard.Address;
import com.xabber.xmpp.vcard.AddressProperty; import com.xabber.xmpp.vcard.AddressProperty;
import com.xabber.xmpp.vcard.AddressType; import com.xabber.xmpp.vcard.AddressType;
...@@ -47,18 +47,14 @@ import java.util.Collection; ...@@ -47,18 +47,14 @@ import java.util.Collection;
import java.util.List; import java.util.List;
public class ContactVcardViewerFragment extends Fragment implements OnVCardListener, OnContactChangedListener, OnAccountChangedListener { public class ContactVcardViewerFragment extends Fragment implements OnVCardListener, OnContactChangedListener, OnAccountChangedListener {
private static final String SAVED_VCARD = "com.xabber.android.ui.ContactVcardViewerFragment.SAVED_VCARD";
private static final String SAVED_VCARD_ERROR = "com.xabber.android.ui.ContactVcardViewerFragment.SAVED_VCARD_ERROR";
public static final String ARGUMENT_ACCOUNT = "com.xabber.android.ui.ContactVcardViewerFragment.ARGUMENT_ACCOUNT"; public static final String ARGUMENT_ACCOUNT = "com.xabber.android.ui.ContactVcardViewerFragment.ARGUMENT_ACCOUNT";
public static final String ARGUMENT_USER = "com.xabber.android.ui.ContactVcardViewerFragment.ARGUMENT_USER"; public static final String ARGUMENT_USER = "com.xabber.android.ui.ContactVcardViewerFragment.ARGUMENT_USER";
private static final String SAVED_VCARD = "com.xabber.android.ui.ContactVcardViewerFragment.SAVED_VCARD";
private LinearLayout xmppItems; private static final String SAVED_VCARD_ERROR = "com.xabber.android.ui.ContactVcardViewerFragment.SAVED_VCARD_ERROR";
private LinearLayout contactInfoItems;
String account; String account;
String user; String user;
private LinearLayout xmppItems;
private LinearLayout contactInfoItems;
private VCard vCard; private VCard vCard;
private boolean vCardError; private boolean vCardError;
......
...@@ -21,6 +21,7 @@ import android.os.Bundle; ...@@ -21,6 +21,7 @@ import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.account.OnAccountChangedListener; import com.xabber.android.data.account.OnAccountChangedListener;
...@@ -34,7 +35,6 @@ import com.xabber.android.data.roster.RosterContact; ...@@ -34,7 +35,6 @@ import com.xabber.android.data.roster.RosterContact;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.helper.ContactTitleExpandableToolbarInflater; import com.xabber.android.ui.helper.ContactTitleExpandableToolbarInflater;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import java.util.Collection; import java.util.Collection;
...@@ -49,6 +49,19 @@ public class ContactViewer extends ManagedActivity implements ...@@ -49,6 +49,19 @@ public class ContactViewer extends ManagedActivity implements
private ContactTitleExpandableToolbarInflater contactTitleExpandableToolbarInflater; private ContactTitleExpandableToolbarInflater contactTitleExpandableToolbarInflater;
private TextView contactNameView; private TextView contactNameView;
public static Intent createIntent(Context context, String account, String user) {
return new EntityIntentBuilder(context, ContactViewer.class)
.setAccount(account).setUser(user).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -140,20 +153,6 @@ public class ContactViewer extends ManagedActivity implements ...@@ -140,20 +153,6 @@ public class ContactViewer extends ManagedActivity implements
} }
} }
public static Intent createIntent(Context context, String account, String user) {
return new EntityIntentBuilder(context, ContactViewer.class)
.setAccount(account).setUser(user).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
protected String getAccount() { protected String getAccount() {
return account; return account;
} }
......
...@@ -32,6 +32,7 @@ import android.widget.TextView; ...@@ -32,6 +32,7 @@ import android.widget.TextView;
import com.google.zxing.integration.android.IntentIntegrator; import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult; import com.google.zxing.integration.android.IntentResult;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.account.OnAccountChangedListener; import com.xabber.android.data.account.OnAccountChangedListener;
...@@ -50,7 +51,6 @@ import com.xabber.android.ui.dialog.NotificationDialogBuilder; ...@@ -50,7 +51,6 @@ import com.xabber.android.ui.dialog.NotificationDialogBuilder;
import com.xabber.android.ui.dialog.NotificationDialogListener; import com.xabber.android.ui.dialog.NotificationDialogListener;
import com.xabber.android.ui.helper.ContactTitleActionBarInflater; import com.xabber.android.ui.helper.ContactTitleActionBarInflater;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import java.util.Collection; import java.util.Collection;
......
...@@ -19,6 +19,7 @@ import android.content.Intent; ...@@ -19,6 +19,7 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.account.OnAccountChangedListener; import com.xabber.android.data.account.OnAccountChangedListener;
...@@ -29,7 +30,6 @@ import com.xabber.android.data.roster.OnContactChangedListener; ...@@ -29,7 +30,6 @@ import com.xabber.android.data.roster.OnContactChangedListener;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.helper.ContactTitleActionBarInflater; import com.xabber.android.ui.helper.ContactTitleActionBarInflater;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import java.util.Collection; import java.util.Collection;
......
...@@ -13,11 +13,11 @@ import android.widget.CheckBox; ...@@ -13,11 +13,11 @@ import android.widget.CheckBox;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ListView; import android.widget.ListView;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.adapter.GroupEditorAdapter; import com.xabber.android.ui.adapter.GroupEditorAdapter;
import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
...@@ -45,6 +45,13 @@ public class GroupEditorFragment extends ListFragment implements TextWatcher, Vi ...@@ -45,6 +45,13 @@ public class GroupEditorFragment extends ListFragment implements TextWatcher, Vi
private CheckBox groupAddCheckBox; private CheckBox groupAddCheckBox;
private View footerView; private View footerView;
/**
* Mandatory empty constructor for the fragment manager to instantiate the
* fragment (e.g. upon screen orientation changes).
*/
public GroupEditorFragment() {
}
public static GroupEditorFragment newInstance(String account, String user) { public static GroupEditorFragment newInstance(String account, String user) {
GroupEditorFragment fragment = new GroupEditorFragment(); GroupEditorFragment fragment = new GroupEditorFragment();
Bundle args = new Bundle(); Bundle args = new Bundle();
...@@ -54,14 +61,15 @@ public class GroupEditorFragment extends ListFragment implements TextWatcher, Vi ...@@ -54,14 +61,15 @@ public class GroupEditorFragment extends ListFragment implements TextWatcher, Vi
return fragment; return fragment;
} }
/** public static void hideKeyboard(Activity activity) {
* Mandatory empty constructor for the fragment manager to instantiate the // Check if no view has focus:
* fragment (e.g. upon screen orientation changes). View view = activity.getCurrentFocus();
*/ if (view != null) {
public GroupEditorFragment() { InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
} }
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -134,7 +142,6 @@ public class GroupEditorFragment extends ListFragment implements TextWatcher, Vi ...@@ -134,7 +142,6 @@ public class GroupEditorFragment extends ListFragment implements TextWatcher, Vi
} }
} }
@Override @Override
public void onSaveInstanceState(Bundle outState) { public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
...@@ -218,15 +225,6 @@ public class GroupEditorFragment extends ListFragment implements TextWatcher, Vi ...@@ -218,15 +225,6 @@ public class GroupEditorFragment extends ListFragment implements TextWatcher, Vi
} }
} }
public static void hideKeyboard(Activity activity) {
// Check if no view has focus:
View view = activity.getCurrentFocus();
if (view != null) {
InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
@Override @Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { public void beforeTextChanged(CharSequence s, int start, int count, int after) {
...@@ -241,14 +239,14 @@ public class GroupEditorFragment extends ListFragment implements TextWatcher, Vi ...@@ -241,14 +239,14 @@ public class GroupEditorFragment extends ListFragment implements TextWatcher, Vi
return account; return account;
} }
protected String getUser() {
return user;
}
protected void setAccount(String account) { protected void setAccount(String account) {
this.account = account; this.account = account;
} }
protected String getUser() {
return user;
}
protected void setUser(String user) { protected void setUser(String user) {
this.user = user; this.user = user;
} }
......
...@@ -14,8 +14,6 @@ ...@@ -14,8 +14,6 @@
*/ */
package com.xabber.android.ui; package com.xabber.android.ui;
import java.util.Collection;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
...@@ -25,13 +23,15 @@ import android.view.animation.Animation; ...@@ -25,13 +23,15 @@ import android.view.animation.Animation;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.ActivityManager; import com.xabber.android.data.ActivityManager;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.account.OnAccountChangedListener; import com.xabber.android.data.account.OnAccountChangedListener;
import com.xabber.android.service.XabberService; import com.xabber.android.service.XabberService;
import com.xabber.android.ui.helper.SingleActivity; import com.xabber.android.ui.helper.SingleActivity;
import com.xabber.androiddev.R;
import java.util.Collection;
public class LoadActivity extends SingleActivity implements public class LoadActivity extends SingleActivity implements
OnAccountChangedListener { OnAccountChangedListener {
...@@ -39,6 +39,10 @@ public class LoadActivity extends SingleActivity implements ...@@ -39,6 +39,10 @@ public class LoadActivity extends SingleActivity implements
private Animation animation; private Animation animation;
private View disconnectedView; private View disconnectedView;
public static Intent createIntent(Context context) {
return new Intent(context, LoadActivity.class);
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -98,8 +102,4 @@ public class LoadActivity extends SingleActivity implements ...@@ -98,8 +102,4 @@ public class LoadActivity extends SingleActivity implements
ActivityManager.getInstance().cancelTask(this); ActivityManager.getInstance().cancelTask(this);
} }
public static Intent createIntent(Context context) {
return new Intent(context, LoadActivity.class);
}
} }
...@@ -29,6 +29,7 @@ import android.widget.EditText; ...@@ -29,6 +29,7 @@ import android.widget.EditText;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.Toast; import android.widget.Toast;
import com.xabber.android.R;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.extension.muc.MUCManager; import com.xabber.android.data.extension.muc.MUCManager;
import com.xabber.android.data.extension.muc.RoomInvite; import com.xabber.android.data.extension.muc.RoomInvite;
...@@ -39,7 +40,6 @@ import com.xabber.android.data.notification.NotificationManager; ...@@ -39,7 +40,6 @@ import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.ui.adapter.AccountChooseAdapter; import com.xabber.android.ui.adapter.AccountChooseAdapter;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.StringUtils;
......
...@@ -19,13 +19,13 @@ import android.content.Intent; ...@@ -19,13 +19,13 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.extension.muc.MUCManager; import com.xabber.android.data.extension.muc.MUCManager;
import com.xabber.android.data.extension.muc.RoomInvite; import com.xabber.android.data.extension.muc.RoomInvite;
import com.xabber.android.data.intent.AccountIntentBuilder; import com.xabber.android.data.intent.AccountIntentBuilder;
import com.xabber.android.data.intent.EntityIntentBuilder; import com.xabber.android.data.intent.EntityIntentBuilder;
import com.xabber.android.ui.helper.ManagedDialog; import com.xabber.android.ui.helper.ManagedDialog;
import com.xabber.androiddev.R;
public class MUCInvite extends ManagedDialog { public class MUCInvite extends ManagedDialog {
...@@ -33,6 +33,20 @@ public class MUCInvite extends ManagedDialog { ...@@ -33,6 +33,20 @@ public class MUCInvite extends ManagedDialog {
private String room; private String room;
private RoomInvite roomInvite; private RoomInvite roomInvite;
public static Intent createIntent(Context context, String account,
String room) {
return new EntityIntentBuilder(context, MUCInvite.class)
.setAccount(account).setUser(room).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -64,18 +78,4 @@ public class MUCInvite extends ManagedDialog { ...@@ -64,18 +78,4 @@ public class MUCInvite extends ManagedDialog {
finish(); finish();
} }
public static Intent createIntent(Context context, String account,
String room) {
return new EntityIntentBuilder(context, MUCInvite.class)
.setAccount(account).setUser(room).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
} }
...@@ -24,12 +24,12 @@ import android.view.View; ...@@ -24,12 +24,12 @@ import android.view.View;
import android.webkit.WebView; import android.webkit.WebView;
import android.webkit.WebViewClient; import android.webkit.WebViewClient;
import com.xabber.android.R;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.account.AccountProtocol; import com.xabber.android.data.account.AccountProtocol;
import com.xabber.android.data.account.OAuthManager; import com.xabber.android.data.account.OAuthManager;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
/** /**
* Activity with WebView for OAuth authorization. * Activity with WebView for OAuth authorization.
...@@ -48,6 +48,39 @@ public class OAuthActivity extends ManagedActivity { ...@@ -48,6 +48,39 @@ public class OAuthActivity extends ManagedActivity {
private String code; private String code;
private boolean loaded; private boolean loaded;
private static Intent createResultIntent(Context context,
String refreshToken) {
Intent intent = new Intent();
intent.putExtra(EXTRA_INVALIDATE, false);
intent.putExtra(EXTRA_REFRESH_TOKEN, refreshToken);
return intent;
}
private static Intent createInvalidateIntent(Context context) {
Intent intent = new Intent();
intent.putExtra(EXTRA_INVALIDATE, true);
return intent;
}
public static Intent createIntent(Context context, AccountProtocol protocol) {
Intent intent = new Intent(context, OAuthActivity.class);
intent.setData(Uri.parse(String.valueOf(protocol.ordinal())));
return intent;
}
public static boolean isInvalidated(Intent intent) {
return intent.getBooleanExtra(OAuthActivity.EXTRA_INVALIDATE, false);
}
public static String getToken(Intent intent) {
return intent.getStringExtra(OAuthActivity.EXTRA_REFRESH_TOKEN);
}
private static AccountProtocol getAccountProtocol(Intent intent) {
int index = Integer.valueOf(intent.getData().toString());
return AccountProtocol.values()[index];
}
@SuppressLint("SetJavaScriptEnabled") @SuppressLint("SetJavaScriptEnabled")
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
...@@ -85,39 +118,6 @@ public class OAuthActivity extends ManagedActivity { ...@@ -85,39 +118,6 @@ public class OAuthActivity extends ManagedActivity {
progress ? View.VISIBLE : View.GONE); progress ? View.VISIBLE : View.GONE);
} }
private static Intent createResultIntent(Context context,
String refreshToken) {
Intent intent = new Intent();
intent.putExtra(EXTRA_INVALIDATE, false);
intent.putExtra(EXTRA_REFRESH_TOKEN, refreshToken);
return intent;
}
private static Intent createInvalidateIntent(Context context) {
Intent intent = new Intent();
intent.putExtra(EXTRA_INVALIDATE, true);
return intent;
}
public static Intent createIntent(Context context, AccountProtocol protocol) {
Intent intent = new Intent(context, OAuthActivity.class);
intent.setData(Uri.parse(String.valueOf(protocol.ordinal())));
return intent;
}
public static boolean isInvalidated(Intent intent) {
return intent.getBooleanExtra(OAuthActivity.EXTRA_INVALIDATE, false);
}
public static String getToken(Intent intent) {
return intent.getStringExtra(OAuthActivity.EXTRA_REFRESH_TOKEN);
}
private static AccountProtocol getAccountProtocol(Intent intent) {
int index = Integer.valueOf(intent.getData().toString());
return AccountProtocol.values()[index];
}
private class OAuthWebViewClient extends WebViewClient { private class OAuthWebViewClient extends WebViewClient {
@Override @Override
......
...@@ -14,13 +14,12 @@ ...@@ -14,13 +14,12 @@
*/ */
package com.xabber.android.ui; package com.xabber.android.ui;
import java.util.Collection;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.OnAccountChangedListener; import com.xabber.android.data.account.OnAccountChangedListener;
import com.xabber.android.data.entity.BaseEntity; import com.xabber.android.data.entity.BaseEntity;
...@@ -30,9 +29,10 @@ import com.xabber.android.data.intent.EntityIntentBuilder; ...@@ -30,9 +29,10 @@ import com.xabber.android.data.intent.EntityIntentBuilder;
import com.xabber.android.data.roster.OnContactChangedListener; import com.xabber.android.data.roster.OnContactChangedListener;
import com.xabber.android.ui.adapter.OccupantListAdapter; import com.xabber.android.ui.adapter.OccupantListAdapter;
import com.xabber.android.ui.helper.ManagedListActivity; import com.xabber.android.ui.helper.ManagedListActivity;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import java.util.Collection;
/** /**
* Represent list of occupants in the room. * Represent list of occupants in the room.
* *
...@@ -45,6 +45,20 @@ public class OccupantList extends ManagedListActivity implements ...@@ -45,6 +45,20 @@ public class OccupantList extends ManagedListActivity implements
private String room; private String room;
private OccupantListAdapter listAdapter; private OccupantListAdapter listAdapter;
public static Intent createIntent(Context context, String account,
String user) {
return new EntityIntentBuilder(context, OccupantList.class)
.setAccount(account).setUser(user).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -99,18 +113,4 @@ public class OccupantList extends ManagedListActivity implements ...@@ -99,18 +113,4 @@ public class OccupantList extends ManagedListActivity implements
listAdapter.onChange(); listAdapter.onChange();
} }
public static Intent createIntent(Context context, String account,
String user) {
return new EntityIntentBuilder(context, OccupantList.class)
.setAccount(account).setUser(user).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
private static String getUser(Intent intent) {
return EntityIntentBuilder.getUser(intent);
}
} }
...@@ -21,11 +21,11 @@ import android.view.View; ...@@ -21,11 +21,11 @@ import android.view.View;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.EditText; import android.widget.EditText;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.intent.AccountIntentBuilder; import com.xabber.android.data.intent.AccountIntentBuilder;
import com.xabber.android.ui.helper.ManagedDialog; import com.xabber.android.ui.helper.ManagedDialog;
import com.xabber.androiddev.R;
/** /**
* Dialog with password request for authentication. * Dialog with password request for authentication.
...@@ -39,6 +39,15 @@ public class PasswordRequest extends ManagedDialog { ...@@ -39,6 +39,15 @@ public class PasswordRequest extends ManagedDialog {
private EditText passwordView; private EditText passwordView;
private CheckBox storePasswordView; private CheckBox storePasswordView;
public static Intent createIntent(Context context, String account) {
return new AccountIntentBuilder(context, PasswordRequest.class)
.setAccount(account).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -72,13 +81,4 @@ public class PasswordRequest extends ManagedDialog { ...@@ -72,13 +81,4 @@ public class PasswordRequest extends ManagedDialog {
finish(); finish();
} }
public static Intent createIntent(Context context, String account) {
return new AccountIntentBuilder(context, PasswordRequest.class)
.setAccount(account).build();
}
private static String getAccount(Intent intent) {
return AccountIntentBuilder.getAccount(intent);
}
} }
...@@ -23,6 +23,7 @@ import android.view.View.OnClickListener; ...@@ -23,6 +23,7 @@ import android.view.View.OnClickListener;
import android.widget.EditText; import android.widget.EditText;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
...@@ -36,7 +37,6 @@ import com.xabber.android.data.roster.OnContactChangedListener; ...@@ -36,7 +37,6 @@ import com.xabber.android.data.roster.OnContactChangedListener;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.helper.ContactTitleActionBarInflater; import com.xabber.android.ui.helper.ContactTitleActionBarInflater;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import java.util.Collection; import java.util.Collection;
......
...@@ -12,10 +12,10 @@ import android.view.ViewGroup; ...@@ -12,10 +12,10 @@ import android.view.ViewGroup;
import android.widget.ListView; import android.widget.ListView;
import android.widget.Toast; import android.widget.Toast;
import com.xabber.android.R;
import com.xabber.android.data.message.AbstractChat; import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.ui.adapter.ChatListAdapter; import com.xabber.android.ui.adapter.ChatListAdapter;
import com.xabber.android.ui.helper.AccountPainter; import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
......
...@@ -32,6 +32,7 @@ import android.widget.EditText; ...@@ -32,6 +32,7 @@ import android.widget.EditText;
import android.widget.ListView; import android.widget.ListView;
import android.widget.Spinner; import android.widget.Spinner;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
...@@ -43,7 +44,6 @@ import com.xabber.android.ui.adapter.StatusEditorAdapter; ...@@ -43,7 +44,6 @@ import com.xabber.android.ui.adapter.StatusEditorAdapter;
import com.xabber.android.ui.adapter.StatusModeAdapter; import com.xabber.android.ui.adapter.StatusModeAdapter;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedListActivity; import com.xabber.android.ui.helper.ManagedListActivity;
import com.xabber.androiddev.R;
public class StatusEditor extends ManagedListActivity implements OnItemClickListener, Toolbar.OnMenuItemClickListener, View.OnClickListener { public class StatusEditor extends ManagedListActivity implements OnItemClickListener, Toolbar.OnMenuItemClickListener, View.OnClickListener {
......
...@@ -7,10 +7,10 @@ import android.view.View; ...@@ -7,10 +7,10 @@ import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import com.melnykov.fab.FloatingActionButton; import com.melnykov.fab.FloatingActionButton;
import com.xabber.android.R;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.account.StatusMode; import com.xabber.android.data.account.StatusMode;
import com.xabber.android.data.extension.avatar.AvatarManager; import com.xabber.android.data.extension.avatar.AvatarManager;
import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
......
...@@ -15,16 +15,15 @@ ...@@ -15,16 +15,15 @@
package com.xabber.android.ui.adapter; package com.xabber.android.ui.adapter;
import android.app.Activity; import android.app.Activity;
import android.graphics.drawable.ColorDrawable;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.BaseAdapter; import android.widget.BaseAdapter;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.extension.avatar.AvatarManager; import com.xabber.android.data.extension.avatar.AvatarManager;
import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
...@@ -35,10 +34,9 @@ import java.util.Collections; ...@@ -35,10 +34,9 @@ import java.util.Collections;
* @author alexander.ivanov * @author alexander.ivanov
*/ */
public class AccountChooseAdapter extends BaseAdapter { public class AccountChooseAdapter extends BaseAdapter {
protected final ArrayList<String> accounts;
private final int[] accountColors; private final int[] accountColors;
private final Activity activity; private final Activity activity;
protected final ArrayList<String> accounts;
public AccountChooseAdapter(Activity activity) { public AccountChooseAdapter(Activity activity) {
super(); super();
......
...@@ -21,12 +21,12 @@ import android.view.ViewGroup; ...@@ -21,12 +21,12 @@ import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.connection.ConnectionState; import com.xabber.android.data.connection.ConnectionState;
import com.xabber.android.data.extension.avatar.AvatarManager; import com.xabber.android.data.extension.avatar.AvatarManager;
import com.xabber.android.ui.preferences.AccountList; import com.xabber.android.ui.preferences.AccountList;
import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
......
...@@ -14,8 +14,6 @@ ...@@ -14,8 +14,6 @@
*/ */
package com.xabber.android.ui.adapter; package com.xabber.android.ui.adapter;
import java.util.List;
import android.app.Activity; import android.app.Activity;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
...@@ -23,9 +21,11 @@ import android.widget.BaseAdapter; ...@@ -23,9 +21,11 @@ import android.widget.BaseAdapter;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.account.AccountType; import com.xabber.android.data.account.AccountType;
import com.xabber.androiddev.R;
import java.util.List;
/** /**
* Adapter for drop down list of account's types. * Adapter for drop down list of account's types.
......
...@@ -22,6 +22,7 @@ import android.view.ViewGroup; ...@@ -22,6 +22,7 @@ import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
...@@ -34,7 +35,6 @@ import com.xabber.android.data.message.MessageManager; ...@@ -34,7 +35,6 @@ import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.roster.AbstractContact; import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.utils.StringUtils; import com.xabber.android.utils.StringUtils;
import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
...@@ -43,23 +43,21 @@ import java.util.List; ...@@ -43,23 +43,21 @@ import java.util.List;
public class ChatMessageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements UpdatableAdapter { public class ChatMessageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements UpdatableAdapter {
private static final int VIEW_TYPE_HINT = 1;
public static final int VIEW_TYPE_INCOMING_MESSAGE = 2; public static final int VIEW_TYPE_INCOMING_MESSAGE = 2;
public static final int VIEW_TYPE_OUTGOING_MESSAGE = 3; public static final int VIEW_TYPE_OUTGOING_MESSAGE = 3;
private static final int VIEW_TYPE_HINT = 1;
private static final int VIEW_TYPE_ACTION_MESSAGE = 4; private static final int VIEW_TYPE_ACTION_MESSAGE = 4;
private final Context context; private final Context context;
private final Message.MessageClickListener messageClickListener; private final Message.MessageClickListener messageClickListener;
private String account;
private String user;
private boolean isMUC;
private List<MessageItem> messages;
/** /**
* Message font appearance. * Message font appearance.
*/ */
private final int appearanceStyle; private final int appearanceStyle;
private String account;
private String user;
private boolean isMUC;
private List<MessageItem> messages;
/** /**
* Text with extra information. * Text with extra information.
*/ */
......
...@@ -7,10 +7,10 @@ import android.view.View; ...@@ -7,10 +7,10 @@ import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import com.xabber.android.R;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.message.AbstractChat; import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.ui.helper.AccountPainter; import com.xabber.android.ui.helper.AccountPainter;
import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
......
...@@ -7,6 +7,7 @@ import android.view.LayoutInflater; ...@@ -7,6 +7,7 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.xabber.android.R;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
import com.xabber.android.data.extension.capability.ClientSoftware; import com.xabber.android.data.extension.capability.ClientSoftware;
import com.xabber.android.data.extension.muc.MUCManager; import com.xabber.android.data.extension.muc.MUCManager;
...@@ -16,13 +17,12 @@ import com.xabber.android.data.roster.AbstractContact; ...@@ -16,13 +17,12 @@ import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.ui.ContactEditor; import com.xabber.android.ui.ContactEditor;
import com.xabber.android.ui.ContactViewer; import com.xabber.android.ui.ContactViewer;
import com.xabber.android.utils.StringUtils; import com.xabber.android.utils.StringUtils;
import com.xabber.androiddev.R;
public class ContactItemInflater { public class ContactItemInflater {
final Context context; final Context context;
private int[] accountMainColors;
private final int elevation; private final int elevation;
private int[] accountMainColors;
public ContactItemInflater(Context context) { public ContactItemInflater(Context context) {
this.context = context; this.context = context;
......
...@@ -4,7 +4,7 @@ import android.view.View; ...@@ -4,7 +4,7 @@ import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.androiddev.R; import com.xabber.android.R;
class ContactListItemViewHolder { class ContactListItemViewHolder {
......
...@@ -8,7 +8,7 @@ import android.widget.ArrayAdapter; ...@@ -8,7 +8,7 @@ import android.widget.ArrayAdapter;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.androiddev.R; import com.xabber.android.R;
import java.util.List; import java.util.List;
......
...@@ -26,6 +26,7 @@ import android.widget.BaseAdapter; ...@@ -26,6 +26,7 @@ import android.widget.BaseAdapter;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
...@@ -37,7 +38,6 @@ import com.xabber.android.data.roster.Group; ...@@ -37,7 +38,6 @@ import com.xabber.android.data.roster.Group;
import com.xabber.android.data.roster.GroupManager; import com.xabber.android.data.roster.GroupManager;
import com.xabber.android.data.roster.ShowOfflineMode; import com.xabber.android.data.roster.ShowOfflineMode;
import com.xabber.android.ui.ContactViewer; import com.xabber.android.ui.ContactViewer;
import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
...@@ -84,22 +84,19 @@ public abstract class GroupedContactAdapter extends BaseAdapter implements Updat ...@@ -84,22 +84,19 @@ public abstract class GroupedContactAdapter extends BaseAdapter implements Updat
NO_GROUP_LIST = Collections.unmodifiableCollection(groups); NO_GROUP_LIST = Collections.unmodifiableCollection(groups);
} }
final ArrayList<BaseEntity> baseEntities = new ArrayList<>();
/** /**
* Layout inflater * Layout inflater
*/ */
private final LayoutInflater layoutInflater; private final LayoutInflater layoutInflater;
private final Activity activity; private final Activity activity;
private int[] accountGroupColors;
private final int[] accountSubgroupColors; private final int[] accountSubgroupColors;
private final int activeChatsColor; private final int activeChatsColor;
private final OnClickListener onClickListener; private final OnClickListener onClickListener;
final ArrayList<BaseEntity> baseEntities = new ArrayList<>();
protected Locale locale = Locale.getDefault();
private final ContactItemInflater contactItemInflater; private final ContactItemInflater contactItemInflater;
private final int accountElevation; private final int accountElevation;
protected Locale locale = Locale.getDefault();
private int[] accountGroupColors;
public GroupedContactAdapter(Activity activity, OnClickListener onClickListener) { public GroupedContactAdapter(Activity activity, OnClickListener onClickListener) {
this.activity = activity; this.activity = activity;
...@@ -554,6 +551,10 @@ public abstract class GroupedContactAdapter extends BaseAdapter implements Updat ...@@ -554,6 +551,10 @@ public abstract class GroupedContactAdapter extends BaseAdapter implements Updat
onChange(); onChange();
} }
public interface OnClickListener {
void onAccountMenuClick(View view, String account);
}
/** /**
* Holder for views in contact list group. * Holder for views in contact list group.
*/ */
...@@ -571,8 +572,4 @@ public abstract class GroupedContactAdapter extends BaseAdapter implements Updat ...@@ -571,8 +572,4 @@ public abstract class GroupedContactAdapter extends BaseAdapter implements Updat
} }
} }
public interface OnClickListener {
void onAccountMenuClick(View view, String account);
}
} }
...@@ -7,11 +7,11 @@ import android.view.ViewGroup; ...@@ -7,11 +7,11 @@ import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.connection.ConnectionState; import com.xabber.android.data.connection.ConnectionState;
import com.xabber.android.data.extension.avatar.AvatarManager; import com.xabber.android.data.extension.avatar.AvatarManager;
import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
......
...@@ -14,9 +14,6 @@ ...@@ -14,9 +14,6 @@
*/ */
package com.xabber.android.ui.adapter; package com.xabber.android.ui.adapter;
import java.util.ArrayList;
import java.util.Collections;
import android.app.Activity; import android.app.Activity;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
...@@ -24,13 +21,16 @@ import android.widget.BaseAdapter; ...@@ -24,13 +21,16 @@ import android.widget.BaseAdapter;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.extension.avatar.AvatarManager; import com.xabber.android.data.extension.avatar.AvatarManager;
import com.xabber.android.data.extension.muc.MUCManager; import com.xabber.android.data.extension.muc.MUCManager;
import com.xabber.android.data.extension.muc.Occupant; import com.xabber.android.data.extension.muc.Occupant;
import com.xabber.android.ui.OccupantList; import com.xabber.android.ui.OccupantList;
import com.xabber.androiddev.R;
import com.xabber.xmpp.muc.Role; import com.xabber.xmpp.muc.Role;
import java.util.ArrayList;
import java.util.Collections;
/** /**
* Adapter for {@link OccupantList}. * Adapter for {@link OccupantList}.
* *
......
...@@ -14,16 +14,16 @@ ...@@ -14,16 +14,16 @@
*/ */
package com.xabber.android.ui.adapter; package com.xabber.android.ui.adapter;
import java.util.Collection;
import android.app.Activity; import android.app.Activity;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.message.phrase.Phrase; import com.xabber.android.data.message.phrase.Phrase;
import com.xabber.android.data.message.phrase.PhraseManager; import com.xabber.android.data.message.phrase.PhraseManager;
import com.xabber.androiddev.R;
import java.util.Collection;
/** /**
* This class manage list of phrases. * This class manage list of phrases.
......
...@@ -14,9 +14,6 @@ ...@@ -14,9 +14,6 @@
*/ */
package com.xabber.android.ui.adapter; package com.xabber.android.ui.adapter;
import java.util.ArrayList;
import java.util.Collections;
import android.app.Activity; import android.app.Activity;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
...@@ -24,9 +21,12 @@ import android.widget.BaseAdapter; ...@@ -24,9 +21,12 @@ import android.widget.BaseAdapter;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.account.SavedStatus; import com.xabber.android.data.account.SavedStatus;
import com.xabber.androiddev.R;
import java.util.ArrayList;
import java.util.Collections;
/** /**
* Adapter for saved statuses. * Adapter for saved statuses.
......
...@@ -14,8 +14,6 @@ ...@@ -14,8 +14,6 @@
*/ */
package com.xabber.android.ui.adapter; package com.xabber.android.ui.adapter;
import java.util.ArrayList;
import android.app.Activity; import android.app.Activity;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
...@@ -23,8 +21,10 @@ import android.widget.BaseAdapter; ...@@ -23,8 +21,10 @@ import android.widget.BaseAdapter;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.account.StatusMode; import com.xabber.android.data.account.StatusMode;
import com.xabber.androiddev.R;
import java.util.ArrayList;
/** /**
* Adapter for available status modes. * Adapter for available status modes.
......
...@@ -25,12 +25,12 @@ import android.widget.CheckBox; ...@@ -25,12 +25,12 @@ import android.widget.CheckBox;
import android.widget.EditText; import android.widget.EditText;
import android.widget.Toast; import android.widget.Toast;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.message.MessageManager; import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.androiddev.R;
import java.io.File; import java.io.File;
...@@ -38,6 +38,10 @@ public class ChatExportDialogFragment extends ConfirmDialogFragment { ...@@ -38,6 +38,10 @@ public class ChatExportDialogFragment extends ConfirmDialogFragment {
private static final String ACCOUNT = "ACCOUNT"; private static final String ACCOUNT = "ACCOUNT";
private static final String USER = "USER"; private static final String USER = "USER";
private String account;
private String user;
private EditText nameView;
private CheckBox sendView;
/** /**
* @param account * @param account
...@@ -48,11 +52,6 @@ public class ChatExportDialogFragment extends ConfirmDialogFragment { ...@@ -48,11 +52,6 @@ public class ChatExportDialogFragment extends ConfirmDialogFragment {
return new ChatExportDialogFragment().putAgrument(ACCOUNT, account).putAgrument(USER, user); return new ChatExportDialogFragment().putAgrument(ACCOUNT, account).putAgrument(USER, user);
} }
private String account;
private String user;
private EditText nameView;
private CheckBox sendView;
@Override @Override
protected Builder getBuilder() { protected Builder getBuilder() {
account = getArguments().getString(ACCOUNT); account = getArguments().getString(ACCOUNT);
......
...@@ -3,18 +3,20 @@ package com.xabber.android.ui.dialog; ...@@ -3,18 +3,20 @@ package com.xabber.android.ui.dialog;
import android.app.AlertDialog.Builder; import android.app.AlertDialog.Builder;
import android.app.DialogFragment; import android.app.DialogFragment;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.ui.ContactList; import com.xabber.android.ui.ContactList;
import com.xabber.android.ui.ContactViewer; import com.xabber.android.ui.ContactViewer;
import com.xabber.androiddev.R;
public class ContactDeleteDialogFragment extends ConfirmDialogFragment { public class ContactDeleteDialogFragment extends ConfirmDialogFragment {
private static final String ACCOUNT = "ACCOUNT"; private static final String ACCOUNT = "ACCOUNT";
private static final String USER = "USER"; private static final String USER = "USER";
private String user;
private String account;
/** /**
* @param account * @param account
...@@ -26,9 +28,6 @@ public class ContactDeleteDialogFragment extends ConfirmDialogFragment { ...@@ -26,9 +28,6 @@ public class ContactDeleteDialogFragment extends ConfirmDialogFragment {
.putAgrument(USER, user); .putAgrument(USER, user);
} }
private String user;
private String account;
@Override @Override
protected Builder getBuilder() { protected Builder getBuilder() {
user = getArguments().getString(USER); user = getArguments().getString(USER);
......
...@@ -3,9 +3,9 @@ package com.xabber.android.ui.dialog; ...@@ -3,9 +3,9 @@ package com.xabber.android.ui.dialog;
import android.app.AlertDialog.Builder; import android.app.AlertDialog.Builder;
import android.app.DialogFragment; import android.app.DialogFragment;
import com.xabber.android.R;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.androiddev.R;
public class ContactIntegrationDialogFragment extends ConfirmDialogFragment { public class ContactIntegrationDialogFragment extends ConfirmDialogFragment {
......
...@@ -3,15 +3,17 @@ package com.xabber.android.ui.dialog; ...@@ -3,15 +3,17 @@ package com.xabber.android.ui.dialog;
import android.app.AlertDialog.Builder; import android.app.AlertDialog.Builder;
import android.app.DialogFragment; import android.app.DialogFragment;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.androiddev.R;
public class GroupDeleteDialogFragment extends ConfirmDialogFragment { public class GroupDeleteDialogFragment extends ConfirmDialogFragment {
private static final String ACCOUNT = "ACCOUNT"; private static final String ACCOUNT = "ACCOUNT";
private static final String GROUP = "GROUP"; private static final String GROUP = "GROUP";
private String group;
private String account;
/** /**
* @param account can be <code>null</code> to be used for all accounts. * @param account can be <code>null</code> to be used for all accounts.
...@@ -23,9 +25,6 @@ public class GroupDeleteDialogFragment extends ConfirmDialogFragment { ...@@ -23,9 +25,6 @@ public class GroupDeleteDialogFragment extends ConfirmDialogFragment {
.putAgrument(GROUP, group); .putAgrument(GROUP, group);
} }
private String group;
private String account;
@Override @Override
protected Builder getBuilder() { protected Builder getBuilder() {
group = getArguments().getString(GROUP); group = getArguments().getString(GROUP);
......
...@@ -21,15 +21,18 @@ import android.view.View; ...@@ -21,15 +21,18 @@ import android.view.View;
import android.widget.EditText; import android.widget.EditText;
import android.widget.Toast; import android.widget.Toast;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.androiddev.R;
public class GroupRenameDialogFragment extends ConfirmDialogFragment { public class GroupRenameDialogFragment extends ConfirmDialogFragment {
private static final String ACCOUNT = "ACCOUNT"; private static final String ACCOUNT = "ACCOUNT";
private static final String GROUP = "GROUP"; private static final String GROUP = "GROUP";
private String group;
private String account;
private EditText nameView;
/** /**
* @param account can be <code>null</code> to be used for all accounts. * @param account can be <code>null</code> to be used for all accounts.
...@@ -41,10 +44,6 @@ public class GroupRenameDialogFragment extends ConfirmDialogFragment { ...@@ -41,10 +44,6 @@ public class GroupRenameDialogFragment extends ConfirmDialogFragment {
.putAgrument(GROUP, group); .putAgrument(GROUP, group);
} }
private String group;
private String account;
private EditText nameView;
@Override @Override
protected Builder getBuilder() { protected Builder getBuilder() {
group = getArguments().getString(GROUP); group = getArguments().getString(GROUP);
......
...@@ -3,17 +3,19 @@ package com.xabber.android.ui.dialog; ...@@ -3,17 +3,19 @@ package com.xabber.android.ui.dialog;
import android.app.AlertDialog.Builder; import android.app.AlertDialog.Builder;
import android.app.DialogFragment; import android.app.DialogFragment;
import com.xabber.android.R;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.extension.muc.MUCManager; import com.xabber.android.data.extension.muc.MUCManager;
import com.xabber.android.data.message.MessageManager; import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.notification.NotificationManager; import com.xabber.android.data.notification.NotificationManager;
import com.xabber.android.data.roster.RosterManager; import com.xabber.android.data.roster.RosterManager;
import com.xabber.androiddev.R;
public class MUCDeleteDialogFragment extends ConfirmDialogFragment { public class MUCDeleteDialogFragment extends ConfirmDialogFragment {
private static final String ACCOUNT = "ACCOUNT"; private static final String ACCOUNT = "ACCOUNT";
private static final String USER = "USER"; private static final String USER = "USER";
private String user;
private String account;
/** /**
* @param account * @param account
...@@ -25,9 +27,6 @@ public class MUCDeleteDialogFragment extends ConfirmDialogFragment { ...@@ -25,9 +27,6 @@ public class MUCDeleteDialogFragment extends ConfirmDialogFragment {
.putAgrument(USER, user); .putAgrument(USER, user);
} }
private String user;
private String account;
@Override @Override
protected Builder getBuilder() { protected Builder getBuilder() {
user = getArguments().getString(USER); user = getArguments().getString(USER);
......
...@@ -20,8 +20,8 @@ import android.content.DialogInterface; ...@@ -20,8 +20,8 @@ import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import com.xabber.android.R;
import com.xabber.android.ui.helper.OrbotHelper; import com.xabber.android.ui.helper.OrbotHelper;
import com.xabber.androiddev.R;
/** /**
* Orbot installer dialog builder. * Orbot installer dialog builder.
......
...@@ -3,8 +3,8 @@ package com.xabber.android.ui.dialog; ...@@ -3,8 +3,8 @@ package com.xabber.android.ui.dialog;
import android.app.AlertDialog.Builder; import android.app.AlertDialog.Builder;
import android.app.DialogFragment; import android.app.DialogFragment;
import com.xabber.android.R;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
import com.xabber.androiddev.R;
public class StartAtBootDialogFragment extends ConfirmDialogFragment { public class StartAtBootDialogFragment extends ConfirmDialogFragment {
......
...@@ -3,8 +3,8 @@ package com.xabber.android.ui.helper; ...@@ -3,8 +3,8 @@ package com.xabber.android.ui.helper;
import android.content.Context; import android.content.Context;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import com.xabber.android.R;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.androiddev.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
......
...@@ -7,8 +7,8 @@ import android.view.LayoutInflater; ...@@ -7,8 +7,8 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.roster.AbstractContact; import com.xabber.android.data.roster.AbstractContact;
import com.xabber.androiddev.R;
public class ContactTitleActionBarInflater { public class ContactTitleActionBarInflater {
......
...@@ -17,9 +17,9 @@ import com.github.ksoichiro.android.observablescrollview.ObservableScrollView; ...@@ -17,9 +17,9 @@ import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks; import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks;
import com.github.ksoichiro.android.observablescrollview.ScrollState; import com.github.ksoichiro.android.observablescrollview.ScrollState;
import com.github.ksoichiro.android.observablescrollview.ScrollUtils; import com.github.ksoichiro.android.observablescrollview.ScrollUtils;
import com.xabber.android.R;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.roster.AbstractContact; import com.xabber.android.data.roster.AbstractContact;
import com.xabber.androiddev.R;
import static java.lang.Math.pow; import static java.lang.Math.pow;
import static java.lang.Math.round; import static java.lang.Math.round;
......
...@@ -19,9 +19,9 @@ import android.view.View; ...@@ -19,9 +19,9 @@ import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.data.extension.cs.ChatStateManager; import com.xabber.android.data.extension.cs.ChatStateManager;
import com.xabber.android.data.roster.AbstractContact; import com.xabber.android.data.roster.AbstractContact;
import com.xabber.androiddev.R;
import org.jivesoftware.smackx.ChatState; import org.jivesoftware.smackx.ChatState;
......
...@@ -22,6 +22,7 @@ import android.view.ContextMenu; ...@@ -22,6 +22,7 @@ import android.view.ContextMenu;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.NetworkException; import com.xabber.android.data.NetworkException;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
...@@ -49,7 +50,6 @@ import com.xabber.android.ui.dialog.GroupDeleteDialogFragment; ...@@ -49,7 +50,6 @@ import com.xabber.android.ui.dialog.GroupDeleteDialogFragment;
import com.xabber.android.ui.dialog.GroupRenameDialogFragment; import com.xabber.android.ui.dialog.GroupRenameDialogFragment;
import com.xabber.android.ui.dialog.MUCDeleteDialogFragment; import com.xabber.android.ui.dialog.MUCDeleteDialogFragment;
import com.xabber.android.ui.preferences.AccountEditor; import com.xabber.android.ui.preferences.AccountEditor;
import com.xabber.androiddev.R;
/** /**
* Helper class for context menu creation. * Helper class for context menu creation.
......
...@@ -21,7 +21,7 @@ import android.view.View.OnClickListener; ...@@ -21,7 +21,7 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.androiddev.R; import com.xabber.android.R;
/** /**
* Helper for dialog activities. * Helper for dialog activities.
......
...@@ -25,9 +25,9 @@ import android.text.method.LinkMovementMethod; ...@@ -25,9 +25,9 @@ import android.text.method.LinkMovementMethod;
import android.view.MenuItem; import android.view.MenuItem;
import android.widget.TextView; import android.widget.TextView;
import com.xabber.android.R;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
public class AboutViewer extends ManagedActivity { public class AboutViewer extends ManagedActivity {
......
...@@ -21,6 +21,7 @@ import android.preference.Preference; ...@@ -21,6 +21,7 @@ import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener; import android.preference.Preference.OnPreferenceClickListener;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
...@@ -29,7 +30,6 @@ import com.xabber.android.ui.OAuthActivity; ...@@ -29,7 +30,6 @@ import com.xabber.android.ui.OAuthActivity;
import com.xabber.android.ui.dialog.OrbotInstallerDialogBuilder; import com.xabber.android.ui.dialog.OrbotInstallerDialogBuilder;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
public class AccountEditor extends ManagedActivity implements public class AccountEditor extends ManagedActivity implements
OnPreferenceClickListener, AccountEditorFragment.AccountEditorFragmentInteractionListener { OnPreferenceClickListener, AccountEditorFragment.AccountEditorFragmentInteractionListener {
......
...@@ -5,6 +5,7 @@ import android.os.Bundle; ...@@ -5,6 +5,7 @@ import android.os.Bundle;
import android.preference.Preference; import android.preference.Preference;
import android.widget.Toast; import android.widget.Toast;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
...@@ -13,7 +14,6 @@ import com.xabber.android.data.account.ArchiveMode; ...@@ -13,7 +14,6 @@ import com.xabber.android.data.account.ArchiveMode;
import com.xabber.android.data.connection.ProxyType; import com.xabber.android.data.connection.ProxyType;
import com.xabber.android.data.connection.TLSMode; import com.xabber.android.data.connection.TLSMode;
import com.xabber.android.ui.helper.OrbotHelper; import com.xabber.android.ui.helper.OrbotHelper;
import com.xabber.androiddev.R;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
......
...@@ -21,6 +21,7 @@ import android.support.v7.widget.Toolbar; ...@@ -21,6 +21,7 @@ import android.support.v7.widget.Toolbar;
import android.view.ContextMenu; import android.view.ContextMenu;
import android.view.MenuItem; import android.view.MenuItem;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
...@@ -30,7 +31,6 @@ import com.xabber.android.ui.StatusEditor; ...@@ -30,7 +31,6 @@ import com.xabber.android.ui.StatusEditor;
import com.xabber.android.ui.adapter.AccountListAdapter; import com.xabber.android.ui.adapter.AccountListAdapter;
import com.xabber.android.ui.adapter.BaseListEditorAdapter; import com.xabber.android.ui.adapter.BaseListEditorAdapter;
import com.xabber.android.ui.helper.PreferenceSummaryHelper; import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
import java.util.Collection; import java.util.Collection;
......
...@@ -27,13 +27,13 @@ import android.widget.AdapterView; ...@@ -27,13 +27,13 @@ import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListView; import android.widget.ListView;
import com.xabber.android.R;
import com.xabber.android.ui.adapter.BaseListEditorAdapter; import com.xabber.android.ui.adapter.BaseListEditorAdapter;
import com.xabber.android.ui.dialog.ConfirmDialogBuilder; import com.xabber.android.ui.dialog.ConfirmDialogBuilder;
import com.xabber.android.ui.dialog.ConfirmDialogListener; import com.xabber.android.ui.dialog.ConfirmDialogListener;
import com.xabber.android.ui.dialog.DialogBuilder; import com.xabber.android.ui.dialog.DialogBuilder;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedListActivity; import com.xabber.android.ui.helper.ManagedListActivity;
import com.xabber.androiddev.R;
/** /**
* Provide possibility to add, edit and delete list items. * Provide possibility to add, edit and delete list items.
......
...@@ -4,10 +4,10 @@ package com.xabber.android.ui.preferences; ...@@ -4,10 +4,10 @@ package com.xabber.android.ui.preferences;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import com.xabber.android.R;
import com.xabber.android.data.message.phrase.Phrase; import com.xabber.android.data.message.phrase.Phrase;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
public abstract class BasePhrasePreferences extends ManagedActivity public abstract class BasePhrasePreferences extends ManagedActivity
implements PhraseEditorFragment.OnPhraseEditorFragmentInteractionListener { implements PhraseEditorFragment.OnPhraseEditorFragmentInteractionListener {
......
...@@ -5,10 +5,10 @@ import android.content.Context; ...@@ -5,10 +5,10 @@ import android.content.Context;
import android.preference.DialogPreference; import android.preference.DialogPreference;
import android.util.AttributeSet; import android.util.AttributeSet;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.account.StatusMode; import com.xabber.android.data.account.StatusMode;
import com.xabber.androiddev.R;
public class CacheClearDialog extends DialogPreference { public class CacheClearDialog extends DialogPreference {
public CacheClearDialog(Context context, AttributeSet attrs) { public CacheClearDialog(Context context, AttributeSet attrs) {
......
...@@ -19,13 +19,13 @@ import android.content.Intent; ...@@ -19,13 +19,13 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
import com.xabber.android.data.account.AccountManager; import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.intent.EntityIntentBuilder; import com.xabber.android.data.intent.EntityIntentBuilder;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
public class ChatEditor extends ManagedActivity public class ChatEditor extends ManagedActivity
implements ChatEditorFragment.ChatEditorFragmentInteractionListener { implements ChatEditorFragment.ChatEditorFragmentInteractionListener {
......
...@@ -4,10 +4,10 @@ package com.xabber.android.ui.preferences; ...@@ -4,10 +4,10 @@ package com.xabber.android.ui.preferences;
import android.app.Activity; import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import com.xabber.android.R;
import com.xabber.android.data.account.AccountItem; import com.xabber.android.data.account.AccountItem;
import com.xabber.android.data.account.ArchiveMode; import com.xabber.android.data.account.ArchiveMode;
import com.xabber.android.data.message.chat.ChatManager; import com.xabber.android.data.message.chat.ChatManager;
import com.xabber.androiddev.R;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -100,10 +100,10 @@ public class ChatEditorFragment extends BaseSettingsFragment { ...@@ -100,10 +100,10 @@ public class ChatEditorFragment extends BaseSettingsFragment {
} }
public interface ChatEditorFragmentInteractionListener { public interface ChatEditorFragmentInteractionListener {
public String getAccount(); String getAccount();
public AccountItem getAccountItem(); AccountItem getAccountItem();
public String getUser(); String getUser();
} }
} }
...@@ -3,10 +3,10 @@ package com.xabber.android.ui.preferences; ...@@ -3,10 +3,10 @@ package com.xabber.android.ui.preferences;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import com.xabber.android.R;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.android.ui.helper.PreferenceSummaryHelper; import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class ChatSettings extends ManagedActivity { public class ChatSettings extends ManagedActivity {
@Override @Override
......
...@@ -2,8 +2,8 @@ package com.xabber.android.ui.preferences; ...@@ -2,8 +2,8 @@ package com.xabber.android.ui.preferences;
import android.os.Bundle; import android.os.Bundle;
import com.xabber.android.R;
import com.xabber.android.ui.helper.PreferenceSummaryHelper; import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class ChatSettingsFragment extends android.preference.PreferenceFragment { public class ChatSettingsFragment extends android.preference.PreferenceFragment {
@Override @Override
......
...@@ -3,10 +3,10 @@ package com.xabber.android.ui.preferences; ...@@ -3,10 +3,10 @@ package com.xabber.android.ui.preferences;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import com.xabber.android.R;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.android.ui.helper.PreferenceSummaryHelper; import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class ConnectionSettings extends ManagedActivity { public class ConnectionSettings extends ManagedActivity {
@Override @Override
......
...@@ -2,8 +2,8 @@ package com.xabber.android.ui.preferences; ...@@ -2,8 +2,8 @@ package com.xabber.android.ui.preferences;
import android.os.Bundle; import android.os.Bundle;
import com.xabber.android.R;
import com.xabber.android.ui.helper.PreferenceSummaryHelper; import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class ConnectionSettingsFragment extends android.preference.PreferenceFragment { public class ConnectionSettingsFragment extends android.preference.PreferenceFragment {
@Override @Override
......
...@@ -3,10 +3,10 @@ package com.xabber.android.ui.preferences; ...@@ -3,10 +3,10 @@ package com.xabber.android.ui.preferences;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import com.xabber.android.R;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.android.ui.helper.PreferenceSummaryHelper; import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class ContactListSettings extends ManagedActivity { public class ContactListSettings extends ManagedActivity {
@Override @Override
......
...@@ -6,9 +6,9 @@ import android.preference.CheckBoxPreference; ...@@ -6,9 +6,9 @@ import android.preference.CheckBoxPreference;
import android.preference.PreferenceFragment; import android.preference.PreferenceFragment;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import com.xabber.android.R;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
import com.xabber.android.ui.helper.PreferenceSummaryHelper; import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class ContactListSettingsFragment extends PreferenceFragment public class ContactListSettingsFragment extends PreferenceFragment
implements SharedPreferences.OnSharedPreferenceChangeListener { implements SharedPreferences.OnSharedPreferenceChangeListener {
......
...@@ -3,10 +3,10 @@ package com.xabber.android.ui.preferences; ...@@ -3,10 +3,10 @@ package com.xabber.android.ui.preferences;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import com.xabber.android.R;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.android.ui.helper.PreferenceSummaryHelper; import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class DebugSettings extends ManagedActivity { public class DebugSettings extends ManagedActivity {
@Override @Override
......
...@@ -2,9 +2,9 @@ package com.xabber.android.ui.preferences; ...@@ -2,9 +2,9 @@ package com.xabber.android.ui.preferences;
import android.os.Bundle; import android.os.Bundle;
import com.xabber.android.R;
import com.xabber.android.data.LogManager; import com.xabber.android.data.LogManager;
import com.xabber.android.ui.helper.PreferenceSummaryHelper; import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class DebugSettingsFragment extends android.preference.PreferenceFragment { public class DebugSettingsFragment extends android.preference.PreferenceFragment {
@Override @Override
......
...@@ -4,10 +4,10 @@ package com.xabber.android.ui.preferences; ...@@ -4,10 +4,10 @@ package com.xabber.android.ui.preferences;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import com.xabber.android.R;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.android.ui.helper.PreferenceSummaryHelper; import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class NotificationsSettings extends ManagedActivity { public class NotificationsSettings extends ManagedActivity {
@Override @Override
......
...@@ -3,8 +3,8 @@ package com.xabber.android.ui.preferences; ...@@ -3,8 +3,8 @@ package com.xabber.android.ui.preferences;
import android.os.Bundle; import android.os.Bundle;
import com.xabber.android.R;
import com.xabber.android.ui.helper.PreferenceSummaryHelper; import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class NotificationsSettingsFragment extends android.preference.PreferenceFragment { public class NotificationsSettingsFragment extends android.preference.PreferenceFragment {
@Override @Override
......
...@@ -6,11 +6,15 @@ import android.os.Bundle; ...@@ -6,11 +6,15 @@ import android.os.Bundle;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import com.xabber.android.R;
import com.xabber.android.data.intent.SegmentIntentBuilder; import com.xabber.android.data.intent.SegmentIntentBuilder;
import com.xabber.androiddev.R;
public class PhraseAdder extends BasePhrasePreferences { public class PhraseAdder extends BasePhrasePreferences {
public static Intent createIntent(Context context) {
return new SegmentIntentBuilder<>(context, PhraseAdder.class).build();
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -45,8 +49,4 @@ public class PhraseAdder extends BasePhrasePreferences { ...@@ -45,8 +49,4 @@ public class PhraseAdder extends BasePhrasePreferences {
} }
public static Intent createIntent(Context context) {
return new SegmentIntentBuilder<>(context, PhraseAdder.class).build();
}
} }
...@@ -18,14 +18,22 @@ import android.content.Context; ...@@ -18,14 +18,22 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.intent.SegmentIntentBuilder; import com.xabber.android.data.intent.SegmentIntentBuilder;
import com.xabber.android.data.message.phrase.Phrase; import com.xabber.android.data.message.phrase.Phrase;
import com.xabber.android.data.message.phrase.PhraseManager; import com.xabber.android.data.message.phrase.PhraseManager;
import com.xabber.androiddev.R;
public class PhraseEditor extends BasePhrasePreferences { public class PhraseEditor extends BasePhrasePreferences {
public static Intent createIntent(Context context, Integer phraseIndex) {
SegmentIntentBuilder<?> builder = new SegmentIntentBuilder<>(
context, PhraseEditor.class);
if (phraseIndex != null)
builder.addSegment(phraseIndex.toString());
return builder.build();
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -69,12 +77,4 @@ public class PhraseEditor extends BasePhrasePreferences { ...@@ -69,12 +77,4 @@ public class PhraseEditor extends BasePhrasePreferences {
else else
return Integer.valueOf(value); return Integer.valueOf(value);
} }
public static Intent createIntent(Context context, Integer phraseIndex) {
SegmentIntentBuilder<?> builder = new SegmentIntentBuilder<>(
context, PhraseEditor.class);
if (phraseIndex != null)
builder.addSegment(phraseIndex.toString());
return builder.build();
}
} }
...@@ -7,9 +7,9 @@ import android.provider.Settings; ...@@ -7,9 +7,9 @@ import android.provider.Settings;
import android.util.Log; import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
import com.xabber.android.R;
import com.xabber.android.data.message.phrase.Phrase; import com.xabber.android.data.message.phrase.Phrase;
import com.xabber.android.data.message.phrase.PhraseManager; import com.xabber.android.data.message.phrase.PhraseManager;
import com.xabber.androiddev.R;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -97,8 +97,8 @@ public class PhraseEditorFragment extends BaseSettingsFragment { ...@@ -97,8 +97,8 @@ public class PhraseEditorFragment extends BaseSettingsFragment {
} }
public interface OnPhraseEditorFragmentInteractionListener { public interface OnPhraseEditorFragmentInteractionListener {
public Phrase getPhrase(); Phrase getPhrase();
public void setPhrase(Phrase phrase); void setPhrase(Phrase phrase);
} }
} }
...@@ -18,14 +18,18 @@ import android.content.Context; ...@@ -18,14 +18,18 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import com.xabber.android.R;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.message.phrase.PhraseManager; import com.xabber.android.data.message.phrase.PhraseManager;
import com.xabber.android.ui.adapter.BaseListEditorAdapter; import com.xabber.android.ui.adapter.BaseListEditorAdapter;
import com.xabber.android.ui.adapter.PhraseListAdapter; import com.xabber.android.ui.adapter.PhraseListAdapter;
import com.xabber.androiddev.R;
public class PhraseList extends BaseListEditor<Integer> { public class PhraseList extends BaseListEditor<Integer> {
public static Intent createIntent(Context context) {
return new Intent(context, PhraseList.class);
}
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -87,8 +91,4 @@ public class PhraseList extends BaseListEditor<Integer> { ...@@ -87,8 +91,4 @@ public class PhraseList extends BaseListEditor<Integer> {
bundle.putInt(key, actionWith); bundle.putInt(key, actionWith);
} }
public static Intent createIntent(Context context) {
return new Intent(context, PhraseList.class);
}
} }
...@@ -20,10 +20,10 @@ import android.content.pm.PackageManager; ...@@ -20,10 +20,10 @@ import android.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import com.xabber.android.R;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.androiddev.R;
public class PreferenceEditor extends ManagedActivity public class PreferenceEditor extends ManagedActivity
implements PreferencesFragment.OnPreferencesFragmentInteractionListener { implements PreferencesFragment.OnPreferencesFragmentInteractionListener {
......
...@@ -5,8 +5,8 @@ import android.app.Activity; ...@@ -5,8 +5,8 @@ import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import android.preference.Preference; import android.preference.Preference;
import com.xabber.android.R;
import com.xabber.android.ui.helper.PreferenceSummaryHelper; import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class PreferencesFragment extends android.preference.PreferenceFragment { public class PreferencesFragment extends android.preference.PreferenceFragment {
...@@ -19,7 +19,7 @@ public class PreferencesFragment extends android.preference.PreferenceFragment { ...@@ -19,7 +19,7 @@ public class PreferencesFragment extends android.preference.PreferenceFragment {
addPreferencesFromResource(R.xml.preference_editor); addPreferencesFromResource(R.xml.preference_editor);
Preference about = getPreferenceScreen().findPreference(getString(R.string.preference_about_key)); Preference about = getPreferenceScreen().findPreference(getString(R.string.preference_about_key));
about.setSummary(getString(R.string.application_name) + "\n" + mListener.getVersionName()); about.setSummary(getString(R.string.application_title_full) + "\n" + mListener.getVersionName());
PreferenceSummaryHelper.updateSummary(getPreferenceScreen()); PreferenceSummaryHelper.updateSummary(getPreferenceScreen());
} }
......
...@@ -3,10 +3,10 @@ package com.xabber.android.ui.preferences; ...@@ -3,10 +3,10 @@ package com.xabber.android.ui.preferences;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import com.xabber.android.R;
import com.xabber.android.ui.helper.BarPainter; import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity; import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.android.ui.helper.PreferenceSummaryHelper; import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class SecuritySettings extends ManagedActivity { public class SecuritySettings extends ManagedActivity {
@Override @Override
......
...@@ -2,8 +2,8 @@ package com.xabber.android.ui.preferences; ...@@ -2,8 +2,8 @@ package com.xabber.android.ui.preferences;
import android.os.Bundle; import android.os.Bundle;
import com.xabber.android.R;
import com.xabber.android.ui.helper.PreferenceSummaryHelper; import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class SecuritySettingsFragment extends android.preference.PreferenceFragment { public class SecuritySettingsFragment extends android.preference.PreferenceFragment {
@Override @Override
......
...@@ -19,7 +19,7 @@ import android.preference.EditTextPreference; ...@@ -19,7 +19,7 @@ import android.preference.EditTextPreference;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.widget.Toast; import android.widget.Toast;
import com.xabber.androiddev.R; import com.xabber.android.R;
/** /**
* Preference to validate xmpp priority input and to show related hint. * Preference to validate xmpp priority input and to show related hint.
......
...@@ -14,20 +14,20 @@ ...@@ -14,20 +14,20 @@
--> -->
<LinearLayout <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:orientation="vertical"
> >
<include layout="@layout/toolbar_default"/> <include layout="@layout/toolbar_default"/>
<LinearLayout <LinearLayout
android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:gravity="center"> android:gravity="center"
android:orientation="vertical">
<ImageView <ImageView
android:id="@+id/avatar" android:id="@+id/avatar"
android:layout_width="wrap_content" android:layout_width="wrap_content"
...@@ -36,14 +36,14 @@ ...@@ -36,14 +36,14 @@
android:src="@drawable/ic_connect" android:src="@drawable/ic_connect"
/> />
<TextView <TextView
android:text="@string/application_name"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="15sp"
android:paddingTop="8dip"
android:paddingBottom="8dip" android:paddingBottom="8dip"
android:paddingTop="8dip"
android:text="@string/application_title_full"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textSize="15sp"
android:textStyle="bold"
/> />
<TextView <TextView
android:id="@+id/about_version" android:id="@+id/about_version"
...@@ -53,41 +53,41 @@ ...@@ -53,41 +53,41 @@
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
/> />
<TextView <TextView
android:text="@string/about_site"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="8dip"
android:textColor="?android:attr/textColorPrimary"
android:autoLink="all" android:autoLink="all"
android:gravity="center" android:gravity="center"
android:paddingBottom="8dip"
android:text="@string/about_site"
android:textColor="?android:attr/textColorPrimary"
android:textColorLink="#0099FF" android:textColorLink="#0099FF"
/> />
<TextView <TextView
android:text="@string/about_feedback"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="8dip"
android:textColor="?android:attr/textColorPrimary"
android:autoLink="all" android:autoLink="all"
android:gravity="center" android:gravity="center"
android:paddingBottom="8dip"
android:text="@string/about_feedback"
android:textColor="?android:attr/textColorPrimary"
android:textColorLink="#0099FF" android:textColorLink="#0099FF"
/> />
</LinearLayout> </LinearLayout>
<TextView <TextView
android:id="@+id/about_license" android:id="@+id/about_license"
android:text="@string/about_license"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center"
android:paddingBottom="8dip" android:paddingBottom="8dip"
android:text="@string/about_license"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:gravity="center"
android:textColorLink="#0099FF" android:textColorLink="#0099FF"
/> />
<TextView <TextView
android:text="@string/about_copyright"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingBottom="4dip" android:paddingBottom="4dip"
android:text="@string/about_copyright"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textColorLink="#0099FF" /> android:textColorLink="#0099FF" />
</LinearLayout> </LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/message_layout"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/message_layout"
android:minWidth="160dp" android:minWidth="160dp"
android:orientation="vertical"
tools:showIn="@layout/chat_viewer_outgoing_message" tools:showIn="@layout/chat_viewer_outgoing_message"
android:descendantFocusability="blocksDescendants"
> >
<TextView <TextView
...@@ -21,8 +20,8 @@ ...@@ -21,8 +20,8 @@
android:id="@+id/message_unencrypted" android:id="@+id/message_unencrypted"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="11sp" android:text="@string/otr_unencrypted_message"
android:text="@string/otr_unencrypted_message" /> android:textSize="11sp" />
<TextView <TextView
android:id="@+id/message_text" android:id="@+id/message_text"
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
android:shadowDx="1" android:shadowDx="1"
android:shadowDy="1" android:shadowDy="1"
android:shadowRadius="2" android:shadowRadius="2"
android:text="@string/production_title" android:text="@string/application_title_short"
android:textColor="@color/grey_50" android:textColor="@color/grey_50"
android:textSize="40sp" /> android:textSize="40sp" />
</LinearLayout> </LinearLayout>
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/market.png -->
<string name="production_description">Отличный свободный Jabber (XMPP) клиент с поддержкой нескольких учетных записей, простым и удобным интерфейсом.\n\n- Поддержка нескольких учетных записей\n- Быстрое переключение между активными чатами\n- Гибкая настройка списка контактов\n- Поддерживает все стандартные XMPP-сервера\n- Поддержка Gtalk, Facebook chat, Livejournal, ВКонтакте, Я.Онлайн, Gtalk для Служб Google (Google Apps)\n- Поддержка конференций (Multi user chat, MUC)\n- История переписки\n- Сохранение истории переписки на SD карте\n- Возможность хранения истории сообщений на сервере\n- Опциональная поддержка смайликов ("эмотиконов")\n- Поддержка гиперссылок в сообщениях (веб-страницы, YouTube, email, телефонные номера, XMPP Uri)\n- Аватарки пользователей\n- Информации о контакте (vCard)\n- Сортировка контактов по группам и/или учетным записям\n- Управление списком контактов: добавление/удаление/редактирование контактов, групп, подписок\n- Поиск по контактам\n- Интеграция со списком контактов телефона (звонок из чата и чат из телефонной книги)\n- Настройки уведомлений для каждого контакта\n- Настройки уведомлений по ключевым фразам\n- Полная поддержка Unicode (общайтесь на любом языке)\n- Портретный и ланшафтный режимы\n- Сжатие трафика (если поддерживается вашим сервером)\n- Поддержка ресурсов, приоритетов\n- OTR шифрование\n- Поддержка TLS\n- Поддержка старого SSL\n- Поддержка SASL\n- Проверки сертификата сервера\n- Поддержка SRV-записей и DNS round robin\n- Отображение типа клиента в списке контактов (Adium, Empathy, Gajim, Gtalk, iChat, Miranda, Pidgin, Psi, QIP, Xabber, Xabber VIP)\n- Уведомление о наборе текста\n- Подтверждение доставки сообщений\n- Ярлыки для чатов на рабочем столе\n\nПеречень поддерживаемых, заранее настроенных сервисов:\n- Gtalk (Google Talk, также поддерживается Gtalk для Служб Google)\n- Windows Live Messenger / MSN (требуется Android 2.2 или выше)\n- Facebook chat\n- Livejournal\n- Чат Вконтакте\n- Я.Онлайн\n- QIP\n- Одноклассники\n\nВ ближайшее время появятся:\n- Отдельный интерфейс для планшетников\n- Передача файлов\n\nПоддерживаемые протоколы:\nRFC-3920: Core\nRFC-3921: Instant Messaging and Presence\nXEP-0030: Service Discovery\nXEP-0128: Service Discovery Extensions\nXEP-0115: Entity Capabilities\nXEP-0054: vcard-temp\nXEP-0153: vCard-Based Avatars\nXEP-0045: Multi-User Chat (не полностью)\nXEP-0078: Non-SASL Authentication\nXEP-0138: Stream Compression\nXEP-0203: Delayed Delivery\nXEP-0091: Legacy Delayed Delivery\nXEP-0199: XMPP Ping\nXEP-0147: XMPP URI Scheme Query Components\nXEP-0085: Chat State Notifications\nXEP-0184: Message Delivery Receipts\nXEP-0155: Stanza Session Negotiation\nXEP-0059: Result Set Management\nXEP-0136: Message Archiving\nXEP-0224: Attention\n\nДля тестирования нового функционала используйте экспериментальную версию Xabber.\n\nИсходный код Xabber доступен по адресу https://github.com/redsolution/xabber-android под лицензией GNU GPLv3.\n\nСайт проекта: http://xabber.com\nМы в twitter: @xabber_xmpp</string>
<!-- Can be used for Google Play promotion -->
<string name="production_promo">Jabber (XMPP) клиент с поддержкой нескольких учетных записей.</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/market.png -->
<string name="production_title">Xabber</string>
<string name="development_changes">+ Переводы на Иврит, Шведский, Японский\n* Обновлены переводы на многие языки\n* Незначительные исправления\nВсем спасибо за помощь!</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/market.png -->
<string name="development_description">Экспериментальный Xabber - свободный Jabber (XMPP) клиент с открытым исходным кодом, с поддержкой нескольких учетных записей, простым и понятным интерфейсом.\n\nИспользуйте эту версию Xabber если хотите помочь разработчикам сделать Xabber еще лучше (или если есть желание поприключаться) - весь новый функционал всегда появляется именно тут, но стабильность при этом не гарантируется.\n\nИсходный код Xabber доступен по адресу https://github.com/redsolution/xabber-android под лицензией GNU GPLv3.\n\nЖелающие помочь развитию проекта - не стесняйтесь, пишите на info+devel@xabber.com. Будем рады переводам, советам и отзывам!</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/market.png -->
<string name="development_title">Xabber Beta</string>
<string name="production_changes">+ Поддержка TOR через приложение Orbot\n+ Поддержка прокси\n+ Переводы на Белорусский, Персидский, Итальянский, Португальский, Украинский, Китайский - Китай, Китайский - Тайвань\n* Исправлены уведомления для Android 4+\n* Исправлена работа с историей сообщений на сервере\n* Исправлен выход из приложения\n* Исправлены переводы\n* Незначительные исправления\nВсем спасибо за помощь!</string>
<string name="short_description">Свободный XMPP (jabber) клиент с поддержкой нескольких учетных записей</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/market.png -->
<string name="vip_description">VIP-версия Xabber - лучшего Jabber (XMPP) клиента с поддержкой нескольких учетных записей, простым удобным интерфейсом и открытым исходным кодом.\n\nЕдинственное отличие VIP-версии Xabber от обычной - иконка приложения с золотой монетой. VIP-версия Xabber является отличным способом продемонстрировать свою крутизну, так как не всякий может позволить себе покупать то, чем любой другой может пользоваться бесплатно.\n\n...</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/market.png -->
<string name="vip_title">Xabber VIP</string>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/market.png -->
<string name="production_description">Open source Jabber (XMPP) client with multi-account support and clean and simple interface. Being both free (as in freedom!) and ad-free, Xabber is designed to be the best Jabber client for Android.\n\nFeatures:\n- Multiple accounts\n- Quick switch between simultaneous chats\n- Rich visibility settings for contacts and groups\n- Compatible with all standard XMPP servers\n- Pre-configured support of Gtalk, Facebook chat, Livejournal chat, Vkontakte, Ya.Online, Google Apps Gtalk accounts\n- Multi user chat (MUC)\n- Chat history\n- Export history to SD card\n- Server side message archive support\n- Emoticons\n- Inline hyperlink support (web pages, YouTube, e-mail, phone numbers, XMPP Uri)\n- Avatars\n- View contact\'s information (vCard)\n- Grouping contacts by groups and/or accounts\n- Contact list management: add/remove/edit contacts, groups, subscriptions\n- Contact search\n- Integration into phone\'s contact list (call from the chat and chat from the phone contact list)\n- Notification setting for each contact\n- Notifications based on key phrase\n- Full Unicode support, chat in any language\n- Portrait and landscape views\n- Stream compression (not all servers supported for now)\n- Resources/priorities\n- OTR encryption\n- TLS support\n- Legacy SSL support\n- SASL support\n- Check for the server certificate\n- SRV record and DNS round robin support\n- Client software icons in contact list (Adium, Empathy, Gajim, Gtalk, iChat, Miranda, Pidgin, Psi, QIP, Xabber, Xabber VIP)\n- Typing notification support\n- Message delivery receipts\n- Shortcut to a chat on home screen\n\nList of supported (pre-configured) services:\n- GTalk (Google Talk, Google Apps accounts are supported too)\n- Windows Live Messenger / MSN (Android 2.2 or higher required)\n- Facebook chat\n- Livejournal chat\n- VKontakte\n- Ya.Online\n- QIP\n- Odnoklassniki\n\nComing soon:\n- Tablet interface\n- File transfer\n\nSupported protocols:\nRFC-3920: Core\nRFC-3921: Instant Messaging and Presence\nXEP-0030: Service Discovery\nXEP-0128: Service Discovery Extensions\nXEP-0115: Entity Capabilities\nXEP-0054: vcard-temp\nXEP-0153: vCard-Based Avatars\nXEP-0045: Multi-User Chat (incompletely)\nXEP-0078: Non-SASL Authentication\nXEP-0138: Stream Compression\nXEP-0203: Delayed Delivery\nXEP-0091: Legacy Delayed Delivery\nXEP-0199: XMPP Ping\nXEP-0147: XMPP URI Scheme Query Components\nXEP-0085: Chat State Notifications\nXEP-0184: Message Delivery Receipts\nXEP-0155: Stanza Session Negotiation\nXEP-0059: Result Set Management\nXEP-0136: Message Archiving\nXEP-0224: Attention\nXEP-0077: In-Band Registration\n\nCheck Xabber Development version for new functionality.\n\nSource code of Xabber is available at https://github.com/redsolution/xabber-android under GNU GPLv3 license.\n\nFor more information visit our website http://xabber.com or follow @xabber_xmpp at twitter.</string>
<!-- Can be used for Google Play promotion -->
<string name="production_promo">Multi-account XMPP (Jabber) client.</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/market.png -->
<string name="production_title">Xabber</string>
<string name="development_changes">+ New Hebrew, Japanese, Swedish translations\n* A lot of translations updates\n* Minor fixes\nThank you folks!</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/market.png -->
<string name="development_description">Experimental (possibly UNSTABLE) version of Xabber - open source Jabber (XMPP) client with multi-account support and clean interface.\n\nYou can install this version if you want to help us test and develop Xabber. Stability is not guaranteed, so if you are not feeling adventurous, use regular version. But if you ARE a risk-taker, you will get new features first!\n\nSource code of Xabber is available at https://github.com/redsolution/xabber-android under the GNU GPLv3 license.\n\nFor more information visit our website http://xabber.com or follow @xabber_xmpp at twitter.\n\nIf you have any bugs or bright ideas to report, please mail to: info+devel@xabber.com</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/market.png -->
<string name="development_title">Xabber Beta</string>
<string name="production_changes">+ TOR support using Orbot\n+ Proxy support\n+ Belarusian, Persian, Italian, Portuguese, Ukrainian, Chinese - China, Chinese - Taiwan translations\n* Notification in Android 4+ fixed\n* Server side history fixed\n* Exit from Xabber fixed\n* Translations fixed\n* Minor fixes\nThank you folks!</string>
<string name="short_description">Open source XMPP (Jabber) client with multi-account support</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/market.png -->
<string name="vip_description">VIP version of Xabber — great open source Jabber (XMPP) client with multi-account support and clean and simple interface. Xabber is designed to be the best Jabber client for Android.\n\nThis VIP version of Xabber is in no way any better than regular version of Xabber, gold coin on an application icon being it\'s only distinct feature. It is very useful to show off how gorgeous you are when buying something that anyone can get for free.\n\n...</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/market.png -->
<string name="vip_title">Xabber VIP</string>
</resources>
...@@ -15,6 +15,6 @@ ...@@ -15,6 +15,6 @@
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android" <account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="@string/sync_account_type" android:accountType="@string/sync_account_type"
android:icon="@drawable/ic_launcher" android:icon="@drawable/ic_launcher"
android:label="@string/application_title_full"
android:smallIcon="@drawable/ic_launcher" android:smallIcon="@drawable/ic_launcher"
android:label="@string/application_name"
/> />
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment