Commit 4e4b5784 authored by Grigory Fedorov's avatar Grigory Fedorov

Merge branch 'feature/about_screen' into develop

Conflicts:
	app/src/main/res/values/about_viewer.xml
parents c905ca41 d2c47ed6
......@@ -41,11 +41,13 @@ repositories {
}
dependencies {
compile 'com.android.support:design:22.2.0'
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:support-v13:22.2.0'
compile 'com.github.ksoichiro:android-observablescrollview:1.5.0'
compile 'de.hdodenhof:circleimageview:1.2.2'
compile 'com.melnykov:floatingactionbutton:1.2.0'
compile 'dnsjava:dnsjava:2.1.7'
compile 'com.github.bumptech.glide:glide:3.6.0'
compile project('otr4j')
}
......@@ -73,9 +73,10 @@
android:name="com.xabber.android.ui.LoadActivity"
/>
<activity
android:name="com.xabber.android.ui.preferences.AboutViewer"
android:name=".ui.AboutViewer"
android:label="@string/about_viewer"
android:parentActivityName="com.xabber.android.ui.preferences.PreferenceEditor"
android:theme="@style/ThemeDark"
>
<!-- Parent activity meta-data to support 4.0 and lower -->
......
......@@ -132,7 +132,6 @@ public class ActivityManager implements OnUnloadListener {
public void onCreate(Activity activity) {
if (LOG)
LogManager.i(activity, "onCreate: " + activity.getIntent());
applyTheme(activity);
if (application.isClosing() && !(activity instanceof LoadActivity)) {
activity.startActivity(LoadActivity.createIntent(activity));
activity.finish();
......
......@@ -107,7 +107,7 @@ public class AccountManager implements OnLoadListener, OnWipeListener {
enabledAccounts = new HashSet<>();
savedStatuses = new ArrayList<>();
authorizationErrorProvider = new BaseAccountNotificationProvider<>(R.drawable.ic_stat_error);
passwordRequestProvider = new BaseAccountNotificationProvider<>(R.drawable.ic_stat_ic_add_circle);
passwordRequestProvider = new BaseAccountNotificationProvider<>(R.drawable.ic_stat_add_circle);
colors = application.getResources().getIntArray(R.array.account_color_names).length;
......
......@@ -150,7 +150,7 @@ public class MessageArchiveManager implements OnPacketListener,
modificationRequests = new NestedMap<Boolean>();
chatStorages = new NestedNestedMaps<String, ChatStorage>();
availableArchiveRequestProvider = new BaseAccountNotificationProvider<AvailableArchiveRequest>(
R.drawable.ic_stat_ic_help_black);
R.drawable.ic_stat_help);
}
public static MessageArchiveManager getInstance() {
......
......@@ -67,7 +67,7 @@ public class MUCManager implements OnLoadListener, OnPacketListener {
private MUCManager() {
inviteProvider = new EntityNotificationProvider<RoomInvite>(
R.drawable.ic_stat_ic_add_circle);
R.drawable.ic_stat_add_circle);
authorizationErrorProvider = new EntityNotificationProvider<RoomAuthorizationError>(
R.drawable.ic_stat_error);
}
......
......@@ -116,8 +116,8 @@ public class OTRManager implements OtrEngineHost, OtrEngineListener,
private final ExecutorService keyPairGenerator;
private OTRManager() {
smRequestProvider = new EntityNotificationProvider<>(R.drawable.ic_stat_ic_help_black);
smProgressProvider = new EntityNotificationProvider<>(R.drawable.ic_stat_ic_play_circle_fill);
smRequestProvider = new EntityNotificationProvider<>(R.drawable.ic_stat_help);
smProgressProvider = new EntityNotificationProvider<>(R.drawable.ic_stat_play_circle_fill);
smProgressProvider.setCanClearNotifications(false);
fingerprints = new NestedNestedMaps<>();
actives = new NestedMap<>();
......
......@@ -79,7 +79,7 @@ public class PresenceManager implements OnArchiveModificationsReceivedListener,
private PresenceManager() {
subscriptionRequestProvider = new EntityNotificationProvider<SubscriptionRequest>(
R.drawable.ic_stat_ic_add_circle);
R.drawable.ic_stat_add_circle);
requestedSubscriptions = new HashMap<String, HashSet<String>>();
presenceContainers = new NestedMap<ResourceContainer>();
readyAccounts = new ArrayList<String>();
......
/**
* Copyright (c) 2013, Redsolution LTD. All rights reserved.
*
* <p/>
* 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.
*
* <p/>
* 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.
*
* <p/>
* You should have received a copy of the GNU General Public License,
* along with this program. If not, see http://www.gnu.org/licenses/.
*/
package com.xabber.android.ui.preferences;
package com.xabber.android.ui;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.v4.app.NavUtils;
import android.support.v7.widget.Toolbar;
import android.text.method.LinkMovementMethod;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.xabber.android.R;
import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity;
public class AboutViewer extends ManagedActivity {
public class AboutViewer extends ManagedActivity implements View.OnClickListener {
public static Intent createIntent(Context context) {
return new Intent(context, AboutViewer.class);
......@@ -40,23 +44,44 @@ public class AboutViewer extends ManagedActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.about_viewer);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_default);
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.ic_arrow_left_white_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NavUtils.navigateUpFromSameTask(AboutViewer.this);
}
});
BarPainter barPainter = new BarPainter(this, toolbar);
barPainter.setDefaultColor();
findViewById(R.id.about_github).setOnClickListener(this);
findViewById(R.id.about_twitter).setOnClickListener(this);
findViewById(R.id.about_redsolution).setOnClickListener(this);
findViewById(R.id.about_text_xmpp_protocol).setOnClickListener(this);
((TextView) findViewById(R.id.about_version))
.setText(getString(R.string.about_version, getVersionName()));
((TextView) findViewById(R.id.about_license))
((TextView) findViewById(R.id.about_text_developers))
.setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.about_text_translators))
.setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.about_text_license))
.setMovementMethod(LinkMovementMethod.getInstance());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
CollapsingToolbarLayout collapsingToolbar =
(CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
collapsingToolbar.setTitle(getString(R.string.application_title_short));
((TextView) findViewById(R.id.about_version)).setText(getVersionName());
loadBackdrop();
}
private void loadBackdrop() {
final ImageView imageView = (ImageView) findViewById(R.id.backdrop);
Glide.with(this).load(R.drawable.about_backdrop).centerCrop().into(imageView);
}
private String getVersionName() {
try {
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
return pInfo.versionName;
return getString(R.string.application_title_full) + " " + pInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
......@@ -64,14 +89,30 @@ public class AboutViewer extends ManagedActivity {
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
public void onClick(View v) {
switch (v.getId()) {
case R.id.about_redsolution:
sendUrlViewIntent(getString(R.string.about_redsolution_url));
break;
case R.id.about_github:
sendUrlViewIntent(getString(R.string.about_xabber_github_url));
break;
case R.id.about_twitter:
sendUrlViewIntent(getString(R.string.about_xabber_twitter_url));
break;
case R.id.about_text_xmpp_protocol:
Toast.makeText(this, R.string.about_shameless_quote_from_wiki, Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
private void sendUrlViewIntent(String url) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
}
......@@ -65,7 +65,6 @@ import com.xabber.android.ui.dialog.StartAtBootDialogFragment;
import com.xabber.android.ui.dialog.TranslationDialog;
import com.xabber.android.ui.helper.BarPainter;
import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.android.ui.preferences.AboutViewer;
import com.xabber.android.ui.preferences.AccountEditor;
import com.xabber.android.ui.preferences.AccountList;
import com.xabber.android.ui.preferences.PreferenceEditor;
......
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2006 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- Layout for a Preference in a PreferenceActivity. The
Preference is able to place a specific widget for its particular
type in the "widget_frame" layout. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingRight="?android:attr/scrollbarSize">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dip"
android:layout_marginRight="6dip"
android:layout_marginTop="6dip"
android:layout_marginBottom="6dip"
android:layout_weight="1">
<TextView android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
<ProgressBar android:id="@android:id/progress"
style="?android:attr/progressBarStyleHorizontal"
android:minHeight="10dip"
android:maxHeight="10dip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:layout_alignLeft="@android:id/title"
android:paddingTop="5dip"
android:indeterminate="true"
android:progress="0"
android:max="50000"
/>
<TextView android:id="@+android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/progress"
android:layout_alignLeft="@android:id/progress"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorSecondary"
android:maxLines="4" />
</RelativeLayout>
<!-- Preference should place its actual preference widget here. -->
<LinearLayout android:id="@+android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="vertical" />
</LinearLayout>
......@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_join_conference"
android:icon="@drawable/ic_group_white_24dp"
android:icon="@drawable/ic_group_add_white_24dp"
android:orderInCategory="80"
android:title="@string/muc_join"
android:visible="false"
......@@ -39,7 +39,6 @@
/>
<item android:id="@+id/action_show_history"
android:icon="@drawable/ic_forum_white_24dp"
android:orderInCategory="130"
android:title="@string/show_history"
app:showAsAction="never"
......
......@@ -17,7 +17,7 @@
/>
<item android:id="@+id/action_join_conference"
android:icon="@drawable/ic_group_white_24dp"
android:icon="@drawable/ic_group_add_white_24dp"
android:orderInCategory="120"
android:title="@string/muc_add"
app:showAsAction="never"
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="ThemeDark" parent="Base.ThemeDark">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/about_viewer.png -->
<string name="about_copyright">© Redsolution LTD, 2010–2015</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/about_viewer.png -->
<string name="about_feedback">mailto:info@xabber.com</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/about_viewer.png -->
<string name="about_site">http://www.xabber.com</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/about_viewer.png -->
<string name="about_version">Version: %s</string>
<string name="about_license">License: GNU GPLv3\n<a href="https://github.com/redsolution/xabber-android">Open source software</a></string>
<resources>
<string name="about_open_source_xmpp_client">open source XMPP client</string>
<string name="about_header_about">About</string>
<string name="about_text_about">Xabber is an open-source XMPP messenger for Android platform. It is built around open standards, interoperability, design and user experience. Xabber supports many popular XMPP extension protocols, Off-The-Record Chat Encryption and is available in multiple languages.</string>
<string name="about_header_xmpp">XMPP protocol</string>
<string name="about_text_xmpp">Extensible Messaging and Presence Protocol (XMPP) is a communications protocol for message-oriented middleware based on XML (Extensible Markup Language). It enables the near-real-time exchange of structured yet extensible data between any two or more network entities. The protocol was originally named Jabber, and was developed by the Jabber open-source community in 1999 for near real-time instant messaging (IM),presence information, and contact list maintenance.</string>
<string name="about_shameless_quote_from_wiki">Shameless quote from Wikipedia</string>
<string name="about_header_xep">XMPP Extension Protocols</string>
<string name="about_text_xep">XMPP is highly extensible, via extensions known as XEPs (XMPP Extension Protocol). Xabber supports a number of popular XEPs that are essential to providing great chat experience for our users.</string>
<string name="about_header_developers">Developers</string>
<string name="about_text_developers">Xabber was originally developed by <a href="http://www.redsolution.com/">Redsolution, Inc.</a> — an international software and services company based in Russia and United States. Xabber was licensed under GNU/GPL v.3 license early in 2013. Since then, a number of individuals joined Xabber as developers, testers and translators.\n\nOur goal is to create a stable, reliable and user friendly ecosystem for instant messaging that does not rely on proprietary services. We welcome anyone who believes in open standards and free information interchange to take part in moving Xabber forward.\n\nFollow us on Twitter and Github.</string>
<string name="about_redsolution_url">http://www.redsolution.com/</string>
<string name="about_xabber_url">http://www.xabber.com</string>
<string name="about_xabber_email">info@xabber.com</string>
<string name="about_xabber_twitter_url">https://twitter.com/xabber_xmpp</string>
<string name="about_xabber_github_url">https://github.com/redsolution/xabber-android</string>
<string name="about_header_translators">Translators</string>
<string name="about_text_translators">Xabber is available in multiple languages thanks to many fine people from all over the world. We have created a <a href="https://github.com/redsolution/xabber-android/wiki/Top-translators">special page</a> on our website to acknowledge their efforts.\n\nYou may join their ranks and help us improve translation quality by <a href="https://crowdin.com/project/xabber/">contributing</a> your translations to Xabber project.</string>
<string name="about_header_license">License</string>
<string name="about_text_license">Xabber source code is licensed under GNU GPL v.3 license and is available on GitHub.\n\nGraphical images are licensed under Creative Commons Attribution Share-Alike (CC BY-SA) license.\n\nXabber &amp; Redsolution logo are property of Redsolution, Inc.\n\nMore detailed information on Xabber <a href="https://github.com/redsolution/xabber-android/blob/master/LICENSE">license file</a>.</string>
<string name="translation_unavailable">Translation unavailable</string>
<string name="translation_unavailable_message">Unfortunately, Xabber does not have a translation to your language, but you can help us fix that.\nXabber is open-source, and all translations are provided by community, and it is easy to join.</string>
<string name="help_translate_xabber">Help translate Xabber</string>
......
......@@ -13,6 +13,7 @@
along with this program. If not, see http://www.gnu.org/licenses/.
-->
<resources>
<style name="Theme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
......@@ -21,7 +22,25 @@
<item name="windowActionModeOverlay">true</item>
</style>
<style name="ThemeDark" parent="Base.ThemeDark"></style>
<style name="Base.ThemeDark" parent="Theme.AppCompat.NoActionBar">
<!--for text selection toolbar to be above usual toolbar -->
<item name="windowActionModeOverlay">true</item>
</style>
<style name="ToolbarTitle" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title">
<item name="android:textSize">17sp</item>
</style>
<style name="CollapsingToolbarTitle" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title">
<item name="android:textSize">32sp</item>
<item name="android:shadowColor">@color/grey_700</item>
<item name="android:shadowDx">10</item>
<item name="android:shadowDy">10</item>
<item name="android:shadowRadius">20</item>
<item name="android:textColor">@color/grey_50</item>
</style>
</resources>
\ No newline at end of file
......@@ -65,7 +65,7 @@
android:key="@string/preference_about_key"
android:title="@string/preference_about">
<intent
android:targetClass="com.xabber.android.ui.preferences.AboutViewer"
android:targetClass="com.xabber.android.ui.AboutViewer"
android:targetPackage="@string/application_package" />
</Preference>
</PreferenceScreen>
\ No newline at end of file
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