Added showcase explaining full node
This commit is contained in:
parent
a4f6642f6a
commit
17a99b6562
@ -56,6 +56,8 @@ dependencies {
|
|||||||
compile 'com.journeyapps:zxing-android-embedded:3.1.0@aar'
|
compile 'com.journeyapps:zxing-android-embedded:3.1.0@aar'
|
||||||
compile 'com.google.zxing:core:3.2.0'
|
compile 'com.google.zxing:core:3.2.0'
|
||||||
compile 'io.github.yavski:fab-speed-dial:1.0.2'
|
compile 'io.github.yavski:fab-speed-dial:1.0.2'
|
||||||
|
|
||||||
|
compile 'com.github.amlcurran.showcaseview:library:5.4.0'
|
||||||
}
|
}
|
||||||
|
|
||||||
idea.module {
|
idea.module {
|
||||||
|
@ -22,15 +22,21 @@ import android.content.Context;
|
|||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.ServiceConnection;
|
import android.content.ServiceConnection;
|
||||||
|
import android.graphics.Point;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
|
import android.widget.Button;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
|
import android.widget.RelativeLayout;
|
||||||
|
|
||||||
|
import com.github.amlcurran.showcaseview.ShowcaseView;
|
||||||
|
import com.github.amlcurran.showcaseview.targets.Target;
|
||||||
import com.mikepenz.community_material_typeface_library.CommunityMaterial;
|
import com.mikepenz.community_material_typeface_library.CommunityMaterial;
|
||||||
import com.mikepenz.google_material_typeface_library.GoogleMaterial;
|
import com.mikepenz.google_material_typeface_library.GoogleMaterial;
|
||||||
import com.mikepenz.iconics.IconicsDrawable;
|
import com.mikepenz.iconics.IconicsDrawable;
|
||||||
@ -38,6 +44,7 @@ import com.mikepenz.materialdrawer.Drawer;
|
|||||||
import com.mikepenz.materialdrawer.DrawerBuilder;
|
import com.mikepenz.materialdrawer.DrawerBuilder;
|
||||||
import com.mikepenz.materialdrawer.accountswitcher.AccountHeader;
|
import com.mikepenz.materialdrawer.accountswitcher.AccountHeader;
|
||||||
import com.mikepenz.materialdrawer.accountswitcher.AccountHeaderBuilder;
|
import com.mikepenz.materialdrawer.accountswitcher.AccountHeaderBuilder;
|
||||||
|
import com.mikepenz.materialdrawer.model.DividerDrawerItem;
|
||||||
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
|
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
|
||||||
import com.mikepenz.materialdrawer.model.ProfileDrawerItem;
|
import com.mikepenz.materialdrawer.model.ProfileDrawerItem;
|
||||||
import com.mikepenz.materialdrawer.model.ProfileSettingDrawerItem;
|
import com.mikepenz.materialdrawer.model.ProfileSettingDrawerItem;
|
||||||
@ -123,6 +130,9 @@ public class MainActivity extends AppCompatActivity
|
|||||||
private BitmessageContext bmc;
|
private BitmessageContext bmc;
|
||||||
private AccountHeader accountHeader;
|
private AccountHeader accountHeader;
|
||||||
|
|
||||||
|
private Drawer drawer;
|
||||||
|
private ShowcaseView showcaseView;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@ -167,6 +177,36 @@ public class MainActivity extends AppCompatActivity
|
|||||||
} else {
|
} else {
|
||||||
SyncAdapter.stopSync(this);
|
SyncAdapter.stopSync(this);
|
||||||
}
|
}
|
||||||
|
if (drawer.isDrawerOpen()) {
|
||||||
|
RelativeLayout.LayoutParams lps = new RelativeLayout.LayoutParams(ViewGroup
|
||||||
|
.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||||
|
lps.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
|
||||||
|
lps.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
|
||||||
|
int margin = ((Number) (getResources().getDisplayMetrics().density * 12)).intValue();
|
||||||
|
lps.setMargins(margin, margin, margin, margin);
|
||||||
|
|
||||||
|
showcaseView = new ShowcaseView.Builder(this)
|
||||||
|
.withMaterialShowcase()
|
||||||
|
.setStyle(R.style.CustomShowcaseTheme)
|
||||||
|
.setContentTitle(R.string.full_node)
|
||||||
|
.setContentText(R.string.full_node_description)
|
||||||
|
.setTarget(new Target() {
|
||||||
|
@Override
|
||||||
|
public Point getPoint() {
|
||||||
|
View view = drawer.getStickyFooter();
|
||||||
|
int[] location = new int[2];
|
||||||
|
view.getLocationInWindow(location);
|
||||||
|
int x = location[0] + 7 * view.getWidth() / 8;
|
||||||
|
int y = location[1] + view.getHeight() / 2;
|
||||||
|
return new Point(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.replaceEndButton(R.layout.showcase_button)
|
||||||
|
.hideOnTouchOutside()
|
||||||
|
.build();
|
||||||
|
showcaseView.setButtonPosition(lps);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeList(AbstractItemListFragment<?> listFragment) {
|
private void changeList(AbstractItemListFragment<?> listFragment) {
|
||||||
@ -235,17 +275,23 @@ public class MainActivity extends AppCompatActivity
|
|||||||
.setPositiveButton(android.R.string.yes, new
|
.setPositiveButton(android.R.string.yes, new
|
||||||
DialogInterface.OnClickListener() {
|
DialogInterface.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog,
|
||||||
BitmessageAddress identity = bmc.createIdentity(false);
|
int which) {
|
||||||
IProfile newProfile = new ProfileDrawerItem()
|
BitmessageAddress identity = bmc
|
||||||
|
.createIdentity(false);
|
||||||
|
IProfile newProfile = new
|
||||||
|
ProfileDrawerItem()
|
||||||
.withName(identity.toString())
|
.withName(identity.toString())
|
||||||
.withEmail(identity.getAddress())
|
.withEmail(identity.getAddress())
|
||||||
.withTag(identity);
|
.withTag(identity);
|
||||||
if (accountHeader.getProfiles() != null) {
|
if (accountHeader.getProfiles() != null) {
|
||||||
// we know that there are 2 setting elements.
|
// we know that there are 2 setting
|
||||||
|
// elements.
|
||||||
// Set the new profile above them ;)
|
// Set the new profile above them ;)
|
||||||
accountHeader.addProfile(
|
accountHeader.addProfile(
|
||||||
newProfile, accountHeader.getProfiles().size() - 2);
|
newProfile, accountHeader
|
||||||
|
.getProfiles().size()
|
||||||
|
- 2);
|
||||||
} else {
|
} else {
|
||||||
accountHeader.addProfiles(newProfile);
|
accountHeader.addProfiles(newProfile);
|
||||||
}
|
}
|
||||||
@ -315,20 +361,20 @@ public class MainActivity extends AppCompatActivity
|
|||||||
.withTag(null)
|
.withTag(null)
|
||||||
.withIcon(CommunityMaterial.Icon.cmd_archive)
|
.withIcon(CommunityMaterial.Icon.cmd_archive)
|
||||||
);
|
);
|
||||||
|
drawerItems.add(new DividerDrawerItem());
|
||||||
|
drawerItems.add(new PrimaryDrawerItem()
|
||||||
|
.withName(R.string.contacts_and_subscriptions)
|
||||||
|
.withIcon(GoogleMaterial.Icon.gmd_contacts));
|
||||||
|
drawerItems.add(new PrimaryDrawerItem()
|
||||||
|
.withName(R.string.settings)
|
||||||
|
.withIcon(GoogleMaterial.Icon.gmd_settings));
|
||||||
|
|
||||||
|
drawer = new DrawerBuilder()
|
||||||
new DrawerBuilder()
|
|
||||||
.withActivity(this)
|
.withActivity(this)
|
||||||
.withToolbar(toolbar)
|
.withToolbar(toolbar)
|
||||||
.withAccountHeader(accountHeader)
|
.withAccountHeader(accountHeader)
|
||||||
.withDrawerItems(drawerItems)
|
.withDrawerItems(drawerItems)
|
||||||
.addStickyDrawerItems(
|
.addStickyDrawerItems(
|
||||||
new PrimaryDrawerItem()
|
|
||||||
.withName(R.string.contacts_and_subscriptions)
|
|
||||||
.withIcon(GoogleMaterial.Icon.gmd_contacts),
|
|
||||||
new PrimaryDrawerItem()
|
|
||||||
.withName(R.string.settings)
|
|
||||||
.withIcon(GoogleMaterial.Icon.gmd_settings),
|
|
||||||
new SwitchDrawerItem()
|
new SwitchDrawerItem()
|
||||||
.withName(R.string.full_node)
|
.withName(R.string.full_node)
|
||||||
.withIcon(CommunityMaterial.Icon.cmd_cloud_outline)
|
.withIcon(CommunityMaterial.Icon.cmd_cloud_outline)
|
||||||
@ -382,7 +428,7 @@ public class MainActivity extends AppCompatActivity
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.withCloseOnClick(true)
|
.withShowDrawerOnFirstLaunch(true)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:color="#ffffff">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@android:id/mask"
|
||||||
|
android:drawable="@android:color/white"/>
|
||||||
|
|
||||||
|
</ripple>
|
14
app/src/main/res/drawable/material_showcase_button_bg.xml
Normal file
14
app/src/main/res/drawable/material_showcase_button_bg.xml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:state_pressed="true">
|
||||||
|
<shape android:shape="rectangle">
|
||||||
|
<solid android:color="#ccffffff" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
<item android:state_focused="true">
|
||||||
|
<shape android:shape="rectangle">
|
||||||
|
<stroke android:color="@android:color/white" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
<item android:drawable="@android:color/transparent" />
|
||||||
|
</selector>
|
14
app/src/main/res/layout/showcase_button.xml
Normal file
14
app/src/main/res/layout/showcase_button.xml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Button xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Got it"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:background="@drawable/material_showcase_button_bg"
|
||||||
|
android:textSize="13sp"
|
||||||
|
android:textAllCaps="true"
|
||||||
|
android:textColor="@android:color/white"
|
||||||
|
>
|
||||||
|
|
||||||
|
</Button>
|
@ -65,4 +65,8 @@
|
|||||||
<string name="delete_identity_warning">Sind Sie sicher dass diese Identität gelöscht werden soll? Sie werden keine Nachrichten mehr empfangen können welche an diese Adresse gesendet werden, und es est nicht möglich diese Aktion rückgängig zu machen.</string>
|
<string name="delete_identity_warning">Sind Sie sicher dass diese Identität gelöscht werden soll? Sie werden keine Nachrichten mehr empfangen können welche an diese Adresse gesendet werden, und es est nicht möglich diese Aktion rückgängig zu machen.</string>
|
||||||
<string name="create_contact">Kontakt erfassen</string>
|
<string name="create_contact">Kontakt erfassen</string>
|
||||||
<string name="scan_qr_code">QR-Code scannen</string>
|
<string name="scan_qr_code">QR-Code scannen</string>
|
||||||
|
<string name="full_node_description">Solange kein aktiver Knoten gestartet ist, werden keine Meldungen empfangen oder gesendet. Dies braucht jedoch viele Resourcen und Daten.
|
||||||
|
|
||||||
|
Als Alternative kann in den Einstellungen ein vertrauenswürdiger Knoten konfiguriert werden, aber im Moment muss dieser selbst bereitgestellt werden.</string>
|
||||||
|
<string name="got_it">Alles klar</string>
|
||||||
</resources>
|
</resources>
|
@ -68,4 +68,8 @@
|
|||||||
<string name="delete_contact_warning">Are you sure you want to delete this contact?</string>
|
<string name="delete_contact_warning">Are you sure you want to delete this contact?</string>
|
||||||
<string name="scan_qr_code">Scan QR code</string>
|
<string name="scan_qr_code">Scan QR code</string>
|
||||||
<string name="create_contact">Create contact</string>
|
<string name="create_contact">Create contact</string>
|
||||||
|
<string name="full_node_description">You can\'t receive or send messages unless you start a full node. But be aware that this uses a lot of resources and internet traffic.
|
||||||
|
|
||||||
|
As an alternative you could configure a trusted node in the settings, but as of now you\'ll need to deploy your own.</string>
|
||||||
|
<string name="got_it">Got it</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -23,4 +23,16 @@
|
|||||||
|
|
||||||
<style name="AppTheme" parent="AppTheme.Base"/>
|
<style name="AppTheme" parent="AppTheme.Base"/>
|
||||||
|
|
||||||
|
<style name="CustomShowcaseTheme" parent="ShowcaseView">
|
||||||
|
<item name="sv_backgroundColor">#eeffc107</item>
|
||||||
|
<item name="sv_showcaseColor">#ffc107</item>
|
||||||
|
<item name="sv_buttonText">Hide</item>
|
||||||
|
<item name="sv_tintButtonColor">false</item>
|
||||||
|
<item name="sv_titleTextAppearance">@style/CustomTitle</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="CustomTitle" parent="TextAppearance.ShowcaseView.Title">
|
||||||
|
<item name="android:textColor">@color/colorAccent</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user