Introducing product flavor 'beta' and removing product flavor 'playstore'
This commit is contained in:
parent
a892bb6f16
commit
622412fc72
15 changed files with 16 additions and 196 deletions
10
build.gradle
10
build.gradle
|
@ -5,7 +5,7 @@ buildscript {
|
|||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:2.0.0'
|
||||
classpath 'com.android.tools.build:gradle:2.2.0'
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -82,6 +82,7 @@ android {
|
|||
versionName "0.0.8"
|
||||
archivesBaseName += "-$versionName"
|
||||
apply from: 'configuration.gradle'
|
||||
applicationId "de.thedevstack.conversationsplus"
|
||||
}
|
||||
|
||||
dexOptions {
|
||||
|
@ -95,8 +96,11 @@ android {
|
|||
}
|
||||
|
||||
productFlavors {
|
||||
playstore
|
||||
free
|
||||
beta {
|
||||
applicationIdSuffix ".beta"
|
||||
versionNameSuffix "-beta"
|
||||
}
|
||||
free
|
||||
}
|
||||
testOptions {
|
||||
unitTests.all {
|
||||
|
|
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,6 +1,6 @@
|
|||
#Wed May 31 19:49:33 CEST 2017
|
||||
#Sun Jan 28 20:51:58 CET 2018
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
|
||||
|
|
BIN
src/beta/res/drawable-hdpi/ic_launcher.png
Normal file
BIN
src/beta/res/drawable-hdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5 KiB |
BIN
src/beta/res/drawable-mdpi/ic_launcher.png
Normal file
BIN
src/beta/res/drawable-mdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3 KiB |
BIN
src/beta/res/drawable-xhdpi/ic_launcher.png
Normal file
BIN
src/beta/res/drawable-xhdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.1 KiB |
BIN
src/beta/res/drawable-xxhdpi/ic_launcher.png
Normal file
BIN
src/beta/res/drawable-xxhdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
BIN
src/beta/res/drawable-xxxhdpi/ic_launcher.png
Normal file
BIN
src/beta/res/drawable-xxxhdpi/ic_launcher.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
4
src/beta/res/values/strings.xml
Normal file
4
src/beta/res/values/strings.xml
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" translatable="false">Conversations+ BETA</string>
|
||||
</resources>
|
|
@ -176,7 +176,7 @@
|
|||
</intent-filter>
|
||||
</service>
|
||||
<provider
|
||||
android:authorities="de.thedevstack.conversationsplus"
|
||||
android:authorities="${applicationId}"
|
||||
android:name=".providers.ConversationsPlusFileProvider"
|
||||
android:exported="false"
|
||||
android:grantUriPermissions="true">
|
||||
|
|
|
@ -3,6 +3,7 @@ package de.thedevstack.conversationsplus.providers;
|
|||
import android.net.Uri;
|
||||
import android.support.v4.content.FileProvider;
|
||||
|
||||
import de.thedevstack.conversationsplus.BuildConfig;
|
||||
import de.thedevstack.conversationsplus.ConversationsPlusApplication;
|
||||
import de.thedevstack.conversationsplus.entities.DownloadableFile;
|
||||
|
||||
|
@ -12,7 +13,7 @@ import de.thedevstack.conversationsplus.entities.DownloadableFile;
|
|||
public class ConversationsPlusFileProvider extends FileProvider {
|
||||
|
||||
private static final String SCHEME = "content";
|
||||
private static final String AUTHORITY = "de.thedevstack.conversationsplus";
|
||||
private static final String AUTHORITY = BuildConfig.APPLICATION_ID;
|
||||
|
||||
public static Uri createUriForPrivateFile(DownloadableFile file) {
|
||||
return FileProvider.getUriForFile(ConversationsPlusApplication.getAppContext(), AUTHORITY, file);
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest
|
||||
package="eu.siacs.conversations"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<permission android:name="eu.siacs.conversations.permission.C2D_MESSAGE"
|
||||
android:protectionLevel="signature"/>
|
||||
<uses-permission android:name="eu.siacs.conversations.permission.C2D_MESSAGE"/>
|
||||
|
||||
<application>
|
||||
|
||||
<receiver
|
||||
android:name="com.google.android.gms.gcm.GcmReceiver"
|
||||
android:exported="true"
|
||||
android:permission="com.google.android.c2dm.permission.SEND" >
|
||||
<intent-filter>
|
||||
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
|
||||
<category android:name="com.example.gcm" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
<service
|
||||
android:name=".services.PushMessageReceiver"
|
||||
android:exported="false" >
|
||||
<intent-filter>
|
||||
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<service android:name=".services.InstanceIdService" android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.android.gms.iid.InstanceID"/>
|
||||
</intent-filter>
|
||||
</service>
|
||||
</application>
|
||||
</manifest>
|
|
@ -1,15 +0,0 @@
|
|||
package eu.siacs.conversations.services;
|
||||
|
||||
import android.content.Intent;
|
||||
|
||||
import com.google.android.gms.iid.InstanceIDListenerService;
|
||||
|
||||
public class InstanceIdService extends InstanceIDListenerService {
|
||||
|
||||
@Override
|
||||
public void onTokenRefresh() {
|
||||
Intent intent = new Intent(this, XmppConnectionService.class);
|
||||
intent.setAction(XmppConnectionService.ACTION_GCM_TOKEN_REFRESH);
|
||||
startService(intent);
|
||||
}
|
||||
}
|
|
@ -1,119 +0,0 @@
|
|||
package eu.siacs.conversations.services;
|
||||
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
|
||||
import com.google.android.gms.common.ConnectionResult;
|
||||
import com.google.android.gms.common.GoogleApiAvailability;
|
||||
import com.google.android.gms.gcm.GoogleCloudMessaging;
|
||||
import com.google.android.gms.iid.InstanceID;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import eu.siacs.conversations.Config;
|
||||
import eu.siacs.conversations.R;
|
||||
import eu.siacs.conversations.entities.Account;
|
||||
import eu.siacs.conversations.xml.Element;
|
||||
import eu.siacs.conversations.xmpp.OnIqPacketReceived;
|
||||
import eu.siacs.conversations.xmpp.XmppConnection;
|
||||
import eu.siacs.conversations.xmpp.forms.Data;
|
||||
import eu.siacs.conversations.xmpp.jid.InvalidJidException;
|
||||
import eu.siacs.conversations.xmpp.jid.Jid;
|
||||
import eu.siacs.conversations.xmpp.stanzas.IqPacket;
|
||||
|
||||
public class PushManagementService {
|
||||
|
||||
private static final String APP_SERVER = "push.siacs.eu";
|
||||
|
||||
protected final XmppConnectionService mXmppConnectionService;
|
||||
|
||||
public PushManagementService(XmppConnectionService service) {
|
||||
this.mXmppConnectionService = service;
|
||||
}
|
||||
|
||||
public void registerPushTokenOnServer(final Account account) {
|
||||
Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": has push support");
|
||||
retrieveGcmInstanceToken(new OnGcmInstanceTokenRetrieved() {
|
||||
@Override
|
||||
public void onGcmInstanceTokenRetrieved(String token) {
|
||||
try {
|
||||
final String deviceId = Settings.Secure.getString(mXmppConnectionService.getContentResolver(), Settings.Secure.ANDROID_ID);
|
||||
IqPacket packet = mXmppConnectionService.getIqGenerator().pushTokenToAppServer(Jid.fromString(APP_SERVER), token, deviceId);
|
||||
mXmppConnectionService.sendIqPacket(account, packet, new OnIqPacketReceived() {
|
||||
@Override
|
||||
public void onIqPacketReceived(Account account, IqPacket packet) {
|
||||
Element command = packet.findChild("command","http://jabber.org/protocol/commands");
|
||||
if (packet.getType() == IqPacket.TYPE.RESULT && command != null) {
|
||||
Element x = command.findChild("x","jabber:x:data");
|
||||
if (x != null) {
|
||||
Data data = Data.parse(x);
|
||||
try {
|
||||
String node = data.getValue("node");
|
||||
String secret = data.getValue("secret");
|
||||
Jid jid = Jid.fromString(data.getValue("jid"));
|
||||
if (node != null && secret != null) {
|
||||
enablePushOnServer(account, jid, node, secret);
|
||||
}
|
||||
} catch (InvalidJidException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Log.d(Config.LOGTAG,account.getJid().toBareJid()+": invalid response from app server");
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (InvalidJidException ignored) {
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void enablePushOnServer(final Account account, final Jid jid, final String node, final String secret) {
|
||||
IqPacket enable = mXmppConnectionService.getIqGenerator().enablePush(jid, node, secret);
|
||||
mXmppConnectionService.sendIqPacket(account, enable, new OnIqPacketReceived() {
|
||||
@Override
|
||||
public void onIqPacketReceived(Account account, IqPacket packet) {
|
||||
if (packet.getType() == IqPacket.TYPE.RESULT) {
|
||||
Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": successfully enabled push on server");
|
||||
} else if (packet.getType() == IqPacket.TYPE.ERROR) {
|
||||
Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": enabling push on server failed");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void retrieveGcmInstanceToken(final OnGcmInstanceTokenRetrieved instanceTokenRetrieved) {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
InstanceID instanceID = InstanceID.getInstance(mXmppConnectionService);
|
||||
try {
|
||||
String token = instanceID.getToken(mXmppConnectionService.getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
|
||||
instanceTokenRetrieved.onGcmInstanceTokenRetrieved(token);
|
||||
} catch (IOException e) {
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
|
||||
}
|
||||
|
||||
|
||||
public boolean available(Account account) {
|
||||
final XmppConnection connection = account.getXmppConnection();
|
||||
return connection != null && connection.getFeatures().push() && playServicesAvailable();
|
||||
}
|
||||
|
||||
private boolean playServicesAvailable() {
|
||||
return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(mXmppConnectionService) == ConnectionResult.SUCCESS;
|
||||
}
|
||||
|
||||
public boolean isStub() {
|
||||
return false;
|
||||
}
|
||||
|
||||
interface OnGcmInstanceTokenRetrieved {
|
||||
void onGcmInstanceTokenRetrieved(String token);
|
||||
}
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
package eu.siacs.conversations.services;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import com.google.android.gms.gcm.GcmListenerService;
|
||||
|
||||
import eu.siacs.conversations.Config;
|
||||
|
||||
public class PushMessageReceiver extends GcmListenerService {
|
||||
|
||||
@Override
|
||||
public void onMessageReceived(String from, Bundle data) {
|
||||
Intent intent = new Intent(this, XmppConnectionService.class);
|
||||
intent.setAction(XmppConnectionService.ACTION_GCM_MESSAGE_RECEIVED);
|
||||
intent.replaceExtras(data);
|
||||
startService(intent);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue