extract sweetspot activity into separate module

This commit is contained in:
Vincent Breitmoser 2018-11-20 16:19:31 +01:00
parent e36aab6a97
commit 365cebdc72
14 changed files with 122 additions and 57 deletions

View File

@ -56,6 +56,7 @@ dependencies {
// libs as submodules
implementation project(':libkeychain')
implementation project(':openpgp-api-lib')
implementation project(':nfcsweetspot')
implementation project(':sshauthentication-api')
implementation project(':extern:bouncycastle:core')
implementation project(':extern:bouncycastle:pg')

View File

@ -858,7 +858,7 @@
android:theme="@android:style/Theme.NoDisplay" />
<activity
android:name=".ui.ShowNfcSweetspotActivity"
android:name="de.cotech.sweetspot.ShowNfcSweetspotActivity"
android:exported="false"
android:theme="@style/Theme.Keychain.AppCompat.Transparent.Fullscreen"
/>

View File

@ -33,6 +33,8 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import de.cotech.sweetspot.NfcSweetspotData;
import de.cotech.sweetspot.ShowNfcSweetspotActivity;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenInfo;
@ -92,7 +94,7 @@ public class CreateSecurityTokenWaitFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.create_security_token_wait_fragment, container, false);
boolean showLocateSweetspot = ShowNfcSweetspotActivity.hasSweetspotData();
boolean showLocateSweetspot = NfcSweetspotData.hasSweetspotData();
View buttonLocateSweetspot = view.findViewById(R.id.button_locate_nfc);
buttonLocateSweetspot.setVisibility(showLocateSweetspot ? View.VISIBLE : View.GONE);
buttonLocateSweetspot.setOnClickListener(new OnClickListener() {

33
nfcsweetspot/.gitignore vendored Normal file
View File

@ -0,0 +1,33 @@
#Android specific
bin
gen
obj
lint.xml
local.properties
release.properties
ant.properties
*.class
*.apk
#Gradle
.gradle
build
gradle.properties
#Maven
target
pom.xml.*
#Eclipse
.project
.classpath
.settings
.metadata
#IntelliJ IDEA
.idea
*.iml
#Lint output
lint-report.html
lint-report_files/*

18
nfcsweetspot/build.gradle Normal file
View File

@ -0,0 +1,18 @@
apply plugin: 'com.android.library'
dependencies {
}
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
minSdkVersion 14
}
// Do not abort build if lint finds errors
lintOptions {
abortOnError false
}
}

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="de.cotech.sweetspot" />

View File

@ -15,13 +15,14 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.sufficientlysecure.keychain.securitytoken;
package de.cotech.sweetspot;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import android.os.Build;
import android.util.Pair;
@ -969,4 +970,16 @@ public class NfcSweetspotData {
SWEETSPOT_DATA = Collections.unmodifiableMap(data);
}
public static boolean hasSweetspotData() {
return NfcSweetspotData.SWEETSPOT_DATA.containsKey(Build.MODEL);
}
public static Pair<Double, Double> getSweetspotForBuildModel() {
return getSweetspotForBuildModel(Build.MODEL);
}
public static Pair<Double, Double> getSweetspotForBuildModel(String buildModel) {
return SWEETSPOT_DATA.get(buildModel);
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2017 Schürmann & Breitmoser GbR
* Copyright (C) 2018 Schürmann & Breitmoser GbR
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -15,30 +15,19 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.sufficientlysecure.keychain.ui;
package de.cotech.sweetspot;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.DisplayMetrics;
import android.util.Pair;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.DecelerateInterpolator;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.securitytoken.NfcSweetspotData;
import org.sufficientlysecure.keychain.securitytoken.SecurityTokenConnection;
import org.sufficientlysecure.keychain.ui.base.BaseSecurityTokenActivity;
public class ShowNfcSweetspotActivity extends BaseSecurityTokenActivity {
public static final String EXTRA_TOKEN_INFO = "token_info";
public class ShowNfcSweetspotActivity extends Activity {
private View sweetspotIndicator;
private View sweetspotIcon;
private View sweetspotCircle1;
@ -46,15 +35,16 @@ public class ShowNfcSweetspotActivity extends BaseSecurityTokenActivity {
private View sweetspotCircle3;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
protected void onCreate(Bundle savedInstanceState) {
setTheme(android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
overridePendingTransition(R.anim.fade_in_quick, R.anim.fade_out_quick);
setContentView(R.layout.show_nfc_sweetspot_activity);
sweetspotIndicator = findViewById(R.id.nfc_sweetspot_indicator);
super.onCreate(savedInstanceState);
Pair<Double, Double> nfcPosition = NfcSweetspotData.SWEETSPOT_DATA.get(Build.MODEL);
setContentView(R.layout.activity_nfc_sweetspot);
sweetspotIndicator = findViewById(R.id.indicator_nfc_sweetspot);
Pair<Double, Double> nfcPosition = NfcSweetspotData.getSweetspotForBuildModel();
if (nfcPosition == null) {
throw new IllegalArgumentException("No data available for this model. This activity should not be called!");
}
@ -71,10 +61,10 @@ public class ShowNfcSweetspotActivity extends BaseSecurityTokenActivity {
}
});
sweetspotIcon = findViewById(R.id.nfc_sweetspot_icon);
sweetspotCircle1 = findViewById(R.id.nfc_sweetspot_circle_1);
sweetspotCircle2 = findViewById(R.id.nfc_sweetspot_circle_2);
sweetspotCircle3 = findViewById(R.id.nfc_sweetspot_circle_3);
sweetspotIcon = findViewById(R.id.icon_nfc_sweetspot);
sweetspotCircle1 = findViewById(R.id.circle_nfc_sweetspot_1);
sweetspotCircle2 = findViewById(R.id.circle_nfc_sweetspot_2);
sweetspotCircle3 = findViewById(R.id.circle_nfc_sweetspot_3);
sweetspotIcon.setAlpha(0.0f);
sweetspotCircle1.setAlpha(0.0f);
@ -93,11 +83,6 @@ public class ShowNfcSweetspotActivity extends BaseSecurityTokenActivity {
sweetspotCircle3.animate().alpha(1.0f).setInterpolator(interpolator).setDuration(1000).setStartDelay(300).start();
}
@Override
protected void initTheme() {
// do nothing
}
@Override
public void finish() {
super.finish();
@ -105,14 +90,6 @@ public class ShowNfcSweetspotActivity extends BaseSecurityTokenActivity {
overridePendingTransition(R.anim.fade_in_quick, R.anim.fade_out_quick);
}
@Override
protected void onSecurityTokenPostExecute(SecurityTokenConnection stConnection) {
Intent result = new Intent();
result.putExtra(EXTRA_TOKEN_INFO, tokenInfo);
setResult(Activity.RESULT_OK, result);
finish();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_UP) {
@ -124,15 +101,10 @@ public class ShowNfcSweetspotActivity extends BaseSecurityTokenActivity {
return super.onTouchEvent(event);
}
@NonNull
private DisplayMetrics getDisplaySize() {
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
return metrics;
}
public static boolean hasSweetspotData() {
return NfcSweetspotData.SWEETSPOT_DATA.containsKey(Build.MODEL);
}
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:interpolator="@android:anim/bounce_interpolator"
android:duration="400"
/>
</set>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
android:interpolator="@android:anim/decelerate_interpolator"
android:duration="150"
/>
</set>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M10.59,7.66C10.59,7.66 11.19,7.39 11.57,7.82C11.95,8.26 12.92,9.94 12.92,11.62C12.92,13.3 12.5,15.09 12.05,15.68C11.62,16.28 11.19,16.28 10.86,16.06C10.54,15.85 5.5,12 5.23,11.89C4.95,11.78 4.85,12.05 5.12,13.5C5.39,15 4.95,15.41 4.57,15.47C4.2,15.5 3.06,15.2 3,12.16C2.95,9.13 3.76,8.64 4.14,8.64C4.85,8.64 10.27,13.5 10.64,13.46C10.97,13.41 11.13,11.35 10.5,9.72C9.78,7.96 10.59,7.66 10.59,7.66M19.3,4.63C21.12,8.24 21,11.66 21,12C21,12.34 21.12,15.76 19.3,19.37C19.3,19.37 18.83,19.92 18.12,19.59C17.42,19.26 17.66,18.4 17.66,18.4C17.66,18.4 19.14,15.55 19.1,12.05V12C19.14,8.5 17.66,5.6 17.66,5.6C17.66,5.6 17.42,4.74 18.12,4.41C18.83,4.08 19.3,4.63 19.3,4.63M15.77,6.25C17.26,8.96 17.16,11.66 17.14,12C17.16,12.34 17.26,14.92 15.77,17.85C15.77,17.85 15.3,18.4 14.59,18.07C13.89,17.74 14.13,16.88 14.13,16.88C14.13,16.88 15.09,15.5 15.24,12.05V12C15.14,8.53 14.13,7.23 14.13,7.23C14.13,7.23 13.89,6.36 14.59,6.04C15.3,5.71 15.77,6.25 15.77,6.25Z" />
</vector>

View File

@ -9,7 +9,7 @@
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/nfc_sweetspot_indicator"
android:id="@+id/indicator_nfc_sweetspot"
tools:layout_marginLeft="60dp"
tools:layout_marginTop="100dp"
tools:ignore="UselessParent">
@ -18,35 +18,36 @@
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_gravity="center"
android:src="@drawable/ic_nfc_white_24dp"
android:id="@+id/nfc_sweetspot_icon"
android:src="@drawable/ic_nfc"
android:id="@+id/icon_nfc_sweetspot"
android:tint="#fff"
/>
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_gravity="center"
android:src="@drawable/circle"
android:id="@+id/nfc_sweetspot_circle_1"
android:tint="@color/md_white_1000"
android:src="@drawable/ic_circle"
android:id="@+id/circle_nfc_sweetspot_1"
android:tint="#fff"
/>
<ImageView
android:layout_width="95dp"
android:layout_height="95dp"
android:layout_gravity="center"
android:src="@drawable/circle"
android:id="@+id/nfc_sweetspot_circle_2"
android:tint="@color/md_white_1000"
android:src="@drawable/ic_circle"
android:id="@+id/circle_nfc_sweetspot_2"
android:tint="#fff"
/>
<ImageView
android:layout_width="130dp"
android:layout_height="130dp"
android:layout_gravity="center"
android:src="@drawable/circle"
android:id="@+id/nfc_sweetspot_circle_3"
android:tint="@color/md_white_1000"
android:src="@drawable/ic_circle"
android:id="@+id/circle_nfc_sweetspot_3"
android:tint="#fff"
/>
</FrameLayout>

View File

@ -1,5 +1,6 @@
include ':OpenKeychain'
include ':libkeychain'
include ':nfcsweetspot'
include ':extern:bouncycastle:core'
include ':extern:bouncycastle:pg'
include ':extern:bouncycastle:prov'